約8GBのZFSで処理されるファイルシステムがあります。
次のコマンドを実行してファイルシステムをゼロ化してみました。
dd if=/dev/zero of=/EMPTY bs=1M | true
rm -f /EMPTY
通常、ext4ファイルシステムでは数秒で完了します。
しかし今回は続行されました。
2番目の端末を実行してそのサイズを確認できます/EMPTY
。実行後のll -h
ディスプレイ/EMPTY
は800GBです! 8GBには800GBが適していないようです。
また、これを実行すると、df -h
ファイルシステムがいっぱいになっていないことがわかります。
しかし、ddはCPUの50%を消費し、ラップトップを熱くします。私はそれが多くのことをしますが、何も得られないと仮定します。
それでは、ddが永久に実行され、サイズを全く占めないファイルを生成するのはなぜですか? ext4では完了し、続行できるようにエラーが発生します。
ベストアンサー1
私はあなたが達成したいことが何であるかわからないので、コマンドが実際に実行することだけを説明できます。
dd if=/dev/zero
無制限の0(またはNUL)バイトを返す特別なデバイスからデータを読み取ります。
of=/EMPTY
上記の(無制限)入力で新しいファイルを生成します。
bs=1M
メガバイト単位でデータストリームを無制限に読み書きできます。ファイルシステムがいっぱいになり、多くのツールがそれを処理できないため、このようなことはしないでください。しかし、外部4ファイルシステムが効果的に入力され、コマンドが終了し、圧縮されたファイルシステムはゼロバイトストリームを積極的に圧縮できます。
| true
dd
withはof=
何の出力も生成しないため、これは言葉にならない音です。|| true
状態コードを無効にしようとするかもしれませんが、dd
単一のコマンドが失敗したためスクリプト全体が終了しないので、これはあまり役に立ちません。
一般的な用途は、dd if=/dev/zero
デバイス全体をゼロに設定することです/dev/sdb
。たとえば、他の答えで述べたようにshred
。どちらの場合も、個々のファイルではなくブロックデバイスとしてシステムに表示されるシステムパーティション全体を参照しようとします(もはや存在しない可能性があります)。 Linuxブロックデバイスとマニュアルページに関する多くの本やオンラインリソースがあり、これらshred
もdd
非常に便利です。
ファイルを削除すると、そのブロックをすぐに使用できます。黒魔術をする必要はありません。フォレンジック技術を避けるためにファイルの内容を消去するには、通常のschred --delete
削除の代わりにファイルの削除を使用します。削除されたファイルのブロックを消去することはそれほど簡単ではありません。この作業を安全に行うには、プロフェッショナルなファイルシステム固有のツールが必要です。