最近のHDDは大容量にになっていて消去に時間がかかるので、一挙に全部やるのではなく、分割して少しづつやる方法。
<ポイント>
・大容量HDDをパーティション分割して、パーティション事に削除する。
・パーティション削除は、ddコマンドで、status=progress オプションをつけ、進捗が分かるようにする
・ddの速度アップのためbsの値を大きめに調整する(128Mとか)
(1)gparted等で、ハードディスクをパーティションで分割する。
例えば、1000GBなら、200GBx5パーティション等。
/dev/sdb1
/dev/sdb2
/dev/sdb3
/dev/sdb4
/dev/sdb5
ができる。
(2)ddコマンドでパーティションを1づつ削除する。statusオプションをつけ進捗状況が分かるようにする。
# dd if=/dev/urandom of=/dev/sdb1 bs=128M status=progress
上記では乱数(/dev/urandomを指定していますが、ゼロ(/dev/zero)でもいいでしょう。
/dev/randomは乱数生成に厳密性を高めるため、マシンのエントロピーをたくさん必要とするため、HDD消去の目的には不向きです。
(時間がかかりすぎる、書き込む乱数の品質を高めてもしょうがない)
bsの値は小さすぎてもダメ、大きすぎてもダメ、何度かトライしてみて下さい。
パーティション分割が難しい場合は、ブロックするサイズを1024Mとかにして(わかりやすように)
・seek=ブロック数 で開始ブロックを指定
・count=個数 で書き込むブロック数を指定
するのでも良いでしょう。
(全体が何ブロックあって、開始位置と、個数を指定して、計画的にやる。面倒ですが)
■その後、ddは速度が出ない(遅い)ことが判明。
報告書
https://digitalforensic.jp/home/act/products/data_report/
低レベルな機能ゆえ、ddが一番シンプルで速そうだが、そうでもないようだ。原因を考えてみたが、/dev/zeroや/dev/urandom のシステムコールがボトルネックになってるんだろうか?
Windowsのcipherコマンドを利用する手もあるが、途中の進捗状況が分からないのは頂けない。求める要件は、
・消去速度が速いこと
・途中の進捗状況が分かる事
・パーティション事に消去出来れば、大容量HDDを分割消去できる。
速度が速いのは、DBAN, shred あたりのようだ。
shredを使って、乱数の1回書込みで十分なので、
# shred -v -n 1 /dev/sdd
とかで十分っぽい
-v: 途中詳細を表示させる
-n 1: 乱数書込み回数=1回
今のところ、DBANか、shred が一番速い。
後日、時間を測ってみる。