2006年06月12日
そのディスク、捨てる前に 〜shredで内容消去〜
かたちあるものいつかは壊れます。ハードディスクも例外じゃありません。
DSASはサーバが200台近くあり、複数台ディスクを積んでいるサーバもあるのでディスクの数はそれ以上です。これだけディスクがあると、どれかが壊れる確率はそれなりに高くなります。
でも、壊れたディスクはデータが入っているのでそのままゴミ箱にポイというわけにはいきません。
rm -frで消したりfdiskでパーティションテーブルを壊したとしても、いくらでもディスク上のデータを取り出す方法はあります。例えば、ddでデバイスを吸い出すとか。
そこで、今回は廃棄や保守交換で返送する前にshredをかけましょうというお話をしたいと思います。
DSASはサーバが200台近くあり、複数台ディスクを積んでいるサーバもあるのでディスクの数はそれ以上です。これだけディスクがあると、どれかが壊れる確率はそれなりに高くなります。
ちなみにDSASは、
- Webサーバは数十台あってディスク内容は全サーバで同期している。
- DBサーバのデータ格納用ディスクはRAIDを使っているし、レプリケーションもしている。
- LVSを使っている負荷分散機などいくつかのサーバはネットブートでディスクレスにしている。(のでディスク故障とは無縁)
というふうに、ディスクが数台壊れたぐらいではサービス停止することのない構成になってます。
でも、壊れたディスクはデータが入っているのでそのままゴミ箱にポイというわけにはいきません。
rm -frで消したりfdiskでパーティションテーブルを壊したとしても、いくらでもディスク上のデータを取り出す方法はあります。例えば、ddでデバイスを吸い出すとか。
そこで、今回は廃棄や保守交換で返送する前にshredをかけましょうというお話をしたいと思います。
shredとは
shredは、GNUのcoreutilsに含まれているコマンドのひとつで、ディスクの内容を論理的に破壊して元データの復元を非常に困難にしてくれるものです。
coreutilsはcpやmvなど基本的なコマンドが収められているパッケージなので、恐らく、ほとんどのLinuxディストリビューションではインストールされていると思います。
knoppixにもshredは入っているので、knoppixでCD-ROMブートしてディスクをshredすることもできますね。
使い方
例えば、
# shred -v -n 3 -z /dev/hda
とすると、/dev/hda 全体を、元データを復元しづらいパターンで上書きするのを3回繰り返した後、最後にゼロクリアします。
上書きの繰り返し数を指定する-nオプションのデフォルトは25回ですが、昨今の大容量ディスクだとそれなりに時間がかかるので、時間とデータの重要度を鑑みて回数を指定するとよいと思います。
オプションの詳細は、Bookshelfさんのところに付属ドキュメントの和訳があるので、そちらを参照するとよいと思います。
留意点
ご覧の通り、shredはOSがディスクを認識していないと使えません。なので、円盤が回らなくなったなどでハードディスクとして認識できなくなった場合はshredが使えません。
また、ディスクそのものが不良セクタを隠蔽してしまうと、その不良セクタはshredの対象になりません。
こういった場合は、磁気的に破壊する機器(『ハードディスククラッシャー』で検索するとたくさん見つかります)を使うか、物理的に完全に破壊するしかありません。
とはいえそのまま捨てるよりかは、shredしてから捨てた方が精神衛生上もよいですね。コストもほとんどかかりませんし。
余談
余談ですが、coreutilsにはいろんなコマンドが収録されています。
お使いのパッケージ管理システムに応じて、
$ dpkg -L coreutils | grep bin
や
$ rpm -ql coreutils | grep bin
とするとコマンドの一覧が得られます。
cat, ch{grp,mod,own}, cp, lnなど有名どころから、join, merge, tac, tsortといったちょっとマイナー(?)なものまでいろいろあります。わたしはpinkyなんてコマンドがあるのをこの記事を書きながら初めて知りました。(^^;
そうそう。/usr/bin/[なんてのもありますね。『/usr/binの下に"["という名前のゴミファイルがあったので消しておきました! えっへん!!』なんて新米rootがいて、のきなみshスクリプトが動かなくなったという笑い話(なのか?)を思い出しました。ちなみに、bashだと[はビルトインですね。
(ひ)