ソリッドステートドライブ/メモリセルの消去

提供: ArchWiki
ナビゲーションに移動 検索に移動

関連記事

ときに、SSD のセルを完全に消去して、SSD 製造時の状態に完全に戻し、製造時の書き込み性能を取り戻したいと思うこともあるでしょう。たとえ SSD がネイティブ TRIM に対応していても、時が経つにつれて書き込み性能は下がっていくことが知られています。TRIM はあくまでファイルの削除に対する防護であり、差分保存などの操作には効果がありません。

Secure Erase を行っても、SSD セルのウェアレベリングの状態はリセットできません。寿命を迎えつつあるドライブの場合、短い間は書き込み可能になるかもしれませんが、限られた量の書き込み後は依然としてできなくなります。

警告:
  • 消去を行う前に重要なデータをすべてバックアップしてください! この作業は SSD 上の全データを破壊し、データ復旧サービスでさえ復元不可能にしてしまいます! 作業を行った後に、デバイスを再度パーティショニングして、データを再保存する必要があります!
  • 対象のドライブが SATA/NVMe インターフェイスに直接接続されていない場合、この作業を行わないでください。USB や SAS/RAID カードを介して接続されているドライブに対して Secure Erase/Format/Sanitize コマンドを発行すると、そのドライブを文鎮化させてしまう可能性があります。

SATA ドライブ

ノート: 以下の情報は ATA の公式 wiki ページから引用されています。

ステップ 1 - ドライブのセキュリティが frozen でないことを確認する

以下のコマンドを発行してください:

# hdparm -I /dev/sdX | grep frozen

出力の Security セクションに "not frozen" と表示されている必要があります。ただ "frozen" と表示される場合、次のステップに進むことはできません。一部の BIOS は、オペレーティングシステムを起動する前にドライブに "SECURITY FREEZE" コマンドを発行して "frozen" 状態にすることで、ATA Secure Erase コマンドをブロックします。

解決策としては、システムを単にサスペンドさせることです。復帰するときに、frozen 状態が解除される可能性があります。うまく行かない場合は、ドライブのデータケーブルを (電源が入った状態で) 抜き差しする方法があります (カーネルがクラッシュするかもしれません)。SATA データケーブルをこのように抜き差ししてカーネルがクラッシュする場合は、オペレーティングシステムを完全に起動させて、素早く SATA の電源ケーブルとデータケーブルの両方を抜き差ししてみてください。それでも SATA ケーブルの抜き差しでカーネルがクラッシュしてしまう場合は、AHCI が有効化されていることを BIOS で確認してください (AHCI により、クラッシュさせずに、電源が入った状態で抜き差しできます)。ホットプラグに対応している場合は、USB から SATA への変換ケーブルを使うという手もあります。hdparm は USB を介して使うこともできます。

Dell システム

先のコマンドが "frozen" と出力する場合、以下を行うことにより回避できるかもしれません:

  1. スタートアップ時に F2 を押して、Dell の BIOS に入る。
  2. BIOS から Internal HDD Password を設定する (注意、キー配列が en_US / qwerty になっています。日本語配列とは若干異なります)。
  3. 変更を適用し、再起動する。
  4. Dell Security Manager からパスワードを要求されたときに、パスワードを入力せずに Escape を押す。ドライブはロックされたままになりますが、frozen 状態にはなっていません。
  5. ステップ 2 をスキップし、ステップ 3 に飛ぶ。
ノート: Lenovo のパソコンを使っていて "frozen" 状態を解除できない場合 (例: M.2 インターフェイスで SSD を使用する Lenovo 製のタブレット)、プロプライエタリツール を使うことで、この記事の手順を行わずに、メモリセルの消去をすることができます。参照: https://superuser.com/questions/763642/secure-erase-ssd-on-lenovo-thinkpad-t520-cant-unfreeze-ssd-machine-reboots-on

ステップ 2 - ユーザーパスワードを設定してセキュリティを有効化する

ノート: ユーザーパスワードが設定されると、次の起動時からドライブがロックされ、正しいパスワードを入力してアンロックしないと通常のアクセスが拒否されます。
警告: このステップの後にコンピュータを再起動しないでください。特に、Lenovo ノート PC を使用している場合です。Lenovo の BIOS の中には、暗号鍵の計算に逸脱したアルゴリズムを使う傾向にあるものがあります。マシンの起動後に、SSD ドライブに接続できなくなってしまいます。[1]

このパスワードは一時的に使用するものなので、何でも構いません。Secure Erase 後は、このパスワードは NULL に戻されます。この例では、パスワードとして PasSWorD を使っています:

