df
とls
は、割り当てられたサイズとEXT4ファイルシステムで実際に使用されているスペースの量が異なるため、ホストマシンで異なるサイズを報告します。問題は、両方が間違ったサイズを報告することです。 qemu-img
は、ゲストのファイルシステム内(EXT4も同様)で使用されている実際のスペースを報告しません。
ホスト上:
# qemu-img info sdb.raw
image: sdb.raw
file format: raw
virtual size: 2.0T (2173253451776 bytes)
disk size: 1.9T
# ls -larth sdb.raw
-rw-r--r-- 1 hypervisor hypervisor 2.0T Mar 6 13:47 sdb.raw
# du -sh sdb.raw
1.9T sdb.raw
# fdisk -l sdb.raw
Disk sdb.raw: 2 TiB, 2173253451776 bytes, 4244635648 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: E6242A7E-1253-E74A-9389-68654A21E4F4
Device Start End Sectors Size Type
sdb.raw1 2048 4244635614 4244633567 2T Linux filesystem
ゲスト上(/ dev/vdb1):
# df -h
Filesystem Size Used Avail Use% Mounted on
dev 32G 0 32G 0% /dev
run 32G 496K 32G 1% /run
/dev/vda2 220G 100G 111G 48% /
tmpfs 32G 0 32G 0% /dev/shm
tmpfs 32G 0 32G 0% /sys/fs/cgroup
tmpfs 32G 26M 32G 1% /tmp
/dev/vdb1 2.0T 761G 1.2T 41% /root
tmpfs 6.3G 0 6.3G 0% /run/user/1002
ご覧のとおり、私はゲストシステムで761Gのみを使用していますが、1.2Tはまだ利用可能です。それにもかかわらず、qemu-img
は、私が1.9Tを使用していると言います。どういう理由ですか?これを修正する方法はありますか?ホストマシンで実際に使用されているスペースを確認したい。 sdb.raw
にデータを入力する前に正常に機能したため、達成できることはわかっています。qemuは、ディスク内で使用されているスペースに基づいて正しいディスクサイズを報告しました。残念ながら、それは一方向にしか機能しませんでした-使用済みスペースが徐々に増えていったとき。一部のファイルを削除し、使用容量を1.9Tから761Gに減らした後、qemu-img
によって報告されたサイズは小さい値に変更されず、1.9Tのままでした。
これは予想される動作です。あなたが書いたように、「一部のファイルを削除し、使用済みスペースを1.9Tから761Gに減らした後」-生の仮想イメージは自動的に「ガーベッジを収集」できず、実際のスペースは削除されたファイルに対しても書き込みおよび割り当てされたままになります。回避策は、(double)変換raw> qcow2(> raw)を実行することです。
より詳細な説明はこちら- https://balau82.wordpress.com/2011/05/08/qemu-raw-images-real-size/ そしてこちら- https:// techpiezo .com/tech-insights/raw-vs-qcow2-disk-images-in-qemu-kvm /