すでにゼロバイトを上書きせずにデバイスをゼロで埋める方法は?

すでにゼロバイトを上書きせずにデバイスをゼロで埋める方法は?

私はUSBフラッシュドライブusb 3を持っており、読み取り速度は書き込み速度よりはるかに高速です。フラッシュの99%がすでにゼロで埋められていると仮定すると、100%まですべてのメモリフラッシュをゼロで上書きしてゼロで埋めたいと思いますdd if=/dev/zero of=/dev/FLASH

このプロセスは時間がかかり、フラッシュドライブの予想寿命を最小限に抑えます。

どの領域がゼロでないかを確認し、ゼロ以外の領域をゼロで覆う方が速いと思いました。

これを行う方法はありますか?興味深い場合は、セキュリティ上の理由からこれらすべてが必要です。

答え1

安全上の理由はさておいてそのままやってみよう。私たちはGNUを(乱用)することができますddrescue

ゼロセクタを検出するのに--generate-mode便利です。

ddrescueoptions で呼び出されると、--generate-modeデフォルトの「構造モード」とは異なる「ビルドモード」で実行されます。つまり、この--generate-modeオプションを使用するとddrescue何も保存されません。後で使用するために作成しようとしますmapfile

[… ]

ddrescue場合によっては、sumの(部分的な)コピーであるsummapfileから近似値を生成できます。これは、単に全てゼロを含むセクタが記憶されていないと仮定して行われる。infileoutfilemapfile

[… ]

ddrescue --generate-mode infile outfile mapfile

源泉)

outfileあなたのデバイスが最後ddrescueに実行されたデバイスであるとしましょう。私たちはそれを使用することはできませんinfile(同じファイルの場合は動作を拒否するためddrescue)。ダミーファイルが必要です。デバイスの物理セクタサイズを知って、オプションで使用する必要があります。このコマンドが役に立ちます。infileoutfile/dev/zero-b

lsblk -o NAME,PHY-SEC /dev/FLASH

ここで私はそれだと仮定します512

ddrescue -b 512 --generate-mode /dev/zero /dev/FLASH flash.map

各セクタはゼロで満たされているかどうかによってflash.map試行されない(?)または完了()として説明されます。+次のステップは、ゼロ以外のセクタをゼロで埋めることです。--fill-modeこれは仕事に適しています。

ddrescueoptions で呼び出されると、--fill-modeデフォルトの「回復モード」とは異なる「塗りつぶしモード」で実行されます。つまり、この--fill-modeオプションを使用するとddrescue何も保存されません。状態文字がオプション引数で指定されたタイプ文字のいずれかに一致するinfileブロックから読み取られたデータのみを埋めます。outfilemapfile--fill-mode

源泉)

-b出力デバイスと同じ値を使用し、さらに--generate-mode出力--forceデバイスをオーバーライドする必要があります。これはコマンドです:

ddrescue -b 512 --force --fill-mode=+ /dev/zero /dev/FLASH flash.map

今回/dev/zeroは、単純なダミーパラメータではなく、デバイスに書き込まれた実際のデータソース(0)です。

これで/dev/FLASHゼロで埋められます。デバイスを物理的に切断する前にバッファをフラッシュする必要があるかもしれません(有用なリンク:12サム)。

関連情報