これは、前の質問に対する私の回答の修正され、大幅に拡張された再投稿です。
sfill
secure-delete
パッケージからあなたが望むことを行うことができます。
zerofree(ext2、ext3、およびext4ファイルシステムでのみ機能します)とは異なり、sfillは任意のファイルシステムで機能します。
例えば
sfill -l -l -z /mnt/X
sfill / secure-deleteホームページは消えたようですが、debianとubuntu用にパッケージ化されています。おそらく他のディストリビューションも。ソースコードが必要な場合、それがどこにも見つからない場合は、debianアーカイブにあります。
注:sfillはマウントされたファイルシステムでのみ機能します。VM内からではなくホストシステムからイメージファイルをゼロで埋める場合は、fsイメージをホストにマウントする必要があります。正確な方法は、画像ファイルの種類(qcow2またはrawなど)によって異なります。
「未加工」イメージのマウントは簡単で簡単です。ただ、使用のkpartx
パーティションごとにループバックデバイスと/ dev /マッパー/エントリを作成するには、画像ファイルには、その後、個別にマウントすることができます。
以下は、ネットブート可能な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を使用するよりもわずかに小さいイメージになります。
sfill
提案を試しましたか?extXは必要ないようです。