# hdparm --user-master u --security-set-pass PasSWorD /dev/sdX
security_password="PasSWorD"
/dev/sdX:
Issuing SECURITY_SET_PASS command, password="PasSWorD", user=user, mode=high

サニティチェックとして、以下のコマンドを発行してください:

# hdparm -I /dev/sdX

上記のコマンドは "enabled" と出力するはずです:

Security:
        Master password revision code = 65534
                supported
                enabled
        not     locked
        not     frozen
        not     expired: security count
                supported: enhanced erase
        Security level high
        2min for SECURITY ERASE UNIT. 2min for ENHANCED SECURITY ERASE UNIT.

ステップ 3 - ATA Secure Erase コマンドを発行する

最後のステップは Secure Erase コマンドの発行です。ドライブのコンテンツを消去させるようデバイスの BIOS に命令します。この例で使用しているデバイスでは、先のコマンドで以下のように出力されたことに注意してください:

2min for SECURITY ERASE UNIT. 2min for ENHANCED SECURITY ERASE UNIT.

ATA の仕様によれば、強化型のセキュリティ消去 (--security-erase-enhanced) はより入念な消去を実行します。両方のコマンドの予想完了時間が等しい場合、ドライブのメーカーが仕様を無視し、どちらのコマンドでも同じ消去を行っていることを意味します。消去にかかる時間 (2分など) が短い場合、デバイスが自己暗号化を行っていて、BIOS によって消去されるのは内部の暗号鍵だけで、全てのデータセルが上書きしていないことを意味します [2]

警告:
  • 指定したドライブが正しいことを3重にチェックしてください。コマンドの実行を確定してしまったら、もう後戻りはできません。警告しましたよ。
  • これを実行するときに対象のドライブがマウントされていないことを確認してください。ドライブがマウントされているときに Secure Erase コマンドを発行してしまうと、適切に消去されません。
# hdparm --user-master u --security-erase PasSWorD /dev/sdX

コマンドが完了するまで待機してください。この例の出力では、Intel X25-M 80GB SSD に約40秒かかりました。

security_password="PasSWorD"
/dev/sdX:
Issuing SECURITY_ERASE command, password="PasSWorD", user=user
0.000u 0.000s 0:39.71 0.0%      0+0k 0+0io 0pf+0w

これで、ドライブが消去されました。消去の成功後、ドライブのセキュリティが自動的に無効化されるはずです (なので、アクセスにパスワードは必要なくなります)。以下のコマンドを実行して確認してください:

# hdparm -I /dev/sdX

上記のコマンドは "not enabled" と出力するはずです:

Security:
        Master password revision code = 65534
                supported
        not     enabled
        not     locked
        not     frozen
        not     expired: security count
                supported: enhanced erase
        2min for SECURITY ERASE UNIT. 2min for ENHANCED SECURITY ERASE UNIT.

NVMe ドライブ

NVMe 仕様では、NVMe ドライブをフォーマットするための標準化された方法が定義されています。NVMe ドライブは SATA インターフェイスプロトコルを使用しないため、SATA SSD と同じ方法では消去できないからです。もともと、この機能を提供していたのは nvme-format(1) コマンド (nvme-cli に同梱) でしたが、このコマンドのその機能を残しつつ、Specification 1.3 で専用の nvme-sanitize(1) コマンドのサポートが追加されました。Jonmichael Hands 氏 (NVMe MWG 共同議長、Intel の上級戦略プランナー/プロダクトマネージャ) の説明によると [3]:

これらのコマンドは、デバイスからユーザデータをセキュアに消去するために使用される。これは、新しいデバイスを導入するとき、廃棄するとき、デバイスが寿命を迎えたとき、SSD を新しい用途で使うときなどに使用できる。Sanitize は NVMe 1.3 仕様で導入されたため、それ以前では、Secure Erase を行うためだけに NVMe Format が使用された。両方のオプションが機能するが、データが適切に消去されたことを保証する点で、Sanitize はよりロバストだ。Format は、日常的な使用やテストに適している。

あなたのドライブでサポートされているものを確認するために、Identify Controller コマンドを使用してください:

# nvme id-ctrl /dev/nvme0 -H | grep "Format \|Crypto Erase\|Sanitize"

出力例:

  [1:1] : 0x1	Format NVM Supported
  [29:29] : 0	No-Deallocate After Sanitize bit in Sanitize command Supported
    [2:2] : 0	Overwrite Sanitize Operation Not Supported
    [1:1] : 0x1	Block Erase Sanitize Operation Supported
    [0:0] : 0x1	Crypto Erase Sanitize Operation Supported
  [2:2] : 0x1	Crypto Erase Supported as part of Secure Erase
  [1:1] : 0	Crypto Erase Applies to Single Namespace(s)
  [0:0] : 0	Format Applies to Single Namespace(s)

