Ubuntu でデータ消去(USBメモリ,ディスク,SSDなど)
このページのコマンドは,指定したデバイス上の全データを消去する。デバイス名を誤って指定すると,OS が入ったディスクや他のデータも失われる。次の「デバイス名の確認」の手順で対象を特定してから実行する。
デバイス名の確認
消去対象のデバイス名(例: /dev/sda, /dev/sdb, /dev/nvme0n1)を,次のコマンドで確認する。
lsblk -o NAME,SIZE,MODEL,SERIAL,MOUNTPOINTS
表示された容量,モデル名,シリアル番号を,消去したい実機の表示と照合する。同容量のディスクが複数ある場合は,シリアル番号での照合が確実である。GUI 環境では「ディスク」ユーティリティ(sudo gnome-disks)でも同じ情報を確認できる。
MOUNTPOINTS 欄に / や /boot が表示されるデバイスは,稼働中の OS が入っているディスクである。これは消去対象にしない。対象デバイスがマウントされている場合は,先にアンマウントする。
sudo umount /dev/<デバイス名>*
HDD のデータ消去: shred
HDD(ハードディスクドライブ)では,shred コマンドでデバイス全体を上書きする。
sudo shred -n 1 -v -z /dev/<デバイス名>
各オプションの意味は次の通りである。
sudo: 管理者(スーパーユーザー)権限で実行する。デバイスへの直接書き込みには管理者権限が必要である。shred: ファイルやデバイスの内容をランダムなデータで上書きする。rmコマンドはファイルシステム上の参照情報を消すだけで,データ本体はディスク上に残る。-n 1: 上書き回数を 1 回にする(既定は 3 回)。磁気ディスクでは 1 回の上書きで通常の手段による復元はできなくなる。-v: 進行状況を表示する。-z: 最後にデバイス全体をゼロ(0x00)で上書きする。/dev/<デバイス名>: 消去対象のデバイスファイルを指定する。
数百 GB 以上のディスクでは,完了までに数時間を要する。
SSD・USBメモリでの shred の限界
SSD や USB メモリなどのフラッシュメモリ製品では,shred の効果は限定的である。内部のコントローラ(FTL: Flash Translation Layer)が行うウェアレベリング(書き込み位置の分散)やガベージコレクションにより,OS からの上書き命令が元データの物理ブロックに適用される保証がないためである。予備領域に古いデータが残ることがある。
SSD では,次に示すファームウェアレベルで動作する専用コマンドを用いる。
SATA SSD: Secure Erase (hdparm)
まず,対象 SSD が Secure Erase に対応しているか,およびセキュリティ状態を確認する。
sudo hdparm -I /dev/sdX
出力の Security 欄に supported: enhanced erase などの記載があれば対応している。frozen と表示されている場合,BIOS/UEFI がセキュリティ機能をロックしているため,コマンドは失敗する。サスペンド(スリープ)からの復帰でロックが解除されることが多い。
sudo systemctl suspend
復帰後に sudo hdparm -I /dev/sdX を再実行し,not frozen になったことを確認してから次に進む。
Secure Erase は,ユーザーパスワードを設定した状態でのみ実行できる。パスワードを設定し,続けて消去を実行する。/dev/sdX は対象の SATA SSD のデバイス名(例: /dev/sda)に置き換える。
sudo hdparm --user-master u --security-set-pass password /dev/sdX
sudo hdparm --user-master u --security-erase password /dev/sdX
消去が正常に終わると,設定したパスワードは自動的に解除される。処理途中で電源が切れると,パスワードが設定されたままドライブが使用不能になる場合があるため,実行中は電源を切らない。
NVMe SSD: nvme-cli (format / sanitize)
NVMe 接続の SSD では nvme-cli を使う。インストールは次の通りである。
sudo apt install nvme-cli
対象デバイスと対応機能を確認する。
sudo nvme list
sudo nvme id-ctrl -H /dev/nvmeXnY
id-ctrl の出力にある sanicap 欄で,Block Erase や Crypto Erase への対応を確認できる。/dev/nvmeXnY は対象デバイス名(例: /dev/nvme0n1)に置き換える。
方法1: NVMe Format(ユーザーデータ領域の消去)
sudo nvme format /dev/nvmeXnY -s 1
-s 1 はユーザーデータ消去,-s 2 は暗号化消去(Crypto Erase)を指定する。実行時に確認プロンプトが表示される場合があり,--force を付けると省略できる。
方法2: NVMe Sanitize(ブロック消去)
sudo nvme sanitize /dev/nvmeXnY -a 2
-a 2 はブロック消去,-a 3 は上書き,-a 4 は暗号化消去を指定する。Sanitize は非同期で実行されるため,進行状況は次のコマンドで確認する。
sudo nvme sanitize-log /dev/nvmeXnY
各オプションの詳細は man nvme-format,man nvme-sanitize で確認できる。
その他の手段・事前対策
- TRIM による破棄: Secure Erase に対応していない SSD や USB メモリでは,
sudo blkdiscard -f /dev/<デバイス名>により全領域に破棄要求を出せる。短時間で終わるが,消去の確実性はデバイスの実装に依存する。 - 製造元提供のツール: SSD メーカーが専用の消去ツールを提供している場合がある。メーカーのウェブサイトで確認する。
- ディスク全体の暗号化(事前対策): OS インストール時に LUKS でディスク全体を暗号化しておくと,廃棄時には暗号化キーを破棄するだけで内容の復号が困難になる。USB メモリなど物理消去が難しい媒体でも有効である。