Linuxを使ってM.2 SSDをSecure Erase する NVMe編

M.2 SATA SSDは先日書いた。
Linuxを使ってM.2 SSDをSecure Erase する

今回はM.2 NVMe SSDについて試す。

違っていたところは、状態確認のコマンド、データ削除のコマンド。

(1)USBメモリから起動。これは同じ。

(2)デバイスを調べる。これも同じ。

Gpartedで確認し、削除対象のデバイスは /dev/nvme0n1 とわかる。

lsblkコマンドでも確認可能。

(3)SSDの状態を確認する。これはコマンドが異なる。

SATA SSDでは hdparm を使い、NVMe SSDには nvme コマンドを使う。

nvmeコマンドが入っていない場合はインストールする。
sudo apt update
sudo apt install nvme-cli

状態確認のnvmeコマンド
sudo nvme id-ctrl /dev/nvme0n1

見るべきところはfna

sudo nvme id-ctrl /dev/nvme0 | grep -i "fna"

fna : 0
だと後のデータ消去時、format -s2 ※Crypto Erase に非対応だとわかる。

つぎにsanicap
sudo nvme id-ctrl /dev/nvme0 | grep -i "sani"
sanicap : 0x2
1:-a 4(crypto erase対応)
2:-a 2(block erase対応)
4:-a1(overwrite対応)
2ですと、sanitizeの -a 4 ※Crypt Eraseに非対応だとわかる

(4)frozen解除

NVMe は基本的にはfrozenはなく、作業は不要

(5)消去前に先頭セクタの中身を確認。コマンドは同じ

sudo hexdump -n 4096 -C /dev/nvme0n1
-n でバイト数を制限する(4098は余裕めに)

"EFI PART"などなんとなく意味のあるデータが入っていることがわかる。

(6)念のため、消去前に意味のある文字列の存在を確認。コマンドは同じ

sudo dd if=/dev/nvme0n1 bs=512 count=32 | strings
※512バイト(1セクタ)単位で読み込み、32セクタ = 16384バイト

やはりEFI PARTが文字列として残っている。

(7)更に念のため、末尾側セクタの中身を確認。コマンドは同じ。

sudo bash -c 'hexdump -C -s $(($(blockdev --getsz /dev/nvme0n1)*512 - 4096)) /dev/nvme0n1'

やはり、意味のあるデータが残っている。
次から消去プロセス。

(8)データ削除

[注意] formatコマンドでは /dev/nvme0n1 を使う。sanitizeでは /dev/nvme0 を使う

再利用前提 -s1
sudo nvme format /dev/nvme0n1 -s1

破棄前提 -s2 ※非対応の場合あり。
sudo nvme format /dev/nvme0n1 -s2

破棄前提最強 sanitize -a 4 ※非対応の場合あり
sudo nvme sanitize /dev/nvme0 -a 4

-a 4が使えなかったら
sudo nvme sanitize /dev/nvme0 -a 2

(9)もういちどGPartedで確認。

unallocated(未割り当て)になっていれば少なくともドライブ情報などは消えている。

(10)消去後に先頭セクタの中身を確認。コマンドは同じ。

sudo hexdump -n 4098 -C /dev/nvme0n1

(11)念のため消去後に末尾側セクタの中身を確認。コマンドは同じ。

sudo bash -c 'hexdump -C -s $(($(blockdev --getsz /dev/nvme0n1)*512 - 4096)) /dev/nvme0n1'