前提
ここに書いているのはあくまでHDDにだけ通用する内容であって、SSDでは異なるアプローチが必要であることに注意する。
HDDに対する書き込みテスト
HDDの大まかな情報はS.M.A.R.T.を読み取れば分かるが、全セクタにわたって本当に問題がないのか疑わしいときは、実際に全セクタへbyte列を書き込み、読み取りテストしてみなければ分からない。
そのようなテストに、Linuxではbadblocksコマンドが使える。
badblocksはbyte列を実際にストレージに書き込んでから読み出すことでセクタが壊れていないか確認する。 この原理のため、現代の大容量のHDDではとてつもない時間がかかることには注意が必要だ。
次は書き込みモード-wで/dev/sdaをテストする。
sudo badblocks -b 4096 -wsv -o badblocks.txt /dev/sda
書き込みモードでは対象のデバイスにデータがあろうが破壊的にbyte列を書き込むので注意
-b 4096でブロックサイズサイズ(セクタのサイズ)が4096 byteであることを伝え、少しでも高速化を期待している。
このブロックサイズはHDDに固有だから個別に調べる必要がある。
-sは進捗を表示させ、-vはverboseに出力させる。
-o badblocks.txtは発見した不良セクタの番号をbadblocks.txtに書き込むことを指示している。
さらに、ここでは書き込むbyte列を指定していないからデフォルトの動作になる。 デフォルトの動作では以下のようにテストが進められる。
- 0xaa(0b10101010)を書き込む
- 読み出して0xaa(0b10101010)と一致するか確認する
- 0x55(0b01010101)を書き込む
- 読み出して0x55(0b01010101)と一致するか確認する
- 0xff(0b11111111)を書き込む
- 読み出して0xff(0b11111111)と一致するか確認する
- 0x00(0b00000000)を書き込む
- 読み出して0x00(0b00000000)と一致するか確認する
USB 2.0接続の500 GBのポータブルHDDを上記コマンドでテストしたところ、全て完了するまでに27時間強がかかった。
HDDのデータ消去
HDDを処分する際のデータ消去方法として、Linuxではshredコマンドとddコマンドを用いる方法をよく見かける。
ここではshredコマンドを使った方法について説明する。
shredコマンドはファイルシステム上の単一のファイルに対して実行することもできるが、ブロックデバイスに対して実行することもできる。
次は/dev/sdaを2回-n 2ランダムなbyteデータで書き込み、最後に0-zで埋める。
sudo shred -n 2 -vz /dev/sda
-vはverboseを表し、進捗を表示する。
新しいHDDは一回の書き込みで十分だとされているから、そのようなものは0埋めだけで十分かもしれない。