最近频繁使用PVE创建多个虚拟机,在系统安装时为了减少磁盘占用只给了32G的磁盘空间,但是在实际使用的过程中经常出现磁盘爆满的情况。
虚拟机磁盘扩容
通过PVE的qcow2格式磁盘挂载可以直接扩展系统可用的磁盘空间,操作方法也很简单。选择虚拟机 > Hardware > Hard Disk > Disk Action > Resize。随后填入需要增加的空间大小后确认即可。

系统分区扩容
在使用LVM作为分区管理的系统中,均可以通过该方案无损调整分区大小。此处以Ubuntu24.04为例给出说明,虽说无损但是防呆不防傻,操作前仍需备份关键资料避免损失。
LVM管理的是磁盘的逻辑分区方式,存在 物理卷(PV, Physical volume)、卷组(VG,Volume group)和逻辑卷(LV,Logical volume)相关概念,此处不赘述其逻辑和实现。但是需要指明的一点是,最贴近磁盘概念的PV管理的仍然是指定的磁盘分区,相关命令无法修改磁盘的 分区 信息。
因此在扩容虚拟机的磁盘空间时,仍然需要 fdisk 工具对磁盘的分区信息做调整。请注意,这里仅调整磁盘分区信息,调整的是磁盘分区描述的配置信息。不是在物理意义上重新创建磁盘分区!!
例如我当前的磁盘分区状态如下
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 128G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 2G 0 part /boot
└─sda3 8:3 0 30G 0 part
└─ubuntu--vg-ubuntu--lv 252:0 0 15G 0 lvm /可以看到磁盘具有128G空间,但是sda3分区只有30G空间,此时运行 pvresize 啥都不好使。所以要先删除sda3分区表,再创建一个出来。新创建的分区表起始扇区要严格匹配删除的扇区,终止扇区只能向后延长,并且分区表创建成功后不要!!不要!!不要!!自动初始化(不要一路按回车!!)
$ fdisk /dev/sda
# ----------------------------------------
Command (m for help): d # 进入分区删除功能
Partition number (1-3, default 3): # 删除第三个磁盘,默认为最后一个磁盘,直接回车
# ----------------------------------------
Command (m for help): n # 进入分区创建功能
Partition number (3-128, default 3): # 创建第三个磁盘,使用默认值
First sector (4198400-268435422, default 4198400): # 磁盘分区起始扇区,默认值与删除的恰好匹配,直接回车
Last sector, +/-sectors or +/-size{K,M,G,T,P} (4198400-268435422, default 268433407): # 磁盘分区终止扇区,默认值是整个磁盘,直接回车
Created a new partition 3 of type 'Linux filesystem' and of size 126 GiB.
Partition #3 contains a LVM2_member signature.
Do you want to remove the signature? [Y]es/[N]o: N # 选择N,保留分区标识。不然数据就拜拜啦
# ----------------------------------------
Command (m for help): w # 写入分区信息
The partition table has been altered.
Syncing disks.备注,如果没有fdisk就安装一个。
操作完成后即可通过 lsblk 看到sda3分区已经变大了。
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 128G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 2G 0 part /boot
└─sda3 8:3 0 126G 0 part
└─ubuntu--vg-ubuntu--lv 252:0 0 15G 0 lvm /LVM系统分区扩容
在上述磁盘分区已经扩容的基础上使用LVM的能力扩容系统分区。
先使用 pvresize /dev/sda3 扩容物理卷(PV)的可用范围为整个硬盘分区。卷组(VG)会自动跟随PV增大容量,无需手动再做调整。
$ pvs
PV VG Fmt Attr PSize PFree
/dev/sda3 ubuntu-vg lvm2 a-- <30.00g 15.00g
$ pvresize /dev/sda3
Physical volume "/dev/sda3" changed
1 physical volume(s) resized or updated / 0 physical volume(s) not resized
$ pvs
PV VG Fmt Attr PSize PFree
/dev/sda3 ubuntu-vg lvm2 a-- <126.00g 111.00g
$ vgdisplay
--- Volume group ---
VG Name ubuntu-vg
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 1
Act PV 1
VG Size <126.00 GiB
PE Size 4.00 MiB
Total PE 32255
Alloc PE / Size 3839 / <15.00 GiB
Free PE / Size 28416 / 111.00 GiB
VG UUID ZzEzfr-Qjgx-cmYh-NnBt-QvuX-vUxg-pXjhf6扩展Linux系统所在的逻辑分区到整个VG,即扩展 /dev/ubuntu-vg/ubuntu-lv 设备空间大小。使用 lvextend 命令扩容,更多控制参数可自行上网搜索。通过 +100%FREE 来描述扩容的范围是所有的剩余空间,避免计算空间大小。
$ lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
ubuntu-lv ubuntu-vg -wi-ao---- <15.00g
$ lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
Size of logical volume ubuntu-vg/ubuntu-lv changed from <15.00 GiB (3839 extents) to <126.00 GiB (32255 extents).
Logical volume ubuntu-vg/ubuntu-lv successfully resized.
$ lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
ubuntu-lv ubuntu-vg -wi-ao---- <126.00g在LVM扩容后要根据系统的文件系统类型更新文件系统的容量上限。
# 检查文件系统类型
$ df -T /
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/mapper/ubuntu--vg-ubuntu--lv ext4 15371208 9202180 5366420 64% /
# 对于ext4文件系统
$ resize2fs /dev/ubuntu-vg/ubuntu-lv
# 对于xfs文件系统
$ xfs_growfs /全部操作完成后可使用 df 或 lsblk 命令检查效果
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 128G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 2G 0 part /boot
└─sda3 8:3 0 126G 0 part
└─ubuntu--vg-ubuntu--lv 252:0 0 126G 0 lvm /
$ df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 794M 996K 794M 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 124G 8.8G 110G 8% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda2 2.0G 191M 1.6G 11% /boot
tmpfs 794M 12K 794M 1% /run/user/0
