在 qemu-img convert 上使用动态而不是固定分配

Use dynamic instead of fixed allocation on qemu-img convert

为了将 Hyper-V VM 迁移到 KVM,我使用 qemu-img convert 实用程序将 vhdx 磁盘转换为兼容格式,如 qcow (OS) 和 raw(数据分区)。最初的 Hyper-V 磁盘使用动态分配。转换后,这似乎改为固定分配。

一个例子:

-rw-r--r-- 1 root root 300G May  6 20:30 IIS-Daten.raw
-rw-r--r-- 1 root root 3.5G May  6 18:17 IIS-Daten.vhdx

IIS-Daten.vhdx为原盘。它的动态分配限制为 300GB。实际上,已经使用了 3.5/300GB。如您所见,转换后的原始文件的大小固定为 300GB。

同OS磁盘

-rw-r--r-- 1 root         root 24G May  6 20:53 IIS.qcow2
-rw-r--r-- 1 libvirt-qemu kvm  36G May  6 19:16 IIS.vhdx

如何将类型更改为动态?根据文档,似乎没有可用的开关来控制这种行为。

更新

使用 df -h 我检查了我的驱动器,发现只使用了 89GB/1.8TB。由于两个虚拟 HDD 都在这些驱动器上,linux 似乎在愚弄我:根据 ls -lh 至少 324GB 用于 qcow2/raw 磁盘。再加上大约 40GB 的旧 vhdx 文件。

我想 ls -lh 显示硬盘的最大容量,而不是当前硬盘。我以前从没见过这个。为什么会发生这种情况,我如何才能看到这些文件的实际使用大小?

IIS-Daten.raw是一个稀疏文件,并非所有块都实际分配在磁盘上。当您读取未分配的块时,您将返回零,当您写入它们时,内核将分配块来存储您写入的内容。这是几十年来的标准 unix 行为。您可以使用 "du $file" 查看文件在磁盘上的实际使用量。

如果你想要动态磁盘,qcow2 格式通常效果更好,它支持动态文件分配而不依赖于稀疏文件。