btrfsファイルシステムイメージの未使用部分をゼロで埋める方法は?
これは、VMwareWorkstationのゲストLinux用です。
vmware-toolbox-cmd disk shrink /
としてマウントされたbtrfsを試してみましたcompress=zstd,noatime,nodiratime,space_cache,ssd,discard
。ただし、画像は最大サイズに拡大されたばかりであり、縮小することはできません。
圧縮されたbtrfsはゼロファイルをゼロとして書き込まないようです。
ゼロフィルにいくつかのioctlパッチがあることがわかりました。 https://lwn.net/ml/linux-btrfs/aed736d257f7e91cf3b0cf4d1fdfc247212d8bf7.1524233244.git.dsterba@suse.com/。
BTRFS_CLEAR_OP_ZERO_NOUNMAP
ゲストLinuxからどのように呼び出すことができますか?
回答
私の知る限り、Btrfsファイルシステムの未使用スペースをゼロで埋める直接的な方法はありません。ただし、ファイルシステムにゼロのファイルを入力してから削除するだけで同じことができます。sfillはそのための1つの方法ですsfill -llz \dev\X
。Sfillは、セキュア削除ツールキットの一部です。https://github.com/GIJack/secure_delete。
しかし、あなたが指摘したように、ファイルシステムの圧縮が有効になっていると機能しません。なぜなら、ゼロの束ほど圧縮しやすいものはないからです。それを機能させるには、compress = zstdマウントオプションなしでファイルシステムを再マウントする必要があります。または、圧縮なしフラグをBtrfsファイルシステムのルートに設定しbtrfs property set <object> compression ""
ます。システムがBtrfsサブボリューム上にある場合は、最初にファイルシステムルートをマウントする必要があります。現在、そのフラグはchattr -c
。でのみ削除できます。
VMWareイメージは自動的に縮小されませんが、縮小する方法はいくつかあります。