そして、formatsanitize のどちらかに進んでください。

Format コマンド

Format コマンドは、概念的には hdparmfdisk を組み合わせたものに近いです。ドライブの低レベルなパラメータを設定でき、さらに Secure Erase コマンドも送信できます。

nvme-format(1) には、Secure Erase Settings (-s <ses>, --ses=<ses>) のオプションに関する以下の詳細が書かれています:

Secure Erase Settings: このフィールドは、フォーマットの一部として Secure Erase を行うかどうかや、Secure Erase 操作の種類を指定します。消去は、データの場所に関わらず、全ユーザデータに適用されます (例: 公開されている LBA 内、キャッシュ内、割り当て解除された LBA 内など)。デフォルトは 0 です。

利用可能な値:

定義
0 Secure Erase 操作を要求しない
1 User Data Erase: 全ユーザデータを削除する。削除後のユーザデータの内容は未確定です (例えば、ユーザデータは 0 や 1 などで埋められているかもしれません)。User Data Erase が要求された時、全ユーザデータが暗号化されている場合、コントローラは Cryptographic Erase を行う場合があります。
2 Cryptographic Erase: 全ユーザデータは、暗号を用いて消去されます。最後に暗号化キーを消去して完了します。

Format コマンドは NVMe キャラクタデバイス全体 (例: /dev/nvme0) か特定の名前空間ブロックデバイス (例: /dev/nvme0n1) のいずれかを受け入れますが、実行するまえに、この機能があなたのドライブでサポートされていることを確認してください。例えば、上記の Identify Controller コマンドの出力では、Crypto Erase Applies to Single Namespace(s)Format Applies to Single Namespace(s) のビットが 0 にセットされていました。仕様によると、これは「コントローラが名前空間単位でのフォーマットをサポートしている」ことを意味します (図249の byte 列 524 "Format NVM Attributes (FNA)" を参照)。

例えば、暗号消去を使って /dev/nvme0 を名前空間1にフォーマットするには:

# nvme format /dev/nvme0 -s 2 -n 1

詳細やデバイス/名前空間の選択に関する重要な警告については nvme-format(1) を参照してください。

Sanitize コマンド

Sanitize コマンドは、「SATA と SAS の実装にある同名のコマンドと機能的に等価」になるように作成されました[4]。前述の記事によると[5]:

NVMe 1.4 specification によると、「Sanitize 操作は NVM サブシステム内の全ユーザデータを書き換え、キャッシュ、非揮発性メディア、Controller Memory Buffer から以前のユーザデータを復元できないようにします。」
Sanitize と Format の大きな違いは、Sanitize はキャッシュが削除されることを保証し、予期せぬ電源断後にもプロセスが再び開始されることです。Sanitize は、Secure Erase 操作のためのパターン上書きもサポートしています。これは、NAND の耐久性にとってはひどいものですが、他のタイプのストレージやメモリクラスに使用できますし、ユーザデータを復元できないことをより確実にできます。」

-a/--sanact オプションの使用法と利用可能な値は[6]:

-a <action>
--sanact=<action>
    Sanitize Action
    000b - Reserved
    001b - Exit Failure Mode
    010b - Start a Block Erase sanitize operation
    011b - Start an Overwrite sanitize operation
    100b - Start a Crypto Erase sanitize operation
ノート: これらのバイナリ値は、コマンド内では対応する10進数に置き換える必要があります。例: 000b = 0001b = 1010b = 2... 111b = 7

詳細は nvme-sanitize(1) を参照してください。

ヒント: 前述の記事のこの図には、man ページよりも読みやすい、様々な Sanitize Action (SANACT、最後の列) の説明が含まれています。

Block Erase と Crypto Erase の違いは、Crypto Erase は暗号化キーのみを消去することです (NVMe 1.4 specification で定義されている通り):

「User Data Erase: 全ユーザデータを削除する。削除後のユーザデータの内容は未確定です (例えば、ユーザデータは 0 や 1 などで埋められているかもしれません)。User Data Erase が要求された時、全ユーザデータが暗号化されている場合、コントローラは Cryptographic Erase を行う場合があります。」
Cryptographic Erase: 全ユーザデータは、暗号を用いて消去されます。これは、暗号化キーを消去することで達成されます。
Block Erase sanitize 操作は、メディア固有の低レベルなブロック消去法を用いて、ユーザデータが保存されている可能性のある NVM サブシステム内のメディア上のすべての場所において、ユーザデータを書き換えます。
Crypto Erase sanitize 操作は、ユーザデータが保存されている可能性のある NVM サブシステム内のメディア上のすべての場所において、メディアの暗号化キーを変更することにより、ユーザデータを書き換えます…」

