いらない PC を捨てるとき、shred で HDD 内のデータをひっかきまわしてから捨ててたのですがこの shred がとにかく遅いのです。
Knoppix 5.3 の Live CD を準備しておき、こいつでブートして shred を使っておりました。こんなもんかなぁと思っていたのですが、市販のHDD消去ソフトはランダムパターンを書き込んでいるというのに断然速いじゃないですか。市販のは数時間で終わるのに shred は1日がかり。この速度差はいくらなんでもおかしい。
と思ってググってみました。Knoppix 5 には coreutils-6 付属の shred が入っています。こいつは乱数のソースに非常に遅いもの ( /dev/urandom ) を使っているらしくとにかく時間がかかってます。
最近のものを使えばよいというので Ubuntu 11.04 の Live CD でやってみると、こいつは shred が新しくなっており乱数の発生も高速になっておりました。手元の 5年ほど前の PC で実測 8倍くらいの速度差がありました。こんなにも違うのか。
HDD全体で実験すると時間かかるので小さめなファイルで実験してみました。まず空っぽの 1GB のファイルを準備します。こいつをぐちゃぐちゃにします。
$ dd if=/dev/zero of=/media/new/test001 count=1000 bs=1MB 1000+0 records in 1000+0 records out 1000000000 bytes (1.0 GB) copied, 27.7607 s, 36.0 MB/s $ time shred --random-source=/dev/urandom /media/new/test001 real 12m14.324s user 0m0.152s sys 12m10.754s $ time shred /media/new/test001 real 1m27.681s user 0m4.964s sys 0m3.412s
/dev/urandom を使ったものと使ってないもの、この差ですわ。/dev/urandom がネックになってたみたい。CPUもフル稼働してたし。ちょうどこれを実行してた時の vmstat 10 の結果がコレ。
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa 1 0 0 131140 42060 1382724 0 0 0 4916 652 599 0 51 49 0 1 0 0 131140 42076 1382724 0 0 0 6146 648 597 0 50 49 0 1 0 0 131140 42092 1382724 0 0 0 1231 639 607 1 50 49 0 2 0 0 131140 42108 1382724 0 0 0 4918 646 599 0 50 49 0 0 1 0 130396 42124 1382724 0 0 0 13123 590 543 1 40 50 9 ←切り替わり 0 1 0 129908 42140 1382724 0 0 0 35443 451 336 3 3 48 47 0 1 0 129660 42156 1382724 0 0 0 34408 397 288 3 2 48 47 0 1 0 129536 42172 1382724 0 0 0 32927 357 264 2 3 48 47 0 1 0 129784 42188 1382724 0 0 0 34660 397 300 3 2 47 49
/dev/urandom は、CPUブン回して頑張って乱数生成してたんやね…かわいそうな子…乱数生成が間に合わなくて Disk IO はヒマヒマだったようです。shred 内蔵の乱数を使うと速いらしくDISK IO がネックになってきますね。