btrfsファイルシステムイメージの未使用部分をゼロで埋める方法は?

btrfsファイルシステムイメージの未使用部分をゼロで埋める方法は?

これはVMware WorkstationのゲストLinuxに適用されます。

vmware-toolbox-cmd disk shrink /btrfsのインストールを試みましたcompress=zstd,noatime,nodiratime,space_cache,ssd,discard。ただし、画像は最大サイズまで拡大され、縮小することはできません。

圧縮されたbtrfsは、0ファイルを0に書き込んでいないようです。

ゼロパディング用のioctlパッチがあることがわかりました。https://lwn.net/ml/linux-btrfs/aed736d257f7e91cf3b0cf4d1fdfc247212d8bf7.1524233244.git.dsterba@suse.com/

BTRFS_CLEAR_OP_ZERO_NOUNMAPゲストLinuxで電話をかける方法は?

答え1

私が知る限り、Btrfsファイルシステムの未使用領域をゼロで埋める直接的な方法はありません。ただし、ファイルシステムをゼロで埋められたファイルだけで埋め、削除すると同じ結果が得られます。 sfillはこれを行う1つの方法ですsfill -llz \dev\X。 Sfillは安全除去ツールキットの一部です。https://github.com/GIJack/secure_delete

ただし、指摘したように、これはファイルシステム圧縮が有効になっている場合には適用されません。なぜなら、複数のゼロよりも簡単に圧縮できるものはないからです。これを正しく機能させるには、圧縮= zstdマウントオプションなしでファイルシステムを再マウントする必要があります。または、Btrfsファイルシステムのルートに非圧縮フラグを設定する方法を使用しますbtrfs property set <object> compression ""。システムがBtrfsサブボリュームにある場合は、まずファイルシステムのルートをマウントする必要があります。現時点では、このフラグを削除することしかできませんchattr -c

VMWareイメージは自動的に縮小されませんが、縮小する方法があります。

答え2

答えを追加します。ここ

mkdir -p btrfs-zero
btrfs property set btrfs-zero compression none
cat /dev/zero > btrfs-zero/zero
rm btrfs-zero/zero

関連情報