web-dev-qa-db-ja.com

qcow2の実際のサイズ

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

そのファイルを別のパーティション(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

Qcow2ファイルをコピーする適切な方法は何ですか? "cp"コマンドに2,7Gのみをコピーするスイッチはありますか?

3
dePablo

ファイルはsparseです。つまり、ファイルに「穴」が含まれ、読み取られるとゼロが返されます。

これは、ほとんどがゼロである巨大なファイルが保存されている場合に、実際のハードディスク容量を節約する機能です。 lsは、見かけのファイルサイズを返しますが、duは、ファイルの見かけのサイズからファイルの穴のサイズを差し引いたものを示します(これは、ファイルがディスク上で実際に使用する容量です) )。

ファイルをコピーするとき、cpはファイルの予備性を保持せず、穴はゼロで埋められます。

Linuxでは、穴が十分に大きい場合、ファイルをコピーしてスパース性を維持するときに、--sparse=autoまたは--sparse=alwaysフラグをcpとともに使用できます。一部のBSDシステム(少なくともOpenBSD)では、cpはデフォルトでスパースファイルを正しくコピーしようとします。

また、rsync--sparse-S)オプションとともに使用して、ファイルをコピーすることもできます。

穴が(部分的または完全に)ゼロで埋められている場合でも、結果のファイルは機能的には元のファイルと同等ですが、実際のディスク領域をより多く使用します。

参照: 元々スパースで拡張されたファイルを再びスパースにすることはできますか?

4
Kusalananda