HDDのデータの完全消去

LinuxでHDDデータの(不完全な)完全消去をします。データの完全消去とは単に(理論)フォーマットとかファイルの削除ではなく、解析困難な状態にすることです。(理論)フォーマットとかファイルの削除、パーティションの削除ではファイル情報がデータと紐付けされなくなっただけで、データ自体はHDDに残ったままです。表面的にはファイル情報が読み込めなくなったので、PC上(OS)ではHDDに残っているデータを呼び出すことが出来ないが、特殊なツール(プログラム)を使えば、この残留データにアクセスできるため、完全にデータを消去する用途には向かない。完全にデータを消去するためには、ローレベルフォーマット(物理フォーマット)をする必要がある。ローレベルフォーマットではHDDの全ての領域を消去するため、完全初期状態に戻したい場合にも向いています(保護された領域のウィルス感染とか)。欠点は、えらく時間がかかることです。私の環境では2TのHDDの場合、1回の埋め込み作業で2時間かけても50%行きません。全部終わるには4、5時間はかかるので、その4倍の時間(単純計算で16~20時間くらい)が必要です。これでもかなり高速化されたといわれていますよね。数年前なら1週間位かかったとか何とか・・・時間というよりも日ですね。絶句。😅

Linuxローレベルフォーマットをする時は、Shredコマンドやddコマンドを使います。ゼロで埋める場合と乱数で埋める場合があります。ローレベルフォーマットと言っても100%安心というわけではなく、頑張れば残留データを探しだすことも可能です。特に、ゼロで埋めた場合は残留データと書き込まれたゼロを見分けるプログラムによって、残留データのみを吸い出すことができます(可能性としてややリスクが残る)。乱数の場合は、残留データと書き込まれた乱数の見分けが難しいため、残留データの吸い出しは困難ですが全く不可能でもありません(可能性としてリスクは残るがゼロよりも安心)。この辺はプロの領域なので、一般のユーザーがあえてやろうとは思わないでしょうが・・・。そのため、上書き作業を数回繰り返して(吸い出し)難易度を上げて行きます。ですが、完全にデータを消去したければ、物理的にHDDをぶっ壊すのが確実ですね。

さて、端末を呼び出してコマンドを打ちます。Shredとddがありますが、ddは古いコマンドで一般的に広く使われていますが、Shredの方が強力なのでShredが使えない状況や簡易的で良い場合などに使うのが良いと思います。

ddコマンドでデータの全消去を行う(ゼロ書き)。

sudo dd if=/dev/zero of=/dev/sdX

デフォルトの読み込み、書き込みのバイト数は512byteで、大容量のディスクでは多大な時間がかかってしまう。1度の読み込み、書き込みのバイト数を設定するには下記のようにする。青字の箇所は確認したデバイス名です。

sudo dd if=/dev/zero of=/dev/sdX bs=32M とか sudo dd if=/dev/urandom of=/dev/sdX bs=256M

このバイト数は単純に大きくすれば早くなるという訳ではなく、スペック等により、大きくしすぎると逆に処理が遅くなる場合がある。32Mから256Mほどがちょうど良い設定値だと言われている。また、読み込み、書き込みのバイト数はそれぞれ個別に設定することもできる。

bs=[バイト数]:1度に読み込みと書き込めるバイト数の設定
ibs=[バイト数]:1度に読み込めるバイト数の設定 
obs=[バイト数]:1度に書き込めるバイト数の設定

ddでは進歩状況が表示されないので、どうなってるのかな?と思った時は、もう一つ端末を開いて sudo pkill -USR1 dd を実行すると、 dd を実行していたターミナルに進捗状況が表示される。watchを使えば、一定時間毎に進捗状況を表示させることもできる。

sudo watch -n 1 pkill -USR1 dd (1秒ごとにpkillする)

さて、shredに戻ります。まず、HDD情報を確認します。

sudo fdisk -l

HDD情報が表示されますので、目的のHDDのデバイス名を確認してください。これを間違うと地獄に落ちますので、慎重に確認してください。

sudo shred -v -n 3 -z /dev/sdX

青字の箇所は確認したデバイス名です。
このコマンドでは、
-v 進歩状況の表示、-n 3 乱数書き込み回数3回(デフォルト値)、-z 最後にゼロ埋めするとなっている。
この操作をddで行う場合は、乱数書き込みを3回行い、最後にゼロを書き込む。

dd if=/dev/urandom of=
/dev/sdX
dd if=/dev/urandom of=
/dev/sdX
dd if=/dev/urandom of=
/dev/sdX
dd if=/dev/zero of=
/dev/sdX

書き込み回数3回というのも賛否両論あるようですが、素人考えでは1回よりも3回の方が安心という根拠のない安心感があります。更に最後にゼロ書き込みというダメ押しで超安心感がありますね。気休めですけど・・・。アメリカの公的機関のHDD情報消去方法ということもあり、ショボい個人情報消去には十分じゃないですか?少なくてもエロ動画コレクションが他人にバレる可能性は少なくなったと思います。😅ウソですよ。

wiki「データの完全消去」より
アメリカ国立標準技術研究所(NIST)が2006年に発表したSpecial Publication 800-88の7ページでは、次のように述べられている。『2001年以降の(15GBytes以上の)集積度の高いATAハードディスクにおいては、データの完全消去はディスク全域に1回のみ上書きすれば事足りる』。 また、Center for Magnetic Recording Researchは、次のように述べている『データの完全消去はディスクに対する1回の上書きのことである。アメリカ国家安全保障局も推奨要綱にて、同相信号除去比(CMRR)試験をした結果、複数回の上書きは何ら安全性の向上に優位な差をもたらさず、1回の上書きで十分であることを認めている』

という訳で3回も行うと時間もかかるので2回くらいで良い場合は、乱数書き込み回数の箇所を2回に減らしてください。ただし、理論上、書き込み重ねることでデータの完全消去をしているので、この場合の安全性は低くなります。そんなの関係なく、ゼロ埋め1回で良い時は sudo shred -vzn0 /dev/sdX でも行けます。

諸事情で走らせたコマンドを停止させたい場合は・・・

[CTRL] + [Z] コマンドの一時停止
[CTRL] + [C] コマンドの強制終了

一時停止させたジョブを見るためにはjobs、復帰させるためにはfgを入力する。

fg %[ジョブ番号] コマンドの再実行
bg %[ジョブ番号] コマンドをバックグラウンドジョブとして実行

バックグラウンドジョブとして実行されているコマンドを、強制終了するにはkillを実行。

kill %[ジョブ番号]

赤の他人に譲渡しない場合などでもっと簡単にしたいなら、GUIプログラムのディスクからゼロ埋めフォーマットでも行けます。フォーマット形式(FAT、NTSF、EXT4、カスタムなど)を指定できるので、フォーマット終了後は即使用可能です。超簡単で良い場合はこれです。2TのHDD初期化で8時間くらいかかります。時間と労力を節約できますが、名誉を守れるかどうかは未定です。