我正在尝试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 风格?
如果要缩小虚拟大小,则需要使用
virt-resize
qemu-img convert -O raw guest.img guest.raw
qemu-img resize guest.raw 3G
qemu-img convert -O qcow2 -o compat=0.10 guest.raw guest.img
@user370956 的改进答案
我能够成功地将图像的实际尺寸从 5.9G 缩小到 3.5G 和 v. 尺寸。
cp guest.img quest.backup
qemu-img convert -O raw guest.img guest.raw
-cdrom
和你的guest.raw
mount as-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
fsck -a
qemu-img resize guest.raw 3G
qemu-img convert -O qcow2 guest.raw guest.img
qemu-img resize guest.img +1G
仅从主机端进行操作可能会使您的客户文件系统损坏。
因此,要完成这个答案,在主机进行任何更改之前,您需要使用分区工具(例如
gparted
从 VM 内部)更改 VM 的存储分区大小。从而使虚拟磁盘的总大小变得小于虚拟存储所需的大小。之后,您可以执行前 3 个步骤。1 - 如果 fstab 中有交换文件,则禁用交换文件
2 - 将 gparted 挂载到您的 VM cd-rom
3 - 启动 VM,引导 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 - copt new-disk 以更正 VM 的文件名,启动 VM 并重新启用交换,即:'swapon /dev/sda5'
9 - 编辑 fstab 以添加交换,即:'/dev/sda5 swap swap defaults 0 0'
完毕。