在工作中经常遇到一种情况,就是虚机磁盘容量不足了。遇到这种情况,一般会选择重建一个磁盘容量更大的虚机或者对当前虚机磁盘进行扩容,重建虚机会丢失当前虚机上的所有文件,一切工作都得重新来,显然不太划算。因此,磁盘扩容是更好的选择。本文将演示如何向centos7虚机添加一块20G的虚拟硬盘。如下所示,当前虚机只剩100M左右的存储空间了:
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 9.0M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 36G 35G 112M 100% /
/dev/sda1 1014M 194M 821M 20% /boot
tmpfs 379M 0 379M 0% /run/user/0
前置条件
- 虚机已设置LVM作为默认磁盘管理类型。
如果不满足此条件,则本教程不会有太大帮助,因为使用传统路线在物理磁盘上创建分区,是无法按此方式扩展现有分区的
- 关闭当前虚机电源
操作流程
1.为虚机添加一块物理磁盘
这一步比较简单,打开vmware workstation,进入对应虚机管理界面
编辑虚拟机设置 >> 添加 >> (选择类型为硬盘)下一步 >> 创建新的磁盘 >> 将虚拟磁盘存储为单个文件 >> 保存
物理磁盘添加完成之后,启动虚机
2.将新的物理磁盘添加到现有卷组
此时登录虚机,执行fdisk -l,可以看到一个大小为10.7G的驱动器。
# fdisk -l
Disk /dev/sda: 42.9 GB, 42949672960 bytes, 83886080 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000bb400
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 83886079 40893440 8e Linux LVM
Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
现在我们需要将新的磁盘加入到现有卷组。执行vgdisplay可以查看当前的卷组信息:
# vgdisplay
--- Volume group ---
VG Name centos
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 1
Max PV 0
Cur PV 1
Act PV 1
VG Size <39.00 GiB
PE Size 4.00 MiB
Total PE 9983
Alloc PE / Size 9982 / 38.99 GiB
Free PE / Size 1 / 4.00 MiB
VG UUID 2sO9FM-jPG3-aYxt-sm2T-Pd6k-vOGO-JLwTlL
在添加磁盘到卷组之前,需要执行一下pvcreate将其格式化为物理卷,这是为了让磁盘和LVM兼容:
# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created
现在sdb已经是物理卷了,可以将其添加到当前卷组:
# vgextend centos /dev/sdb
Volume group "centos" successfully extended
3.使用新的空间扩展逻辑卷
下面,我们需要使用lvextend工具来扩展当前卷,首先我们需要找到当前的逻辑卷,执行lvdispaly即可看到
# lvdisplay
--- Logical volume ---
LV Path /dev/centos/swap
LV Name swap
VG Name centos
LV UUID qcOqiS-Vcth-vHu9-3vh4-oERU-DN0w-5we2jb
LV Write Access read/write
LV Creation host, time localhost, 2022-04-19 00:54:02 -0400
LV Status available
# open 0
LV Size <3.88 GiB
Current LE 992
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:1
--- Logical volume ---
LV Path /dev/centos/root
LV Name root
VG Name centos
LV UUID mZ7t1Q-Us8U-Bk6d-OjlE-B2c4-Pxhf-Fzr078
LV Write Access read/write
LV Creation host, time localhost, 2022-04-19 00:54:03 -0400
LV Status available
# open 1
LV Size <35.12 GiB
Current LE 8990
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
lvdispal显示了两个逻辑卷,通过观察Size可以看出/dev/centos/root是我们需要找的路径
接下来,执行lvextend对数据卷进行扩容:
# lvextend -L9.9G /dev/centos/root
Rounding size to boundary between physical extents: 9.90 GiB.
New size given (2535 extents) not larger than existing size (8990 extents
现在数据卷已经扩容成功,当时文件系统还不知道这事,因此还得更新下文件系统
4.更新文件系统
执行xfs_growfs /dev/centos/root更新文件系统,这里由于centos7默认的文件系统是xfs类型,所以这里使用xfs_growfs,其他文件文件系统一般可使用resize2fs进行更新
# xfs_growfs /dev/centos/root
meta-data=/dev/mapper/centos-root isize=512 agcount=4, agsize=2301440 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=9205760, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=4495, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 9205760 to 11801600
更新完成之后查看挂载点,大小已经改变
# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 17M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 46G 36G 10G 78% /
/dev/sda1 1014M 194M 821M 20% /boot
tmpfs 379M 0 379M 0% /run/user/0