ゼロとして未使用のスペースを消去する(btrfs)

ゼロとして未使用のスペースを消去する(btrfs)

未使用のスペースをゼロに消去するには? (ツールを探しています。BTFSファイルシステム)

私はそれ以上を探しています。

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

良いFSアーカイバー「使用スペース」を探しており、使用されていませんが、反対側のサイトは無視されます。

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

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

「よりスマートなアルゴリズム」の説明:「よりスマートなアルゴリズム」が混乱を引き起こすと思ったので、最終的にここにこれを追加することにしました。読者の皆さん、ファイルシステムをデータ構造と考えてください。簡潔にするために、値が整数である関連キー->値配列として機能するマップを保持する独自のバランスのとれた赤黒ツリーを想像してみましょう。目標は、すべての負の値をゼロにクリアすることです。 「スマートではない」アルゴリズムはこれを繰り返して、キーと値のペアを新しいマップに追加します(最終的には負の値を0に変更します)。スマートアルゴリズムは、負の値が格納されている位置のみを検出して削除します。所定の位置に

答え1

空き領域を整理する正確で「賢い」方法は、次のものを使用することです。

fstrim /mountpoint

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

これにより、セキュリティ上の利点がないことは注目に値します。ディスクを安全に削除するには、ファイルをバックアップし、「shred」などのコマンドを使用してディスク全体を初期化してからファイルを復元します。

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

答え2

これは、以前の質問に対する私の答えを修正して拡張して再投稿しました。

sfillパッケージでsecure-delete必要なものは何でもできます。

Zerofree(ext2、ext3、およびext4ファイルシステムでのみ動作します)とは異なり、sfillはすべてのファイルシステムで動作します。

例えば

sfill -l -l -z /mnt/X

sfill/secure-deleteのホームページは今はなくなったようですが、DebianとUbuntu用にパッケージされていました。おそらく他のディストリビューションでも同じでしょう。ソースコードが必要な場合は、他の場所で見つからない場合はDebianアーカイブで見つけることができます。

注:sfillはマウントされたファイルシステムでのみ機能します。仮想マシンの内部ではなくホストシステムでイメージファイルをゼロで埋める場合は、ホストに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"

注:イメージのすべてのパーティションがマウント可能であるとします。私のユースケースでは正しいです(パーティションが1つのfreedos HDイメージ)。パーティションの1つがスワップ領域の場合、これは正しくありません。これらのパーティションを検出し、ddを使用してスワップパーティションをゼロにすることは、読者の練習問題として残ります。 :)

この方法やそのバリエーションはLVMボリュームでも機能します。

イメージがqcowの場合は、イメージファイルとそのパーティションをネットワークブロックデバイスとしてレンダリングするパッケージqemu-nbdのツール(例:/ dev / nbd0 / dev / ndb0p1)を使用できます。これは /dev/ / と同様の方法で使用できます。qemu-utilsマッパー装置。

qemu-img上記の生の方法を使用してqcowから生に変換し、修正された生の画像を再圧縮されたqcow2に変換する方が簡単で手間がかかります(しかし時間がかかります)。これにより、新しいqcow2イメージを作成するときに圧縮されるため、qemu-nbdを使用するよりも少し画像が小さくなる可能性があります。

答え3

cat /dev/zeroまず、圧縮をオフにするとbtrfsで動作します。

btrfs 属性の設定 PATH 圧縮なし

たとえば、

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

仮想マシンイメージでこれを実行した後、通常の方法で仮想ディスクを「縮小」できます。

VMware Fusionを例に挙げましょう。

/Applications/VMware\ Fusion.app/Contents/Library/vmware-vdiskmanager -k DISK.vmdk

関連情報