Ubuntu で HDD と SSD を完全削除し廃棄する
我が家の壊れかけた NAS(市販品)と使っていない HDDと SSDを廃棄処分するため Ubuntu 18.04 LTS を使ってディスク全域を完全削除(ローレベル フォーマット)しました。
下の画像は、テストベンチ台 で削除作業中の写真です。
HDDは Ubuntu に実装される shred (シュレッド) コマンドを使い乱数データを書き込んだ後、zero-fill を行いました。
SSDは Ubuntu に実装される hdparm コマンド の ATA Security Feature Set(ATAセキュリティー機能セット)を使って Secure Erase しました。(2020年11月)
注|SSDを完全削除(Secure Erase)する場合は shred ではなく hdparm コマンド を使ってください。trim コマンド はファイルレベルの完全削除であり Secure Erase ではありません。
注|当ページの内容は「廃棄」が目的であり、再利用や機能再生は考慮していません。
PC 環境
下記は 2020年11月末 現在の環境です。
- ハードウェアの構成は こちらへ
- Ubuntu 18.04.1 LTS (Bionic Beaver)最小インストール
- kernel 4.15.0.124 generic
- GNOME 3.28
Hdd の完全削除
shredは、ArchWiki によると、
“
shred は個別のファイルやデバイスを安全に消去することができる Unix コマンドです。たとえ特殊な機械を使っても復元するのは難しく、あるいは不可能になります。shred は3つのパスを使って、擬似乱数データをデバイスに書き込みます。パスは増やしたり減らしたりできます。 以下のコマンドはデフォルト設定で shred を実行して進捗を表示します:# shred -v /dev/sdX
”
というコマンドです。ただし shredは、下記のファイルシステム上のファイルの削除には不向きなのでディスク全体の使用が推奨されています。
“
Log-structured or journaled file systems, such as ext3/ext4 (in data=journal mode), Btrfs, NTFS, ReiserFS, XFS, ZFS, file systems supplied with AIX and Solaris, etc., when they are configured to journal data.
ext3 / ext4(data = journalモード)、Btrfs、NTFS、ReiserFS、XFS、ZFS、AIXおよびSolarisで提供されるファイルシステムなど、データをジャーナルするように構成されている場合のログ構造化またはジャーナル化されたファイルシステム。
”
さらに詳しくは GNU フリー ドキュメンテーション を参照してください。
目的の HDD のデバイス名 /dev/sdX を確認する方法は
- GParted(GNOME Partition Editor)
- GNOME Disks
- fdisk コマンド・・・パーテイション テーブルが MBR(Master Boot Record)
- gdisk コマンド・・・パーテイション テーブルが GPT(GUID Partition Table)
など、使いやすさや環境に合わせて選択します。今回当方の環境では /dev/sdd です。
shred コマンドの実行
端末から次の shredコマンドを実行します。
GNOME Terminal :
$ sudo shred -v -n1 -z /dev/sdd
下記はオプションの内容です。
- -v・・・詳細 [--verbose]
- ステータスの進捗状況を標準出力(端末)に表示する
- -n1・・・ランダムデータの書込み回数 [--iterations=number]
- shred はデフォルトで 3パス(3回)の書込みを行うため時間がかかり過ぎるので1パスにしました
- -z・・・ランダムデータの書込み終了後、0bitを上書きする [--zero]
- 所謂 zero-fill 、ゼロ埋め
下の画像は、コマンド実行中のスクリーンショットです。
ゼロフィルの確認
shredコマンド完了後の状態を確認するためディスクの先頭から 512バイトまでを次のコマンドで HEXダンプします。
$ sudo hexdump -C -n 512 -v /dev/sdd
比較のため他のデバイス(/dev/sda)の結果も取ってみました。
ご覧のように文字通り 0 で埋められています。
所要時間と処理能力
下表は 3台のHDDにかかった時間です。
① 250 GB(USB2.0) | 約 7時間50分 |
---|---|
② 400 GB(SATA2) | 約 3時間 |
③ 1 TB(SATA2) | 約 7時間30分 |
①は Windows 98~Vista向けの USB2.0接続ハードディスク ドライブです。1時間あたりの処理容量は 31.9GBで、1GBあたりの処理時間は 113秒です。
②は ハードディスク レコーダー に内蔵されていたものです。1時間あたりの処理容量は 133.3GBで、1GBあたりの処理時間は 27秒です。
③は故障間近の市販NAS(下の画像)に内蔵されていたもので、1時間あたりの処理容量は 127.6GBで、1GBあたりの処理時間は 27秒です。
このようにかなりの時間を要します。たとえ USB3.1、SATA3 の接続であっても殆ど変わりないと思います。なぜなら HDDの内部転送速度、即ち書込み速度に依存するからです。
今回の件で USB接続のハードディスク ドライブは HDD本体を取り出して SATA接続で行ったほうがよいことが分かりました。
SSD の Secure Erase
Arch Wiki ソリッドステートドライブ/メモリセルの消去 の手順に沿って SSDを完全削除(Secure Erase)してみました。
hdparmコマンド は SATAインターフェース接続 のみ有効です。以下、当方の環境(当ページHDD完全削除した環境)で Intel 335シリーズ SSD 240GB で実行したコマンドとその結果のスクリーンショットです。
hdparmコマンドの実行
- 次のコマンドで SSDが Frozen(ロック)されていることを確認し、これを解除します。デバイス名は HDDの時と同じく /dev/sdd です。
GNOME Terminal :
$ sudo hdparm -I /dev/sdd
結果:fig1. (前略) ︙ Security: Master password revision code = 65534 supported not enabled ・・・Secure Erase無効 not locked frozen ・・・ロックされています not expired:security count supported:enhanced erase 4min for SECURITY ERASE UNIT.2min forENHANCED SECURITY ERASE UNIT. ︙ (後略)
ロックされているので PCの電源は入れたまま、下の写真のように SSDに接続している電源コネクタを引き抜き、再び挿します。
SATAコネクタも引き抜く場合は、電源コネクタ → SATAコネクタ の順に引き抜き、SATAコネクタ → 電源コネクタ の順に挿します。
-
もう一度上記 1. のコマンドを実行します。
結果:fig2. (前略) ︙ Security: Master password revision code = 65534 supported not enabled ・・・Secure Erase無効 not locked not frozen ・・・ロックされていません not expired:security count supported:enhanced erase 4min for SECURITY ERASE UNIT.2min forENHANCED SECURITY ERASE UNIT. ︙ (後略)
ロックは解除されました。
- 次のコマンドで SSDにパスワードを設定します。これにより Secure Eraseコマンドが有効になります。
$ sudo hdparm --user-master u --security-set-pass pass /dev/sdd
結果:fig3. security_password:"pass" ・・・パスワード pass が設定されました /dev/sdd: Issuing SECURITY_SET_PASS command, password="pass", user=user, mode=high
パスワードが設定されました。このパスワードは Secure Eraseの実行後、自動的に無効化されます。
- Secure Eraseコマンドが有効になっていることを確認します。
$ sudo hdparm -I /dev/sdd
結果:fig4. (前略) ︙ Security: Master password revision code = 65534 supported enabled ・・・Secure Erase有効 not locked not frozen ・・・ロックされていません not expired:security count supported:enhanced erase 4min for SECURITY ERASE UNIT.2min forENHANCED SECURITY ERASE UNIT. ︙ (後略)
Secure Erase が有効になりました。
- 次のコマンドで Secure Erase を実行します。
$ sudo hdparm --user-master u --security-erase pass /dev/sdd
結果:fig5. security_password:"pass" /dev/sdd: Issuing SECURITY_ERASE command, password="pass", user=user
Secure Erase 実行がされ、30秒ほどで完了しましたがこの間なにも表示されません。最後に次のコマンドで SSDの先頭から 512バイトまでを HEXダンプして 0埋めされていることを確認します。
$ sudo hexdump -C -n 512 -v /dev/sdd
この時、稀に 部分的に 0で埋めきれずデータが残ったりするので再度 Secure Erase したいのですが、その場合同じコマンドを実行すると次のような SG_IOメッセージが出て止まってしまいます。
security_password:"pass"
/dev/sdd:
Issuing SECURITY_ERASE command, password="pass", user=user
SG_IO: bad/missing sense data, sb[]: 70 00 05 00 00 00 ...
その意味は、Linux on IBM Systems によれば
“
The hdparm command does not return an obvious error if the drive is not compatible with the block-erase operation and the drive is not erased.
ドライブがブロック消去操作と互換性がなく、ドライブが消去されていない場合、hdparm コマンドは明らかなエラーを返しません。
Such an error is typically indicated by a message such as SG_IO: bad or missing sense data.
このようなエラーは通常、「SG_IO: センス データが不良または欠落しています」などのメッセージによって示されます。
The presence of the message indicates that the drive is not erased.
メッセージの存在は、ドライブが消去されていないことを示しています。
”
とのこと。
これは Secure Erase が再び 「not enable」 つまりロックされているためで、実行するには違うパスワードを設定してやればよいわけです。
$ sudo hdparm --user-master u --security-set-pass pass2 /dev/sdd $ sudo hdparm --user-master u --security-erase pass2 /dev/sdd
以上で SSDの完全削除の完了です。
SSD Secure Erase に係る留意事項
以下、ATA wiki よりの引用を要約したものです。
“
(前略)
DISCLAIMER: This will erase all your data, and will not be recoverable by even data recovery services.
免責事項:これはすべてのデータを消去し、データ復旧サービスでも復旧できなくなります。(中略)
DISCLAIMER: If you hit kernel or firmware bugs (which are plenty with not widely-tested features such as ATA Secure Erase) this procedure might render the drive unusable or crash the computer it's running on.
免責事項:カーネルまたはファームウェアのバグによりドライブが使用できなくなる可能性があります。(中略)
WARNING: Do not attempt to do this through a USB interface!
警告:USBインターフェースを介してこれを実行しようとしないでください!(中略)
WARNING: If the SECURITY ERASE fails, use --disable-security to set your drive back to normal.
警告:セキュリティ消去が失敗した場合は、-disable-security を使用してドライブを通常に戻します。(後略)
”
HDD、SSD の廃棄方法
HDD の廃棄は、日本国政府 環境省認定の処理業者 に委託しました。もちろん有料です。追加料金を支払えば完全削除の上、データ消去証明書を発行するサービスもありました。
雑感|ノートPCの SSDを Secure Eraseしてみたら
手持ちの ASUS製ノートPC(ネットブック)EeePC 1005HA と EeePC 1005PE を廃棄処分するため、 USBメモリーにインストールした WattOS R9(Ubuntu 14.04 LTS) 上から Secure Eraseしてみました。
何れも SSDを載せた状態でコマンド実行しました。
ASUS EeePC 1005HA の場合
SSDは OCZ VERTEX 4 - 128GB です。この EeePCは Windows XP 機ですが、かつて HDDを SSDに換装した際、AHCIモードに変更していたため hdparmコマンドが使えます。
SSD単体の時と同様に hdparm - I してみると、なぜかロックがかかっていない not Frozen 状態でした。そして手順通り Secure Eraseを実行した後、SSD先頭から 512バイトまでを Hexダンプしてみたらこれまた何故か 0 ではなく下の画像のように f で埋められていました。
原因は不明です。
ASUS EeePC 1005PE の場合(2023年8月 追記)
SSDは INTEL SSDSC2CT06 (Intel 330 Series) - 60GB です。この EeePCは中古の Windows7 機ですが、OS無しで購入したものです。
hdparm - Iコマンドは こちらも同じく not Frozen 状態でした。次に Secure Eraseを実行するため パスワードを設定しようとすると次のようなエラーが出て設定できませんでした。
security_password:"pass"
/dev/sda:
Issuing SECURITY_SET_PASS command, password="pass", user=user, mode=high
SECURITY_SET_PASS: Input/output error
そこで次のコマンド /dev/urandom (乱数生成)と/dev/zero (0埋め)を実行しました。
参考 Ask Ubuntu:secure erase returns input/output error
このコマンドは sudo での実行不可なので、まず rootに昇格するためのパスワードを設定します。
$ sudo passwd root
[sudo] password for fuukemn: 新しい UNIX パスワードを入力してください: 新しい UNIX パスワードを再入力してください: passwd: パスワードは正しく更新されました
まず乱数を書込みます。途中経過は表示されません。「cat:書込みエラー: デバイスに空き領域がありません」が表示されれば完了です。
$ su - パスワード: # cat /dev/urandom > /dev/sda
ところがこのコマンド、2時間経っても終わらず辛抱たまらず途中で停止(Ctrl + C)しました。
続けて 0埋めこまんど実行。途中経過は表示されません。
# cat /dev/zero > /dev/sda
こちらは 20分ほどで「cat:書込みエラー: デバイスに空き領域がありません」が表示され完了しました。
こんなに時間がかかるなら、PCから取り出して SSD単体で Secure Eraseした方がよかった