我正在尝试减小容器的虚拟大小,qcow2
以便它可以适合具有 10GB 磁盘的 openstack 风格。
root@node-10:~# qemu-img info zztop.qcow
image: zztop.qcow
file format: qcow2
virtual size: 80G (85899345920 bytes)
disk size: 2.6G
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
我遵循指南这里并在磁盘末尾填充零,然后运行qemu-img convert -O qcow2
。但是,生成的 qcow2 保留了相同的磁盘大小和虚拟大小。
如何降低 qcow2 的虚拟大小,以便它可以适合小于 80GB 的 openstack 风格?
答案1
如果你想缩小虚拟尺寸,你需要使用virt-resize
答案2
- 您需要将 qcow2 图像转换为 raw
qemu-img convert -O raw guest.img guest.raw
- 然后调整原始文件的大小
qemu-img resize guest.raw 3G
- 然后将其转换回 qcow2
qemu-img convert -O qcow2 -o compat=0.10 guest.raw guest.img
- 然后运行客户机并调整文件系统大小
答案3
改进了@user370956 的答案
我能够成功将图像的实际尺寸从 5.9G 缩小到 3.5G,并且垂直尺寸也是如此。
- 备份你的图片
cp guest.img quest.backup
- 您需要将 qcow2 图像转换为 raw
qemu-img convert -O raw guest.img guest.raw
- 启动一些挂载为的 live iso
-cdrom
并将其guest.raw
挂载为-drive
qemu-system-x86_64 -machine type=pc,accel=kvm -boot order=d -drive file=guest.raw,format=raw -cdrom ~/Downloads/debian-live-9.6.0-amd64-lxde.iso -m 2G
- 使用 gparted(gui 工具)从客户机内部缩小分区。保留一些可用空间以便系统仍能启动(100 MB 就足够了)。保留剩余空间未分配。检查文件系统。
fsck -a
- 然后调整原始文件的大小
qemu-img resize guest.raw 3G
- 然后将其转换回 qcow2
qemu-img convert -O qcow2 guest.raw guest.img
- 此时,您可以调整 qcow2 虚拟映像的大小以添加一些空间,这不会影响映像文件大小。这可能是确保虚拟机稳定性所必需的。
qemu-img resize guest.img +1G
- 如果您已完成步骤 6,请重复步骤 2、3 来为客户根分区分配更多空间。
答案4
1 - 禁用 fstab 中的交换文件(如果有)
2 - 将 gparted 安装到你的虚拟机 cd-rom
3 - 启动虚拟机,启动 gparted 并将分区大小调整为较小的大小
4 - 删除交换分区并重新创建,或确保所有分区在磁盘开头彼此对齐。缩小分区后,我遇到了交换分区位于磁盘末尾的问题,所以这是解决办法。
5-关闭虚拟机
6 - 找到 qcow2 文件并在同一目录中运行“qemu-img create -f qcow2 -o preallocation=metadata new-disk.qcow2 80G”(其中 80G 是新磁盘大小)
7 - 使用 virt-resize -'virt-resize old-disk.qcow2 new-disk.qcow2'
8 - 将新磁盘复制到 VM 的更正文件名,启动 VM 并重新启用交换,即:'swapon /dev/sda5'
9 - 编辑 fstab 以添加交换,即:'/dev/sda5 swap swap defaults 0 0'
完毕。