「ソリッドステートドライブ/メモリセルの消去」の版間の差分
Kusanaginoturugi (トーク | 投稿記録) 細 |
(同期) |
||
(2人の利用者による、間の11版が非表示) | |||
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 製造時の状態に戻し、[ |
+ | ときに、SSD のセルを完全に消去して、SSD 製造時の状態に完全に戻し、[https://www.anandtech.com/storage/showdoc.aspx?i=3531&p=8 製造時の書き込み性能]を取り戻したいと思うこともあるでしょう。たとえ SSD がネイティブ TRIM に対応していても、時が経つにつれて書き込み性能は下がっていくことが知られています。TRIM はあくまでファイルの削除に対する防護であり、差分保存などの操作には効果がありません。 |
+ | Secure Erase を行っても、SSD セルのウェアレベリングの状態はリセットできません。寿命を迎えつつあるドライブの場合、短い間は書き込み可能になる''かもしれません''が、限られた量の書き込み後は依然としてできなくなります。 |
||
− | {{Warning| |
||
− | * 消去を行う前に重要なデータをバックアップしてください。SSD 上の全てのデータを消去するため、データ復旧サービスを使ってもデータを元に戻すことはできません。消去を行った後に、デバイスを再度パーティショニングしてデータをリストアしてください。 |
||
− | * SATA インターフェイスで直接接続されていないドライブで以下の消去を行ってはいけません。USB や SAS/RAID カードで接続されているドライブに対して Secure Erase コマンドを実行するとドライブが文鎮化する可能性があります。}} |
||
+ | {{Warning| |
||
− | {{Note|以下の情報は ATA の公式 wiki ページから引用されています [https://ata.wiki.kernel.org/index.php/ATA_Secure_Erase]。}} |
||
+ | * 消去を行う前に重要なデータをすべてバックアップしてください! '''この作業は SSD 上の全データを破壊'''し、データ復旧サービスでさえ復元不可能にしてしまいます! 作業を行った後に、デバイスを再度パーティショニングして、データを再保存する必要があります! |
||
+ | * 対象のドライブが SATA/NVMe インターフェイスに直接接続されていない場合、この作業を'''行わないでください'''。USB や SAS/RAID カードを介して接続されているドライブに対して Secure Erase/Format/Sanitize コマンドを発行すると、そのドライブを文鎮化させてしまう可能性があります。 |
||
+ | }} |
||
== SATA ドライブ == |
== SATA ドライブ == |
||
− | === 手順 1 - ドライブのセキュリティが凍っていないことを確認 === |
||
+ | ATA では、ドライブを消去するためのコマンドとして {{ic|SECURITY ERASE UNIT}} と {{ic|ENHANCED SECURITY ERASE UNIT}} があります。[https://ata.wiki.kernel.org/index.php/ATA_Secure_Erase] |
||
− | 以下のコマンドを実行してください: |
||
+ | {{Tip|これらのコマンドは、ハードディスクドライブをゼロ初期化する目的でも使用できます。}} |
||
− | # hdparm -I /dev/sdX |
||
+ | === ドライブのセキュリティが frozen モードでないことを確認する === |
||
− | 上記のコマンドで "frozen" と出力される場合、次の手順に進むことはできません。オペレーティングシステムが起動する前に BIOS が "SECURITY FREEZE" コマンドを実行して ATA Secure Erase コマンドをブロックしてしまっています。 |
||
+ | 以下のコマンドを発行してください: |
||
− | 解決方法としては、システムを[[サスペンド]]することで、復帰時に凍結状態が解除されることがあります。それで解決しない場合、データケーブルを (電源が入った状態で) 抜き差しする方法があります。SATA のデータケーブルを切断するとカーネルがクラッシュする場合、SATA の電源ケーブルとデータケーブルの両方を素早く抜き差ししてみてください。それでも SATA ケーブルを抜くとカーネルがクラッシュしてしまうときは、BIOS で AHCI が有効になっていることを確認してください (AHCI が有効になっていれば抜き差しを行ってもクラッシュしません)。ホットプラグがサポートされている USB-to-SATA アダプタを使用する手段もあります。{{Pkg|hdparm}} は USB 経由でも使えます。 |
||
+ | # hdparm -I /dev/sd''X'' | grep frozen |
||
− | {{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 。}} |
||
+ | 出力の Security セクションに {{ic|not frozen}} と表示されている必要があります。ただ {{ic|frozen}} と表示される場合、次のステップに進むことはできません。詳細は [[ソリッドステートドライブ#Frozen モード]] を参照してください。 |
||
− | ==== Dell のコンピュータ ==== |
||
+ | 解決策としては、システムを単に[[サスペンド]] (S0ix ではなく S3 スリープ) させることです。復帰するときに、frozen 状態が解除される可能性があります。うまく行かない場合は、ドライブのデータケーブルを (電源が入った状態で) 抜き差しする方法があります (カーネルがクラッシュするかもしれません)。SATA データケーブルをこのように抜き差ししてカーネルがクラッシュする場合は、オペレーティングシステムを完全に起動させて、素早く SATA の電源ケーブルとデータケーブルの両方を抜き差ししてみてください。それでも SATA ケーブルの抜き差しでカーネルがクラッシュしてしまう場合は、AHCI が有効化されていることを BIOS で確認してください (AHCI により、クラッシュさせずに、電源が入った状態で抜き差しできます)。ホットプラグに対応している場合は、USB から SATA への変換ケーブルを使うという手もあります。{{Pkg|hdparm}} は USB を介して使うこともできます。 |
||
− | コマンドによって "frozen" と出力される場合、以下の手順を試してみてください: |
||
+ | ==== Dell システム ==== |
||
− | # 起動時に F2 を押して Dell の BIOS を起動する。 |
||
− | # BIOS から Internal HDD Password を設定する。 |
||
− | # 変更を適用して再起動する。 |
||
− | # Dell Security Manager によってパスワードが要求されたときに、パスワードを入力せずに Escape を押す。ドライブが解錠されないかわりに凍結もされません。 |
||
− | # 下の手順3に進む。 |
||
+ | 先のコマンドが "frozen" と出力する場合、以下を行うことにより回避できるかもしれません: |
||
− | === 手順 2 - ユーザーパスワードを設定してセキュリティを有効化 === |
||
+ | # スタートアップ時に F2 を押して、Dell の BIOS に入る。 |
||
− | {{Note|ユーザーパスワードが設定されると、次の起動時からドライブが施錠されて、正しいパスワードを入力して解錠しないと通常のアクセスができないようになります。}} |
||
+ | # BIOS から Internal HDD Password を設定する (注意、キー配列が en_US / qwerty になっています。日本語配列とは若干異なります)。 |
||
− | {{Warning|Lenovo のノートパソコンを使用している場合、セキュリティを有効化した後に再起動を行ってはいけません。Lenovo の BIOS の中には暗号鍵の計算に問題のあるアルゴリズムを使っているものがあります。マシンを起動した後に SSD ドライブに接続できなくなってしまいます [https://jbeekman.nl/blog/2015/03/lenovo-thinkpad-hdd-password/]。}} |
||
+ | # 変更を適用し、再起動する。 |
||
+ | # Dell Security Manager からパスワードを要求されたときに、パスワードを入力せずに Escape を押す。ドライブはロックされたままになりますが、frozen 状態にはなっていません。 |
||
+ | # ステップ 2 をスキップし、ステップ 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 。}} |
||
− | 一時的に使用するものなので、パスワードは何でもかまいません。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 |
||
+ | {{Note|ユーザーパスワードが設定されると、次の起動時からドライブがロックされ、正しいパスワードを入力してアンロックしないと通常のアクセスが拒否されます。}} |
||
− | サニティチェックとして、以下のコマンドを実行: |
||
+ | {{Warning|このステップの後にコンピュータを再起動'''しないでください'''。特に、Lenovo ノート PC を使用している場合です。Lenovo の BIOS の中には、暗号鍵の計算に逸脱したアルゴリズムを使う傾向にあるものがあります。マシンの起動後に、SSD ドライブに接続できなくなってしまいます。[https://jbeekman.nl/blog/2015/03/lenovo-thinkpad-hdd-password/]}} |
||
+ | このパスワードは一時的に使用するものなので、何でも構いません。Secure Erase 後は、このパスワードは NULL に戻されます。この例では、パスワードとして {{ic|''PasSWorD''}} を使っています: |
||
− | # hdparm -I /dev/sdX |
||
+ | |||
+ | {{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/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 |
||
65行目: | 75行目: | ||
}} |
}} |
||
− | === |
+ | === ATA SECURITY ERASE UNIT コマンドを発行する === |
− | 最後 |
+ | 最後のステップは ATA SECURITY ERASE UNIT コマンドの発行です。ドライブのコンテンツを消去させるようデバイスのファームウェアに命令します。この例で使用しているデバイスでは、先のコマンドで以下のように出力されたことに注意してください: |
2min for SECURITY ERASE UNIT. 2min for ENHANCED SECURITY ERASE UNIT. |
2min for SECURITY ERASE UNIT. 2min for ENHANCED SECURITY ERASE UNIT. |
||
− | ATA の仕様 |
+ | ATA の仕様によれば、''強化型''のセキュリティ消去 ({{ic|--security-erase-enhanced}}) はより入念な消去を実行します。両方のコマンドの予想完了時間が等しい場合、ドライブのメーカーが仕様を無視し、どちらのコマンドでも同じ消去を行っていることを意味します。消去にかかる時間 (2分など) が短い場合、デバイスが自己暗号化を行っていて、ファームウェアによって消去されるのは内部の暗号鍵だけで、全てのデータセルが上書きしていないことを意味します [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/ |
+ | # hdparm --user-master u --security-erase ''PasSWorD'' /dev/sd''X'' |
− | コマンドが完了するまで |
+ | コマンドが完了するまで待機してください。この例の出力では、Intel X25-M 80GB SSD に約40秒かかりました。 |
− | security_password="PasSWorD" |
+ | security_password="''PasSWorD''" |
− | /dev/ |
+ | /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/ |
+ | # 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 |
||
100行目: | 115行目: | ||
}} |
}} |
||
+ | == 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 -E '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|-s}}/{{ic|--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 |
||
+ | |||
+ | 全ての名前空間をフォーマットするには {{ic|-n 0xffffffff}} オプションを使用してください。 |
||
+ | |||
+ | 詳細やデバイス/名前空間の選択に関する重要な警告については {{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}} オプションの使用法と利用可能な値は {{man|1|nvme-sanitize}} で説明されています。 |
||
+ | |||
+ | 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 start-crypto-erase |
||
+ | |||
+ | {{Note|{{ic|''device''}} パラメータは必須の NVMe キャラクタデバイス (例: {{ic|/dev/nvme0}}。{{ic|/dev/nvme0n1}} '''ではありません''') で、この操作は'''デバイス全体'''に適用されます。}} |
||
+ | |||
+ | Block Erase の場合は: |
||
+ | |||
+ | # nvme sanitize ''device'' -a start-block-erase |
||
+ | |||
+ | {{Warning|あなたのドライブでサポートされているとしても、''Overwrite'' アクションを使うことは避けてください。これは、「[https://nvmedeveloperdays.com/English/Collaterals/Proceedings/2018/20181204_PRECON2_Hands.pdf 耐久性の問題により NAND ベースの SSD にとっては良くなく、推奨されません]{{Dead link|2024|01|13|status=410}}」。}} |
||
+ | |||
+ | 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}} オプションを提供します。このオプションは、「''セキュアな消去を行います。セキュアな消去は、ガベージコレクションによって作成された可能性のある消去ブロックのコピーもすべて削除されることを除いて、通常の消去と同じです。セキュアな消去はデバイスのサポートを必要とします。''」 |
||
+ | |||
+ | このコマンドを使うには、以下を実行してください: |
||
+ | |||
+ | # 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|2024-03-22|802318}} |
||
− | 消去した後に GRUB EFI を動作させるハードウェアごとの手順は [[GRUB/EFI サンプル]]を見てください。 |
2024年3月22日 (金) 09:28時点における最新版
関連記事
ときに、SSD のセルを完全に消去して、SSD 製造時の状態に完全に戻し、製造時の書き込み性能を取り戻したいと思うこともあるでしょう。たとえ SSD がネイティブ TRIM に対応していても、時が経つにつれて書き込み性能は下がっていくことが知られています。TRIM はあくまでファイルの削除に対する防護であり、差分保存などの操作には効果がありません。
Secure Erase を行っても、SSD セルのウェアレベリングの状態はリセットできません。寿命を迎えつつあるドライブの場合、短い間は書き込み可能になるかもしれませんが、限られた量の書き込み後は依然としてできなくなります。
目次
SATA ドライブ
ATA では、ドライブを消去するためのコマンドとして SECURITY ERASE UNIT
と ENHANCED SECURITY ERASE UNIT
があります。[1]
ドライブのセキュリティが frozen モードでないことを確認する
以下のコマンドを発行してください:
# hdparm -I /dev/sdX | grep frozen
出力の Security セクションに not frozen
と表示されている必要があります。ただ frozen
と表示される場合、次のステップに進むことはできません。詳細は ソリッドステートドライブ#Frozen モード を参照してください。
解決策としては、システムを単にサスペンド (S0ix ではなく S3 スリープ) させることです。復帰するときに、frozen 状態が解除される可能性があります。うまく行かない場合は、ドライブのデータケーブルを (電源が入った状態で) 抜き差しする方法があります (カーネルがクラッシュするかもしれません)。SATA データケーブルをこのように抜き差ししてカーネルがクラッシュする場合は、オペレーティングシステムを完全に起動させて、素早く SATA の電源ケーブルとデータケーブルの両方を抜き差ししてみてください。それでも SATA ケーブルの抜き差しでカーネルがクラッシュしてしまう場合は、AHCI が有効化されていることを BIOS で確認してください (AHCI により、クラッシュさせずに、電源が入った状態で抜き差しできます)。ホットプラグに対応している場合は、USB から SATA への変換ケーブルを使うという手もあります。hdparm は USB を介して使うこともできます。
Dell システム
先のコマンドが "frozen" と出力する場合、以下を行うことにより回避できるかもしれません:
- スタートアップ時に F2 を押して、Dell の BIOS に入る。
- BIOS から Internal HDD Password を設定する (注意、キー配列が en_US / qwerty になっています。日本語配列とは若干異なります)。
- 変更を適用し、再起動する。
- Dell Security Manager からパスワードを要求されたときに、パスワードを入力せずに Escape を押す。ドライブはロックされたままになりますが、frozen 状態にはなっていません。
- ステップ 2 をスキップし、ステップ 3 に飛ぶ。
ユーザーパスワードを設定してセキュリティを有効化する
このパスワードは一時的に使用するものなので、何でも構いません。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.
ATA SECURITY ERASE UNIT コマンドを発行する
最後のステップは ATA SECURITY ERASE UNIT コマンドの発行です。ドライブのコンテンツを消去させるようデバイスのファームウェアに命令します。この例で使用しているデバイスでは、先のコマンドで以下のように出力されたことに注意してください:
2min for SECURITY ERASE UNIT. 2min for ENHANCED SECURITY ERASE UNIT.
ATA の仕様によれば、強化型のセキュリティ消去 (--security-erase-enhanced
) はより入念な消去を実行します。両方のコマンドの予想完了時間が等しい場合、ドライブのメーカーが仕様を無視し、どちらのコマンドでも同じ消去を行っていることを意味します。消去にかかる時間 (2分など) が短い場合、デバイスが自己暗号化を行っていて、ファームウェアによって消去されるのは内部の暗号鍵だけで、全てのデータセルが上書きしていないことを意味します [3]。
# 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 の上級戦略プランナー/プロダクトマネージャ) の説明によると [4]:
- 「これらのコマンドは、デバイスからユーザデータをセキュアに消去するために使用される。これは、新しいデバイスを導入するとき、廃棄するとき、デバイスが寿命を迎えたとき、SSD を新しい用途で使うときなどに使用できる。Sanitize は NVMe 1.3 仕様で導入されたため、それ以前では、Secure Erase を行うためだけに NVMe Format が使用された。両方のオプションが機能するが、データが適切に消去されたことを保証する点で、Sanitize はよりロバストだ。Format は、日常的な使用やテストに適している。」
あなたのドライブでサポートされているものを確認するために、Identify Controller コマンドを使用してください:
# nvme id-ctrl /dev/nvme0 -H | grep -E '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)
そして、format か sanitize のどちらかに進んでください。
Format コマンド
Format コマンドは、概念的には hdparm と fdisk を組み合わせたものに近いです。ドライブの低レベルなパラメータを設定でき、さらに Secure Erase コマンドも送信できます。
nvme-format(1) には、Secure Erase Settings (-s
/--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
全ての名前空間をフォーマットするには -n 0xffffffff
オプションを使用してください。
詳細やデバイス/名前空間の選択に関する重要な警告については nvme-format(1) を参照してください。
Sanitize コマンド
Sanitize コマンドは、「SATA と SAS の実装にある同名のコマンドと機能的に等価」になるように作成されました[5]。前述の記事によると[6]:
- 「NVMe 1.4 specification によると、「Sanitize 操作は NVM サブシステム内の全ユーザデータを書き換え、キャッシュ、非揮発性メディア、Controller Memory Buffer から以前のユーザデータを復元できないようにします。」
- Sanitize と Format の大きな違いは、Sanitize はキャッシュが削除されることを保証し、予期せぬ電源断後にもプロセスが再び開始されることです。Sanitize は、Secure Erase 操作のためのパターン上書きもサポートしています。これは、NAND の耐久性にとってはひどいものですが、他のタイプのストレージやメモリクラスに使用できますし、ユーザデータを復元できないことをより確実にできます。」
-a/--sanact
オプションの使用法と利用可能な値は nvme-sanitize(1) で説明されています。
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 start-crypto-erase
Block Erase の場合は:
# nvme sanitize device -a start-block-erase
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
オプションを提供します。このオプションは、「セキュアな消去を行います。セキュアな消去は、ガベージコレクションによって作成された可能性のある消去ブロックのコピーもすべて削除されることを除いて、通常の消去と同じです。セキュアな消去はデバイスのサポートを必要とします。」
このコマンドを使うには、以下を実行してください:
# blkdiscard --secure /dev/device
セキュアな消去をサポートしていないデバイスの場合、-z
/--zeroout
オプションは、デフォルトでデバイス上の全ブロックを単に消去する代わりに、デバイスを 0 で埋めます。
blkdiscard の一般的なセキュリティに関する議論は [7] を、blkdiscard を使用してボリュームを消去する例は [8] を見てください。
トラブルシューティング
ドライブを消去した後に UEFI ブートエントリが削除された
一部の UEFI 実装は、存在しないファイルを参照しているブートエントリをシステムのスタートアップ時に削除します。メモリセルの消去を行った後にバックアップからシステムを復元する場合は、efibootmgr を使うか ブートローダーを再インストールして、ブートエントリを復元してください。
参照
- Secure Erase HDDs/SSDs (SATA/NVMe) using hdparm & nvme-cli on Linux (2019): 画像付きの良いチュートリアル
- Verifying SSD Sanitization