我在一台服务器上运行着 Windows 10 VM,我需要将其移至另一台服务器。问题是 qcow2 文件大小对于目标服务器来说太大。
奇怪的是,它所在的分区(在源服务器上)显示的已用磁盘空间如下:
Size Used Avail
680G 147G 499G
但是,qcow2 文件的大小实际上是 501G。这没有道理(使用了 147G,但上面有一个 501G 的文件),因为我认为磁盘大小会随着空间的实际使用而增长(在 VM 中,Windows 报告 C: 已使用 31.3G,而可用空间为 467G),而且文件大小实际上(使用 ls 显示时)大于磁盘上已使用的数据。换句话说,我在分区上使用了 147G 的磁盘空间,但“ls”显示 qcow2 文件是 501G。
当我想将其复制到另一台机器时,我遇到了同样的问题:磁盘空间不足。我已经对 qcow2 文件和 XML 数据进行了 gzip 压缩,以便移动虚拟机(大约 26G),但在目标(新)服务器上对经过 gzip 压缩的文件进行扩容时,它会扩展到 501G 的“实际使用”磁盘空间,这比我能分配给它的空间要大。
所以我想我的问题是双重的:
- 为什么原始服务器上的文件报告大于分区上的已用空间?
- 我怎样才能减少 qcow2 文件的大小,以便它仅使用虚拟机使用的磁盘空间(即 31.3G)?
答案1
- 您可能有该虚拟机的快照吗?
- 尝试转换此 qcow2 文件。此命令将“缩小”qcow2 文件。删除快照(如果有)并使用
qemu-img convert -p -f qcow2 ./vm-disk-original.qcow2 -O qcow2 ./vm-disk-shrinked.qcow2
答案2
使用 cp 的“--sparse=always”参数。示例:sudo cp --sparse=always ktun.edu.tr.qcow2 /var/lib/libvirt/images/ktun.edu.tr.qcow2