(サポートされていれば) あなたのドライブに対して様々な手法がどれくらいの時間を要するのか推定を得ることができます:

# nvme sanitize-log /dev/nvme0
...
Estimated Time For Overwrite                   :  4294967295 (No time period reported)
Estimated Time For Block Erase                 :  174
Estimated Time For Crypto Erase                :  34

もし、以下のような結果になる場合:

# nvme sanitize-log /dev/nvme0
...
Estimated Time For Overwrite                   :  4294967295 (No time period reported)
Estimated Time For Block Erase                 :  4294967295 (No time period reported)
Estimated Time For Crypto Erase                :  4294967295 (No time period reported)

操作が完了するまでに長い時間が掛かることを確認してください。比較として、Intel 660p 512GB においては 1 回の Block Erase がこれらの結果を得るまでに約 2~3 時間かかりました。

警告: 一度始めると、再起動してもこの操作を中断することはできず、プロセスが完了するまでドライブは利用不可能になります。これには、長い時間がかかります。

Crypto Erase sanitize 操作を始めるには:

# nvme sanitize device -a 4
ノート: <device> パラメータは必須の NVMe キャラクタデバイス (例: /dev/nvme0/dev/nvme0n1 ではありません) で、この操作はデバイス全体に適用されます。

Block Erase の場合は:

# nvme sanitize device -a 2
警告: あなたのドライブでサポートされているとしても、Overwrite アクションを使うことは避けてください。これは、「耐久性の問題により NAND ベースの SSD にとっては良くなく、推奨されません」。

Sanitize ログにより、処理内容を追うことができます:

# nvme sanitize-log /dev/nvme0

ドライブを Crypto Erase している場合の出力例:

Sanitize Progress                      (SPROG) :  655
Sanitize Status                        (SSTAT) :  0x4
Sanitize Command Dword 10 Information (SCDW10) :  0x4
Estimated Time For Overwrite                   :  4294967295 (No time period reported)
Estimated Time For Block Erase                 :  174
Estimated Time For Crypto Erase                :  34
Estimated Time For Overwrite (No-Deallocate)   :  0
Estimated Time For Block Erase (No-Deallocate) :  0
Estimated Time For Crypto Erase (No-Deallocate):  0

When the command has completed successfully:

Sanitize Progress                      (SPROG) :  65535
Sanitize Status                        (SSTAT) :  0x101
Sanitize Command Dword 10 Information (SCDW10) :  0x4
Estimated Time For Overwrite                   :  4294967295 (No time period reported)
Estimated Time For Block Erase                 :  174
Estimated Time For Crypto Erase                :  34
Estimated Time For Overwrite (No-Deallocate)   :  0
Estimated Time For Block Erase (No-Deallocate) :  0
Estimated Time For Crypto Erase (No-Deallocate):  0

blkdiscard による一般的な方法

util-linux パッケージの blkdiscard(8) コマンドは --secure オプションを提供します。このオプションは、「セキュアな消去を行います。セキュアな消去は、ガベージコレクションによって作成された可能性のある消去ブロックのコピーもすべて削除されることを除いて、通常の消去と同じです。セキュアな消去はデバイスのサポートを必要とします。」("Perform a secure discard. A secure discard is the same as a regular discard except that all copies of the discarded blocks that were possibly created by garbage collection must also be erased. This requires support from the device.")

このコマンドを使うには、以下を実行してください:

# blkdiscard --secure /dev/device

セキュアな消去をサポートしていないデバイスの場合、-z/--zeroout オプションは、デフォルトでデバイス上の全ブロックを単に消去する代わりに、デバイスを 0 で埋めます。

blkdiscard の一般的なセキュリティに関する議論は [7] を、blkdiscard を使用してボリュームを消去する例は [8] を見てください。

トラブルシューティング

ドライブを消去した後に UEFI ブートエントリが削除された

一部の UEFI 実装は、存在しないファイルを参照しているブートエントリをシステムのスタートアップ時に削除します。メモリセルの消去を行った後にバックアップからシステムを復元する場合は、efibootmgr を使うか ブートローダーを再インストールして、ブートエントリを復元してください。

参照

翻訳ステータス: このページは en:Solid state drive/Memory cell clearing の翻訳バージョンです。最後の翻訳日は 2023-03-02 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。