在 VMware Workstation 中给虚拟机扩容硬盘
最初安装 centos 7 的时候,默认分配 60GB 硬盘,现在感觉空间不够,又添加了一块 500G 的硬盘,打算划拨200G给 / 根目录,剩余空间留着备用。
[TOC]
关于 LVM 知识
- LVM(Logical Volume Manager,逻辑卷管理器)是 Linux 系统的磁盘管理工具,它通过3层抽象来管理存储空间,分别是物理卷PV(Physical Volume)、卷组VG(Volume Group)、逻辑卷LV(Logical Volume)。下图则展示了从物理磁盘到文件系统的完整存储映射关系:
应用场景:有2块1TB的硬盘,想创建一个2TB的分区,采用标准的磁盘划分方法(只能划分出2个1TB的分区)是无法实现的。采用LVM技术,把2块1TB的磁盘做成PV(物理卷),然后将它们加入到同一个VG,该VG的容量即为2TB
- 使用 LVM 的步骤如下:
1、基于物理磁盘创建 PV(物理卷),这样才能添加到LVM中的卷组
2、创建 VG(卷组),并将上面创建的 PV 加入里面
3、基于上面创建的 VG 创建 LV(逻辑卷)
4、对划分的 LV 进行文件系统格式化,如xfs、ext4等
5、挂载文件系统
划拨200G给根目录
- 第1步,在 VMware Workstation 的在虚拟机列表中找到待扩容的虚拟机,将其关机,然后添加一块500G的硬盘(如下图示)
- 第2步,将虚拟机开机,执行
fdisk -l看到新加的物理磁盘 /dev/sdb 大小 536.9 GB,文件系统 /dev/mapper/centos-root 为 39.8 GB
[root@localhost ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 12M 1.9G 1% /run
/dev/mapper/centos-root xfs 38G 1.8G 36G 5% / #.看这里
/dev/mapper/centos-home xfs 19G 33M 19G 1% /home
/dev/sda1 xfs 1014M 151M 864M 15% /boot
[root@localhost ~]# fdisk -l | grep dev
Disk /dev/sda: 64.4 GB, 64424509440 bytes, 125829120 sectors #.看这里
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 125829119 61864960 8e Linux LVM
Disk /dev/sdb: 536.9 GB, 536870912000 bytes, 1048576000 sectors #.看这里
Disk /dev/mapper/centos-root: 39.8 GB, 39766196224 bytes, 77668352 sectors #.看这里
Disk /dev/mapper/centos-swap: 4160 MB, 4160749568 bytes, 8126464 sectors
Disk /dev/mapper/centos-home: 19.4 GB, 19415433216 bytes, 37920768 sectors
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 59G 0 part
├─centos-root 253:0 0 37G 0 lvm / #.看这里
├─centos-swap 253:1 0 3.9G 0 lvm [SWAP]
└─centos-home 253:2 0 18.1G 0 lvm /home
sdb 8:16 0 500G 0 disk #.看这里
sr0 11:0 1 1024M 0 rom
[root@localhost ~]# vgdisplay | egrep "(Name|Size)"
VG Name centos #.看这里
VG Size <59.00 GiB
PE Size 4.00 MiB
Alloc PE / Size 15102 / 58.99 GiB
Free PE / Size 1 / 4.00 MiB #.看这里
- 第3步,基于物理磁盘 /dev/sdb 创建 pv 物理卷
[root@localhost ~]# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created.
- 第4步,确认 vg 卷组名称(示例为 centos),然后将 pv 物理卷加入卷组
[root@localhost ~]# vgdisplay | grep "VG Name"
VG Name centos
[root@localhost ~]# vgextend centos /dev/sdb
Volume group "centos" successfully extended
- 第5步,执行
vgdisplay确认 Free PE 的数量,每个 PE 为 4MB,所以 500GB = 128000 个 PE
[root@localhost ~]# vgdisplay | egrep "(Name|Size)"
VG Name centos
VG Size 558.99 GiB
PE Size 4.00 MiB
Alloc PE / Size 15102 / 58.99 GiB
Free PE / Size 128000 / 500.00 GiB #.看这里
- 第6步,执行
df -Th确认根目录的挂载设备,示例为/dev/mapper/centos-root,文件系统为 xfs
注:xfs 文件系统只能扩容、不能缩容,而 ext4 文件系统支持扩容、支持缩容
[root@localhost ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 12M 1.9G 1% /run
/dev/mapper/centos-root xfs 38G 1.8G 36G 5% /
/dev/sda1 xfs 1014M 151M 864M 15% /boot
- 第7步,为逻辑卷扩容,比如为根目录加上200GB,即 51200个PE(-l +51200 等效于 -L +200G)
注:参数 -l 后面跟 PE 的数量,-L 后面跟容量的大小,而 -L +200G 表示加200G、-L 200G 表示加到200G
[root@localhost ~]# lvextend -l +51200 /dev/mapper/centos-root
Size of logical volume centos/root changed from <37.04 GiB (9481 extents) to <237.04 GiB (60681 extents).
Logical volume centos/root successfully resized.
[root@localhost ~]# df -Th | grep root
/dev/mapper/centos-root xfs 38G 1.8G 36G 5% /
- 第8步,刷新元数据以便系统识别,针对 xfs 格式使用 xfs_growfs,针对 ext4 格式使用 resize2fs
附:ubuntu 默认为 ext4 格式,扩容参考
resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv
[root@localhost ~]# xfs_growfs /dev/mapper/centos-root
meta-data=/dev/mapper/centos-root isize=512 agcount=4, agsize=2427136 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=9708544, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=4740, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 9708544 to 6213734
- 第9步,再次查看系统分区情况,根目录 / 已经从 38G 扩容到 238G,而 Free PE 剩余 300G
[root@localhost ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 12M 1.9G 1% /run
/dev/mapper/centos-root xfs 238G 1.8G 236G 1% / #.看这里
/dev/mapper/centos-home xfs 19G 33M 19G 1% /home
/dev/sda1 xfs 1014M 151M 864M 15% /boot
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 59G 0 part
├─centos-root 253:0 0 237G 0 lvm / #.看这里
├─centos-swap 253:1 0 3.9G 0 lvm [SWAP]
└─centos-home 253:2 0 18.1G 0 lvm /home
sdb 8:16 0 500G 0 disk #.看这里
└─centos-root 253:0 0 237G 0 lvm / #.看这里
sr0 11:0 1 1024M 0 rom
[root@localhost ~]# fdisk -l | grep dev
Disk /dev/sda: 64.4 GB, 64424509440 bytes, 125829120 sectors
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 125829119 61864960 8e Linux LVM
Disk /dev/sdb: 536.9 GB, 536870912000 bytes, 1048576000 sectors
Disk /dev/mapper/centos-root: 254.5 GB, 254514561024 bytes, 497098752 sectors #.看这里
Disk /dev/mapper/centos-swap: 4160 MB, 4160749568 bytes, 8126464 sectors
Disk /dev/mapper/centos-home: 19.4 GB, 19415433216 bytes, 37920768 sectors
[root@localhost ~]# vgdisplay | egrep "(Name|Size)"
VG Name centos
VG Size 558.99 GiB
PE Size 4.00 MiB
Alloc PE / Size 66302 / 258.99 GiB
Free PE / Size 76800 / 300.00 GiB #.看这里
拓展练习
- 基于上面的场景(根目录 / 已经从 38G 扩容到 238G),下面进行拓展练习。
1.直接将根目录扩到300G
- 如果想进一步把根目录 / 扩到 300G,只需 lvextend 及 xfs_growfs 这2步,具体如下:
#.利用 -L 300G 直接加到 300G
[root@localhost ~]# lvextend -L 300G /dev/mapper/centos-root
Size of logical volume centos/root changed from <237.04 GiB (60681 extents) to 300.00 GiB (76800 extents).
Logical volume centos/root successfully resized.
#.针对 xfs 格式使用 xfs_growfs 刷新元数据
[root@localhost ~]# xfs_growfs /dev/mapper/centos-root
meta-data=/dev/mapper/centos-root isize=512 agcount=26, agsize=2427136 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=62137344, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=4740, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 62137344 to 78643200
- 下面是确认过程:
[root@localhost ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 12M 1.9G 1% /run
/dev/mapper/centos-root xfs 300G 1.8G 299G 1% / #.看这里
/dev/mapper/centos-home xfs 19G 33M 19G 1% /home
/dev/sda1 xfs 1014M 151M 864M 15% /boot
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 59G 0 part
├─centos-root 253:0 0 300G 0 lvm / #.看这里
├─centos-swap 253:1 0 3.9G 0 lvm [SWAP]
└─centos-home 253:2 0 18.1G 0 lvm /home
sdb 8:16 0 500G 0 disk #.看这里
└─centos-root 253:0 0 300G 0 lvm / #.看这里
sr0 11:0 1 1024M 0 rom
[root@localhost ~]# fdisk -l | grep dev
Disk /dev/sda: 64.4 GB, 64424509440 bytes, 125829120 sectors
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 125829119 61864960 8e Linux LVM
Disk /dev/sdb: 536.9 GB, 536870912000 bytes, 1048576000 sectors
Disk /dev/mapper/centos-root: 322.1 GB, 322122547200 bytes, 629145600 sectors #.看这里
Disk /dev/mapper/centos-swap: 4160 MB, 4160749568 bytes, 8126464 sectors
Disk /dev/mapper/centos-home: 19.4 GB, 19415433216 bytes, 37920768 sectors
- 执行 vgdisplay 看到 Free PE 剩余 237.04 GiB,因为没有把全部空间划给根目录嘛
[root@localhost ~]# vgdisplay | egrep "(Name|Size)"
VG Name centos
VG Size 558.99 GiB
PE Size 4.00 MiB
Alloc PE / Size 82421 / <321.96 GiB
Free PE / Size 60681 / <237.04 GiB #.看这里
2.将剩余空间全部划给 /data
- 第1步,执行 lsblk 看到 /dev/sdb 共 500G,根目录 / 使用了 300G,执行 vgdisplay 看到 还剩 60681 个PE可用(每个PE 为 4MB)
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 59G 0 part
├─centos-root 253:0 0 300G 0 lvm /
├─centos-swap 253:1 0 3.9G 0 lvm [SWAP]
└─centos-home 253:2 0 18.1G 0 lvm /home
sdb 8:16 0 500G 0 disk #.看这里
└─centos-root 253:0 0 300G 0 lvm / #.看这里
sr0 11:0 1 1024M 0 rom
[root@localhost ~]# vgdisplay | egrep "(Name|Size)"
VG Name centos
VG Size 558.99 GiB
PE Size 4.00 MiB
Alloc PE / Size 82421 / <321.96 GiB
Free PE / Size 60681 / <237.04 GiB #.看这里
- 第2步,执行 lvcreate 创建 LV 逻辑卷,在名为 centos 的卷组中 -n 创建一个名为 data 的新逻辑卷,-l +60681 指定增加 60681 个 PE
[root@localhost ~]# lvcreate -l +60681 -n data centos
Logical volume "data" created.
- 第3步,执行 vgdisplay 若 Free PE 为 0 则表示没有可用的空间了
[root@localhost ~]# vgdisplay | egrep "(Name|Size)"
VG Name centos
VG Size 558.99 GiB
PE Size 4.00 MiB
Alloc PE / Size 143102 / 558.99 GiB
Free PE / Size 0 / 0 #.看这里
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 59G 0 part
├─centos-root 253:0 0 300G 0 lvm /
├─centos-swap 253:1 0 3.9G 0 lvm [SWAP]
└─centos-home 253:2 0 18.1G 0 lvm /home
sdb 8:16 0 500G 0 disk
├─centos-root 253:0 0 300G 0 lvm /
└─centos-data 253:3 0 237G 0 lvm #.多了这行
sr0 11:0 1 1024M 0 rom
[root@localhost ~]# fdisk -l | grep dev
Disk /dev/sdb: 536.9 GB, 536870912000 bytes, 1048576000 sectors
Disk /dev/sda: 64.4 GB, 64424509440 bytes, 125829120 sectors
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 125829119 61864960 8e Linux LVM
Disk /dev/mapper/centos-root: 322.1 GB, 322122547200 bytes, 629145600 sectors
Disk /dev/mapper/centos-swap: 4160 MB, 4160749568 bytes, 8126464 sectors
Disk /dev/mapper/centos-home: 19.4 GB, 19415433216 bytes, 37920768 sectors
Disk /dev/mapper/centos-data: 254.5 GB, 254514561024 bytes, 497098752 sectors #.多了这行
- 第4步,格式化逻辑卷,示例将新逻辑卷格式化为 ext4 文件系统
[root@localhost ~]# mkfs.ext4 /dev/mapper/centos-data
......
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
- 第5步,创建挂载点并手动挂载
[root@localhost ~]# mkdir /data
[root@localhost ~]# mount /dev/mapper/centos-data /data
- 第6步,执行
df -Th看到新挂载点 /data 大小 197G
[root@localhost ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 12M 1.9G 1% /run
/dev/mapper/centos-root xfs 300G 1.8G 299G 1% / #.看这里
/dev/mapper/centos-home xfs 19G 33M 19G 1% /home
/dev/sda1 xfs 1014M 151M 864M 15% /boot
/dev/mapper/centos-data ext4 234G 61M 222G 1% /data #.看这里

