qcow2 实际尺寸

deP*_*blo 4 sparse-files qemu libvirt

我对 qcow2 文件的实际大小有点困惑。

ls -alh VMs/ubuntu-mini.qcow2
-rw------- 1 root root 21G mar 31 23:15 VMs/ubuntu-mini.qcow2
du -h VMs/ubuntu-mini.qcow2
2,7G    VMs/ubuntu-mini.qcow2
Run Code Online (Sandbox Code Playgroud)

我想将该文件复制到不同的分区(ext4)。看起来这个命令实际上复制了21G而不仅仅是我预期的2,7G。现在在新位置,这两个命令(du 和 ls)向我显示相同的大小 - 21G。

du -h /media/HDD0/VMs/ubuntu-mini.qcow2
21G     /media/HDD0/VMs/ubuntu-mini.qcow2
ls -alh /media/HDD0/VMs/ubuntu-mini.qcow2
-rw------- 1 root root 21G mar 31 23:15 /media/HDD0/VMs/ubuntu-mini.qcow2
Run Code Online (Sandbox Code Playgroud)

复制 qcow2 文件的正确方法是什么?“cp”命令中是否有开关使其仅复制2,7G?

Kus*_*nda 8

该文件是sparse,这意味着其中包含“漏洞”,读取时返回零。

当存储大部分为零的大文件时,此功能可节省实际硬盘空间。 ls将返回文件的表观大小,但du会显示文件的表观大小减去文件中的孔的大小(这是文件在磁盘上实际使用的空间大小)。

当您复制文件时,cp不会保留文件的备用性,并且空洞将被零填充。

在 Linux 上,如果孔足够大,您可以在复制文件时使用--sparse=auto--sparse=always标志cp以保持稀疏性。在某些 BSD 系统(至少是 OpenBSD)上,cp默认情况下会尝试正确复制稀疏文件。

您也可以使用rsync--sparse-S)选项来复制文件。

请注意,即使空洞被零填充(部分或全部),生成的文件在功能上将与原始文件等效,但会使用更多的实际磁盘空间。

另请参阅:最初稀疏然后扩展的文件可以再次变得稀疏吗?