コンテンツにスキップ

「ソリッドステートドライブ/メモリセルの消去」の版間の差分

提供: ArchWiki
削除された内容 追加された内容
同期
AshMyzk (トーク | 投稿記録)
Format コマンド: 訳を修正
(3人の利用者による、間の14版が非表示)
1行目: 1行目:
[[Category:ストレージ]]
[[Category:ストレージ]]
[[en:Solid State Drives/Memory cell clearing]]
[[en:Solid State Drives/Memory cell clearing]]
[[ru:Solid state drive (Русский)/Memory cell clearing]]
{{Related articles start}}
{{Related articles start}}
{{Related|ソリッドステートドライブ}}
{{Related|ソリッドステートドライブ}}
{{Related|ディスクの完全消去}}
{{Related|ディスクの完全消去}}
{{Related articles end}}
{{Related articles end}}
ときに、SSD のセルを完全に消去して、SSD 製造時の状態に戻し、[http://www.anandtech.com/storage/showdoc.aspx?i=3531&p=8 製造時の書き込み性能] を取り戻したいと思うこともあるでしょう。たとえ SSD が TRIM に対応していても、時が経つにつれて書き込み性能は下がっています。TRIM はあくまでファイルの削除に対する防護であり、差分保存などの操作には効果がありません。
ときに、SSD のセルを完全に消去して、SSD 製造時の状態に完全に戻し、[https://www.anandtech.com/storage/showdoc.aspx?i=3531&p=8 製造時の書き込み性能]を取り戻したいと思うこともあるでしょう。たとえ SSD がネイティブ TRIM に対応していても、時が経つにつれて書き込み性能は下がっていくことが知られています。TRIM はあくまでファイルの削除に対する防護であり、差分保存などの操作には効果がありません。

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


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


== SATA ドライブ ==
{{Note|以下の情報は ATA の公式 wiki ページから引用されています [https://ata.wiki.kernel.org/index.php/ATA_Secure_Erase]。}}


{{Note|以下の情報は [https://ata.wiki.kernel.org/index.php/ATA_Secure_Erase ATA の公式 wiki ページ]から引用されています。}}
== 手順 1 - ドライブのセキュリティが凍っていないことを確認 ==


=== ステップ 1 - ドライブのセキュリティが frozen でないことを確認する ===
以下のコマンドを実行してください:


以下のコマンドを発行してください:
# hdparm -I /dev/sdX


# hdparm -I /dev/sd''X'' | grep frozen
上記のコマンドで "frozen" と出力される場合、次の手順に進むことはできません。オペレーティングシステムが起動する前に BIOS が "SECURITY FREEZE" コマンドを実行して ATA Secure Erase コマンドをブロックしてしまっています。


出力の Security セクションに "not frozen" と表示されている必要があります。ただ "frozen" と表示される場合、次のステップに進むことはできません。一部の BIOS は、オペレーティングシステムを起動する前にドライブに "SECURITY FREEZE" コマンドを発行して "frozen" 状態にすることで、ATA Secure Erase コマンドをブロックします。
解決方法としては、システムを[[サスペンド]]することで、復帰時に凍結状態が解除されることがあります。それで解決しない場合、データケーブルを (電源が入った状態で) 抜き差しする方法があります。SATA のデータケーブルを切断するとカーネルがクラッシュする場合、SATA の電源ケーブルとデータケーブルの両方を素早く抜き差ししてみてください。それでも SATA ケーブルを抜くとカーネルがクラッシュしてしまうときは、BIOS で AHCI が有効になっていることを確認してください (AHCI が有効になっていれば抜き差しを行ってもクラッシュしません)。ホットプラグがサポートされている USB-to-SATA アダプタを使用する手段もあります。{{Pkg|hdparm}} は USB 経由でも使えます。


解決策としては、システムを単に[[サスペンド]]させることです。復帰するときに、frozen 状態が解除される可能性があります。うまく行かない場合は、ドライブのデータケーブルを (電源が入った状態で) 抜き差しする方法があります (カーネルがクラッシュするかもしれません)。SATA データケーブルをこのように抜き差ししてカーネルがクラッシュする場合は、オペレーティングシステムを完全に起動させて、素早く SATA の電源ケーブルとデータケーブルの両方を抜き差ししてみてください。それでも SATA ケーブルの抜き差しでカーネルがクラッシュしてしまう場合は、AHCI が有効化されていることを BIOS で確認してください (AHCI により、クラッシュさせずに、電源が入った状態で抜き差しできます)。ホットプラグに対応している場合は、USB から SATA への変換ケーブルを使うという手もあります。{{Pkg|hdparm}} は USB を介して使うこともできます。
{{Note|Lenovo のパソコンを使っていて "frozen" 状態を解除できない場合 (例: M.2 インターフェイスで SSD を使用する Lenovo 製のタブレット)、[https://pcsupport.lenovo.com/us/en/olddownloads/ds019026 プロプライエタリツール] を使ってメモリセルの消去をすることができます。参照: https://superuser.com/questions/763642/secure-erase-ssd-on-lenovo-thinkpad-t520-cant-unfreeze-ssd-machine-reboots-on 。}}


=== Dell のコンピュータ ===
==== Dell システム ====


コマンドによって "frozen" と出力される場合、以下の手順てみてください:
先のコマンド "frozen" と出力る場合、以下を行うことにより回避できるかもれません:


# 起動時に F2 を押して Dell の BIOS を起動する。
# スタートアップ時に F2 を押してDell の BIOS に入る。
# BIOS から Internal HDD Password を設定する。
# BIOS から Internal HDD Password を設定する (注意、キー配列が en_US / qwerty になっています。日本語配列とは若干異なります)
# 変更を適用し再起動する。
# 変更を適用し再起動する。
# Dell Security Manager によってパスワード要求されたときに、パスワードを入力せずに Escape を押す。ドライブが解錠されないかわりに凍結もされません。
# Dell Security Manager からパスワード要求されたときに、パスワードを入力せずに Escape を押す。ドライブはロックされたままになりますが、frozen 状態はなっていません。
# ステップ 2 をスキップし、ステップ 3 に飛ぶ。
# 下の手順3に進む。


{{Note|Lenovo のパソコンを使っていて "frozen" 状態を解除できない場合 (例: M.2 インターフェイスで SSD を使用する Lenovo 製のタブレット)、'''[https://pcsupport.lenovo.com/us/en/olddownloads/ds019026 プロプライエタリツール]''' を使うことで、この記事の手順を行わずに、メモリセルの消去をすることができます。参照: https://superuser.com/questions/763642/secure-erase-ssd-on-lenovo-thinkpad-t520-cant-unfreeze-ssd-machine-reboots-on 。}}
== 手順 2 - ユーザーパスワードを設定してセキュリティを有効化 ==


=== ステップ 2 - ユーザーパスワードを設定してセキュリティを有効化する ===
{{Note|ユーザーパスワードが設定されると、次の起動時からドライブが施錠されて、正しいパスワードを入力して解錠しないと通常のアクセスができないようになります。}}
{{Warning|Lenovo のノートパソコンを使用している場合、セキュリティを有効化した後に再起動を行ってはいけません。Lenovo の BIOS の中には暗号鍵の計算に問題のあるアルゴリズムを使っているものがあります。マシンを起動した後に SSD ドライブに接続できなくなってしまいます [https://jbeekman.nl/blog/2015/03/lenovo-thinkpad-hdd-password/]。}}


{{Note|ユーザーパスワードが設定されると、次の起動時からドライブがロックされ、正しいパスワードを入力してアンロックしないと通常のアクセスが拒否されます。}}
一時的に使用するものなので、パスワードは何でもかまいません。Secure Erase を実行した後にパスワードは NULL に戻ります。以下の例では、パスワードとして "PasSWorD" を使っています:
{{Warning|このステップの後にコンピュータを再起動'''しないでください'''。特に、Lenovo ノート PC を使用している場合です。Lenovo の BIOS の中には、暗号鍵の計算に逸脱したアルゴリズムを使う傾向にあるものがあります。マシンの起動後に、SSD ドライブに接続できなくなってしまいます。[https://jbeekman.nl/blog/2015/03/lenovo-thinkpad-hdd-password/]}}


このパスワードは一時的に使用するものなので、何でも構いません。Secure Erase 後は、このパスワードは NULL に戻されます。この例では、パスワードとして {{ic|''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


{{hc|# hdparm --user-master u --security-set-pass ''PasSWorD'' /dev/sd''X''|2=
サニティチェックとして、以下のコマンドを実行:
security_password="''PasSWorD''"
/dev/sd''X'':
Issuing SECURITY_SET_PASS command, password="''PasSWorD''", user=user, mode=high
}}

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


# hdparm -I /dev/sdX
# hdparm -I /dev/sd''X''


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

{{bc|1=Security:
{{bc|1=
Security:
Master password revision code = 65534
Master password revision code = 65534
supported
supported
enabled
'''enabled'''
not locked
not locked
not frozen
not frozen
64行目: 73行目:
}}
}}


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


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


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


ATA の仕様によれば''強化型''のセキュリティ消去 ({{ic|--security-erase-enhanced}}) は入念な消去を実行します。両方のコマンドの予想完了時間が等しい場合、ドライブのメーカーが仕様に従っておらず、どちらのコマンドでも同じ消去を行うようになっていることを意味します。消去にかかる時間 (2分など) が短いのはデバイスが自己暗号化を行っていて、BIOS によって消去されるのは内部の暗号鍵だけで、全てのデータセルが上書きされるわけではないということをします [http://security.stackexchange.com/questions/62253/what-is-the-difference-between-ata-secure-erase-and-security-erase-how-can-i-en]。
ATA の仕様によれば''強化型''のセキュリティ消去 ({{ic|--security-erase-enhanced}}) はより入念な消去を実行します。両方のコマンドの予想完了時間が等しい場合、ドライブのメーカーが仕様を無視し、どちらのコマンドでも同じ消去を行っていることを意味します。消去にかかる時間 (2分など) が短い場合、デバイスが自己暗号化を行っていて、BIOS によって消去されるのは内部の暗号鍵だけで、全てのデータセルが上書きしていないことを意味します [https://security.stackexchange.com/questions/62253/what-is-the-difference-between-ata-secure-erase-and-security-erase-how-can-i-en]。


{{Warning|
{{warning|消去するドライブが正しいかどうか何度も確認を行ってください。コマンドを一度実行してしまったら後戻りは出来ません。警告しましたよ。}}
* 指定したドライブが正しいことを3重にチェックしてください。コマンドの実行を確定してしまったら、もう'''後戻りはできません'''。警告しましたよ。
* これを実行するときに対象のドライブがマウントされていないことを確認してください。ドライブがマウントされているときに Secure Erase コマンドを発行してしまうと、適切に消去されません。
}}


# hdparm --user-master u --security-erase PasSWorD /dev/sdX
# hdparm --user-master u --security-erase ''PasSWorD'' /dev/sd''X''


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


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


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


# hdparm -I /dev/sdX
# hdparm -I /dev/sd''X''


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

{{bc|1=Security:
{{bc|1=
Security:
Master password revision code = 65534
Master password revision code = 65534
supported
supported
not enabled
'''not enabled'''
not locked
not locked
not frozen
not frozen
99行目: 113行目:
}}
}}


== Tips and tricks ==
== NVMe ドライブ ==

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

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

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

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

出力例:

{{bc|
[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)
}}

そして、[[#Format コマンド|format]] か [[#Sanitize コマンド|sanitize]] のどちらかに進んでください。

=== Format コマンド ===

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

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

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

利用可能な値:

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

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

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

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

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

=== Sanitize コマンド ===

Sanitize コマンドは、「SATA と SAS の実装にある同名のコマンドと機能的に等価」になるように作成されました[https://nvmexpress.org/changes-in-nvme-revision-1-3/]。前述の記事によると[https://nvmexpress.org/open-source-nvme-management-utility-nvme-command-line-interface-nvme-cli/]:

:「[https://nvmexpress.org/wp-content/uploads/NVM-Express-1_4-2019.06.10-Ratified.pdf#%5B%7B%22num%22%3A1051%2C%22gen%22%3A0%7D%2C%7B%22name%22%3A%22XYZ%22%7D%2C70%2C369%2C0%5D NVMe 1.4 specification] によると、''「Sanitize 操作は NVM サブシステム内の全ユーザデータを書き換え、キャッシュ、非揮発性メディア、Controller Memory Buffer から以前のユーザデータを復元できないようにします。」''
:Sanitize と Format の大きな違いは、Sanitize はキャッシュが削除されることを保証し、予期せぬ電源断後にもプロセスが再び開始されることです。Sanitize は、Secure Erase 操作のためのパターン上書きもサポートしています。これは、NAND の耐久性にとってはひどいものですが、他のタイプのストレージやメモリクラスに使用できますし、ユーザデータを復元できないことをより確実にできます。」

{{ic|-a/--sanact}} オプションの使用法と利用可能な値は[https://github.com/linux-nvme/nvme-cli/blob/master/Documentation/nvme-sanitize.txt#L64-L71]:

{{bc|1=
-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
}}

{{Note|これらのバイナリ値は、コマンド内では対応する10進数に置き換える必要があります。例: {{ic|1=000b = 0}}、{{ic|1=001b = 1}}、{{ic|1=010b = 2}}... {{ic|1=111b = 7}}。}}

詳細は {{man|1|nvme-sanitize}} を参照してください。

{{Tip|前述の記事の[https://nvmexpress.org/wp-content/uploads/Image-8.png この図]には、man ページよりも読みやすい、様々な Sanitize Action (SANACT、最後の列) の説明が含まれています。}}

Block Erase と Crypto Erase の違いは、Crypto Erase は暗号化キーのみを消去することです ([https://nvmexpress.org/wp-content/uploads/NVM-Express-1_4-2019.06.10-Ratified.pdf#%5B%7B%22num%22%3A663%2C%22gen%22%3A0%7D%2C%7B%22name%22%3A%22XYZ%22%7D%2C70%2C567%2C0%5D NVMe 1.4 specification] で定義されている通り):

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

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

{{hc|# 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
}}

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

{{hc|# 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 時間かかりました。

{{Warning|一度始めると、再起動してもこの操作を中断することはできず、プロセスが完了するまでドライブは利用不可能になります。これには、[https://github.com/linux-nvme/nvme-cli/issues/752#issuecomment-647821283 長い時間]がかかります。}}

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

# nvme sanitize ''device'' -a 4

{{Note|{{ic|<device>}} パラメータは必須の NVMe キャラクタデバイス (例: {{ic|/dev/nvme0}}。{{ic|/dev/nvme0n1}} '''ではありません''') で、この操作は'''デバイス全体'''に適用されます。}}

Block Erase の場合は:

# nvme sanitize ''device'' -a 2

{{Warning|あなたのドライブでサポートされているとしても、''Overwrite'' アクションを使うことは避けてください。これは、「[https://nvmedeveloperdays.com/English/Collaterals/Proceedings/2018/20181204_PRECON2_Hands.pdf 耐久性の問題により NAND ベースの SSD にとっては良くなく、推奨されません]」。}}

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

# nvme sanitize-log /dev/nvme0

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

{{bc|
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:

{{bc|
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 による一般的な方法 ==

{{Pkg|util-linux}} パッケージの {{man|8|blkdiscard}} コマンドは {{ic|--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''

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

''blkdiscard'' の一般的なセキュリティに関する議論は [https://unix.stackexchange.com/questions/659931/how-secure-is-blkdiscard] を、blkdiscard を使用してボリュームを消去する例は [https://www.ovirt.org/develop/release-management/features/storage/wipe-volumes-using-blkdiscard.html] を見てください。

== トラブルシューティング ==

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

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

== 参照 ==

* [https://web.archive.org/web/20190326142043/http://forum.notebookreview.com/threads/secure-erase-hdds-ssds-sata-nvme-using-hdparm-nvme-cli-on-linux.827525/ Secure Erase HDDs/SSDs (SATA/NVMe) using hdparm & nvme-cli on Linux] (2019): 画像付きの良いチュートリアル
* [https://nvmexpress.org/wp-content/uploads/Session-3-Verifying-SSD-Sanitization_Micron_Toshiba_Final-as-of-4.26.pdf Verifying SSD Sanitization]


{{TranslationStatus|Solid state drive/Memory cell clearing|2023-03-02|757782}}
消去した後に GRUB EFI を動作させるハードウェアごとの手順は [[GRUB/EFI サンプル]]を見てください。

2023年4月5日 (水) 15:45時点における版

ときに、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 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。