最近用 PnetLab 做了许多实验,突然有一天早上打开页面发现报错了,大意是说我磁盘空间用尽了,上控制台查看后确实如此。之前是有做过基于 KVM 虚拟磁盘扩容的,是 LEDE 还是 OPENWRT 来着,没什么印象了😳。
root@pnetlab:~# df -hl
Filesystem Size Used Avail Use% Mounted on
udev 7.8G 0 7.8G 0% /dev
tmpfs 1.6G 8.0M 1.6G 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 97G 91G 1.3G 99% /
tmpfs 7.9G 0 7.9G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 7.9G 0 7.9G 0% /sys/fs/cgroup
/dev/vda2 976M 156M 754M 18% /boot
tmpfs 1.6G 0 1.6G 0% /run/user/0
通过 qemu-img 直接扩容
使用 qemu-img 工具直接扩容
root@PowerEdge:/mnt/user/isos# qemu-img resize PNET_4.2.10.qcow2 +200G
Image resized.
扩容前
root@PowerEdge:/mnt/user/isos# qemu-img info PNET_4.2.10.qcow2
image: PNET_4.2.10.qcow2
file format: qcow2
virtual size: 100 GiB (107374182400 bytes)
disk size: 92.3 GiB
cluster_size: 65536
Format specific information:
compat: 1.1
compression type: zlib
lazy refcounts: false
refcount bits: 16
corrupt: false
extended l2: false
扩容200G后
root@PowerEdge:/mnt/user/isos# qemu-img info PNET_4.2.10.qcow2
image: PNET_4.2.10.qcow2
file format: qcow2
virtual size: 300 GiB (322122547200 bytes)
disk size: 92.3 GiB
cluster_size: 65536
Format specific information:
compat: 1.1
compression type: zlib
lazy refcounts: false
refcount bits: 16
corrupt: false
extended l2: false
修复扩容后 PMBR 不匹配错误
开机进入系统之后,首先查看下磁盘大小变化情况。
确实扩容成功了,但是出现了“GPT PMBR size mismatch”的错误,因为我先前扩容了整个磁盘,所以 PMBR 分区的起始位置也跟着发生了变化。
来自 ChatGPT 的回答:PMBR 分区(Protective MBR Partition,保护性主引导分区)是一种特殊的分区类型,它在使用较老的 BIOS 引导方式时,用于保护磁盘中的 GPT 分区结构。在使用 GPT 分区格式时,硬盘的第一个扇区会被分配给 GPT 分区表,并记录分区信息。但是,由于一些老的操作系统或计算机仅支持使用 MBR 分区表和 BIOS 引导方式,这就导致了在这些系统中无法直接读取和使用 GPT 分区的情况。为了解决这个问题,PMBR 分区的作用就在于在 GPT 分区表前面创建一个 MBR 分区表,同时在该 MBR 分区表中定义一个类型为 “Protective” 的分区,用来保护 GPT 分区表不被误操作或覆盖。这样,使用老的 BIOS 引导方式时,就可以直接读取 MBR 分区表,并将 GPT 分区当成一个未知的分区,从而保证了硬盘的数据完整性。因此,PMBR 分区在使用 GPT 分区格式的计算机中非常重要,它能够确保老的 BIOS 引导方式不会对 GPT 分区造成破坏,保障数据安全。
修复错误
root@pnetlab:~# parted -l
Model: Linux device-mapper (linear) (dm)
Disk /dev/mapper/ubuntu--vg-ubuntu--lv: 106GB
Sector size (logical/physical): 512B/512B
Partition Table: loop
Disk Flags:
Number Start End Size File system Flags
1 0.00B 106GB 106GB ext4
Warning: Not all of the space available to /dev/vda appears to be used, you can
fix the GPT to use all of the space (an extra 419430400 blocks) or continue with
the current setting?
Fix/Ignore? fix
Model: Virtio Block Device (virtblk)
Disk /dev/vda: 322GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 2097kB 1049kB bios_grub
2 2097kB 1076MB 1074MB ext4
3 1076MB 107GB 106GB
扩容文件系统的根目录
查看扩容后块设备的使用情况
将新增加的空间分配到根目录所在的物理卷上/dev/vda3
root@pnetlab:~# growpart /dev/vda 3
CHANGED: partition=3 start=2101248 old: size=207611904 end=209713152 new: size=627044319,end=629145567
root@pnetlab:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 252:0 0 300G 0 disk
├─vda1 252:1 0 1M 0 part
├─vda2 252:2 0 1G 0 part /boot
└─vda3 252:3 0 299G 0 part
└─ubuntu--vg-ubuntu--lv 253:0 0 99G 0 lvm /
扩展逻辑卷
root@pnetlab:~# pvresize /dev/vda3
Physical volume "/dev/vda3" changed
1 physical volume(s) resized / 0 physical volume(s) not resized
将空间全部分配到挂载在根目录下的逻辑卷
root@pnetlab:~# lvextend -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv
Size of logical volume ubuntu-vg/ubuntu-lv changed from <99.00 GiB (25343 extents) to <299.00 GiB (76543 extents).
Logical volume ubuntu-vg/ubuntu-lv successfully resized.
刷新文件系统,使刚才分配的空间可用。
root@pnetlab:~# resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv
resize2fs 1.44.1 (24-Mar-2018)
Filesystem at /dev/mapper/ubuntu--vg-ubuntu--lv is mounted on /; on-line resizing required
old_desc_blocks = 13, new_desc_blocks = 38
The filesystem on /dev/mapper/ubuntu--vg-ubuntu--lv is now 78380032 (4k) blocks long.
最终成功扩容根目录
评论区