侧边栏壁纸
博主头像
liveJQ博主等级

沒有乐趣,何来开始

  • 累计撰写 146 篇文章
  • 累计创建 60 个标签
  • 累计收到 2 条评论

KVM虚拟机扩容 qcow2 系统文件

liveJQ
2023-02-25 / 0 评论 / 0 点赞 / 1,000 阅读 / 3,331 字 / 正在检测是否收录...
广告 广告

最近用 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

pnetlab_full_disk_error

通过 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 不匹配错误

开机进入系统之后,首先查看下磁盘大小变化情况。

pmbr_error

确实扩容成功了,但是出现了“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    

扩容文件系统的根目录

查看扩容后块设备的使用情况

ubuntu_lsblk_after_extened

将新增加的空间分配到根目录所在的物理卷上/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.

最终成功扩容根目录

ubuntu_extend_the_root_filesystem_successfully

相关资料

  1. [SOLVED] HOW TO FIX ERROR: GPT PMBR SIZE MISMATCH
  2. Ubuntu – Extend LVM partition and disk
0

评论区