web-dev-qa-db-ja.com

未使用スペースをゼロでクリア(btrfs)

未使用のスペースをゼロでクリアするにはどうすればよいですか? (btrfsファイルシステム用のツールを求めています)

私はもっ​​と賢いものを探しています

cat /dev/zero > /mnt/X/big_zero ; sync; rm /mnt/X/big_zero

同様 FSArchiver は「使用済みスペース」を探しており、未使用だが反対側のサイトを無視します。

目的:パーティションイメージを圧縮したいので、未使用のスペースをゼロで埋めることを強くお勧めします。

ところでext3、ext4の場合: ゼロで未使用のスペースをクリアする(ext3、ext4) 。ここでbtrfsを要求します

「よりスマートなアルゴリズム」の明確化:「よりスマートなアルゴリズム」は混乱を招くことがわかるので、ここで最終的にそれについて行を追加することにしました。親愛なる読者、ファイルシステムをデータ構造として考えてください。単純化するために、関連付けキー->値の配列として使用される、赤と黒のツリーを保持する自己バランスを考えてみましょう。値は整数です。目標は、すべての負の値をゼロでクリアすることです。 「スマートではない」アルゴリズムはそれを反復し、キーと値のペアを新しいマップに追加します(最終的には負の値をゼロに変更します)。スマートアルゴリズムは、負の値が格納されている場所を検出し、それらをクリアしますin-place

10

これは、前の質問に対する私の回答の修正され、大幅に拡張された再投稿です。

secure-deleteパッケージのsfillは、必要な処理を実行できます。

Zerofree(ext2、ext3、およびext4ファイルシステムでのみ機能します)とは異なり、sfillは任意のファイルシステムで機能します。

例えば.

sfill -l -l -z /mnt/X

Sfill/secure-deleteホームページは消えたようですが、debianとubuntu用にパッケージ化されています。おそらく他のディストリビューションも。ソースコードが必要な場合、それがどこにも見つからない場合は、debianアーカイブにあります。

注:sfillはマウントされたファイルシステムでのみ機能します。 VM内からではなく、ホストシステムからイメージファイルをゼロで埋める場合は、fsイメージをホストにマウントする必要があります。正確な方法は、画像ファイルの種類(qcow2またはrawなど)によって異なります。

「未加工」イメージのマウントは簡単で簡単です。イメージファイルでkpartxを使用してループバックデバイスを作成し、各パーティションの/ dev/mapper /エントリを個別にマウントできます。

以下は、ネットブート可能なfreedosハードディスクイメージをマウントするために使用するスクリプトの一部を変更した部分的なスクリプトです(flashromが機能しないマシンでのBIOSの更新に使用されます)。

image="myrawimagefile.img"

# use kpartx to build /dev/mapper device nodes
KP=$(kpartx -a -v "$image")

# now mount each partition under ./hd/
for p in $(echo "$KP" | awk '/^add map/ {print $3}') ; do
  dm="/dev/mapper/$p"
  fp=$(echo "$p" | sed -r -e 's/^loop[0-9]+//')
  mkdir -p "./hd/$fp"
  mount "$dm" "./hd/$fp"
  sfill -l -l -v "./hd/$fp"
  umount "$dm"
done

# now remove the loopback device and /dev/mapper entries
kpartx -d "$image"

注:イメージ内のすべてのパーティションがマウント可能であることを前提としています。私のユースケースではtrue(1つのパーティションを持つfreedos hdイメージ)。たとえば、パーティションの1つがスワップ領域である場合は当てはまりません。そのようなパーティションを検出し、ddを使用してスワップパーティションをゼロにすることは、読者の練習問題として残します:)

この方法またはその変形は、LVMボリュームでも機能するはずです。

イメージがqcowの場合、qemu-nbdパッケージのqemu-utilsツールを使用できます。これにより、イメージファイルとそのパーティションがネットワークブロックデバイスとして表示されます。/dev/nbd0/dev/ndb0p1-上記の/ dev/mapperデバイスと同様の方法で使用できます。

qemu-imgを使用してqcowからrawに変換し、上記のrawのメソッドを使用して、変更されたrawイメージを圧縮されたqcow2に変換する方が、おそらく簡単で手間がかかりません(時間がかかります)。新しいqcow2イメージが作成されるときに圧縮するため、これはおそらくqemu-nbdを使用するよりもわずかに小さいイメージになります。

4
cas

空き領域をクリアするための正しい「スマートな」方法は、以下を使用しています。

fstrim /mountpoint

マウントされたファイルシステムでこれを使用してください。

これにはセキュリティ上の利点がないことに注意することが重要です。セキュリティのためにディスクをクリアする場合は、ファイルをバックアップし、「shred」などのコマンドでディスク全体をゼロにしてから、ファイルを復元します。

ただし、ディスクがスパースファイルシステムのシンプロビジョニングであり、未使用のスペースを回復したい場合、ソリューションは正常に機能します。

3
DustWolf