「ソリッドステートドライブ/メモリセルの消去」の版間の差分
(→SATA ドライブ: 同期) |
(同期) |
||
(同じ利用者による、間の3版が非表示) | |||
17行目: | 17行目: | ||
== SATA ドライブ == |
== SATA ドライブ == |
||
− | {{ |
+ | ATA では、ドライブを消去するためのコマンドとして {{ic|SECURITY ERASE UNIT}} と {{ic|ENHANCED SECURITY ERASE UNIT}} があります。[https://ata.wiki.kernel.org/index.php/ATA_Secure_Erase] |
+ | {{Tip|これらのコマンドは、ハードディスクドライブをゼロ初期化する目的でも使用できます。}} |
||
− | === ステップ 1 - ドライブのセキュリティが frozen でないことを確認する === |
||
+ | |||
+ | === ドライブのセキュリティが frozen モードでないことを確認する === |
||
以下のコマンドを発行してください: |
以下のコマンドを発行してください: |
||
25行目: | 27行目: | ||
# hdparm -I /dev/sd''X'' | grep frozen |
# hdparm -I /dev/sd''X'' | grep frozen |
||
− | 出力の Security セクションに |
+ | 出力の Security セクションに {{ic|not frozen}} と表示されている必要があります。ただ {{ic|frozen}} と表示される場合、次のステップに進むことはできません。詳細は [[ソリッドステートドライブ#Frozen モード]] を参照してください。 |
− | 解決策としては、システムを単に[[サスペンド]]させることです。復帰するときに、frozen 状態が解除される可能性があります。うまく行かない場合は、ドライブのデータケーブルを (電源が入った状態で) 抜き差しする方法があります (カーネルがクラッシュするかもしれません)。SATA データケーブルをこのように抜き差ししてカーネルがクラッシュする場合は、オペレーティングシステムを完全に起動させて、素早く SATA の電源ケーブルとデータケーブルの両方を抜き差ししてみてください。それでも SATA ケーブルの抜き差しでカーネルがクラッシュしてしまう場合は、AHCI が有効化されていることを BIOS で確認してください (AHCI により、クラッシュさせずに、電源が入った状態で抜き差しできます)。ホットプラグに対応している場合は、USB から SATA への変換ケーブルを使うという手もあります。{{Pkg|hdparm}} は USB を介して使うこともできます。 |
+ | 解決策としては、システムを単に[[サスペンド]] (S0ix ではなく S3 スリープ) させることです。復帰するときに、frozen 状態が解除される可能性があります。うまく行かない場合は、ドライブのデータケーブルを (電源が入った状態で) 抜き差しする方法があります (カーネルがクラッシュするかもしれません)。SATA データケーブルをこのように抜き差ししてカーネルがクラッシュする場合は、オペレーティングシステムを完全に起動させて、素早く SATA の電源ケーブルとデータケーブルの両方を抜き差ししてみてください。それでも SATA ケーブルの抜き差しでカーネルがクラッシュしてしまう場合は、AHCI が有効化されていることを BIOS で確認してください (AHCI により、クラッシュさせずに、電源が入った状態で抜き差しできます)。ホットプラグに対応している場合は、USB から SATA への変換ケーブルを使うという手もあります。{{Pkg|hdparm}} は USB を介して使うこともできます。 |
==== Dell システム ==== |
==== Dell システム ==== |
||
41行目: | 43行目: | ||
{{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 。}} |
{{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 。}} |
||
− | === |
+ | === ユーザーパスワードを設定してセキュリティを有効化する === |
{{Note|ユーザーパスワードが設定されると、次の起動時からドライブがロックされ、正しいパスワードを入力してアンロックしないと通常のアクセスが拒否されます。}} |
{{Note|ユーザーパスワードが設定されると、次の起動時からドライブがロックされ、正しいパスワードを入力してアンロックしないと通常のアクセスが拒否されます。}} |
||
73行目: | 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 の仕様によれば、''強化型''のセキュリティ消去 ({{ic|--security-erase-enhanced}}) はより入念な消去を実行します。両方のコマンドの予想完了時間が等しい場合、ドライブのメーカーが仕様を無視し、どちらのコマンドでも同じ消去を行っていることを意味します。消去にかかる時間 (2分など) が短い場合、デバイスが自己暗号化を行っていて、 |
+ | 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| |
||
115行目: | 117行目: | ||
== NVMe ドライブ == |
== 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 は、日常的な使用やテストに適している。''」 |
||
− | :"''These commands are used to securely erase user data from the device. This can be used when deploying a new device, retiring or at device end-of-life, using an SSD for a new application and so on. Sanitize was introduced in NVMe 1.3 specification, so before then NVMe Format was used exclusively to perform secure erase. While both options work, Sanitize is more robust for ensuring the data was properly wiped; format is good for everyday use and testing.''" |
||
+ | あなたのドライブでサポートされているものを確認するために、Identify Controller コマンドを使用してください: |
||
− | In order to verify what is supported by your drive, use the Identify Controller command: |
||
− | # nvme id-ctrl /dev/nvme0 -H |grep |
+ | # nvme id-ctrl /dev/nvme0 -H | grep -E 'Format |Crypto Erase|Sanitize' |
+ | 出力例: |
||
− | Example output: |
||
{{bc| |
{{bc| |
||
136行目: | 138行目: | ||
}} |
}} |
||
− | + | そして、[[#Format コマンド|format]] か [[#Sanitize コマンド|sanitize]] のどちらかに進んでください。 |
|
− | === Format |
+ | === Format コマンド === |
+ | Format コマンドは、概念的には [[hdparm]] と [[fdisk]] を組み合わせたものに近いです。ドライブの低レベルなパラメータを設定でき、''さらに'' Secure Erase コマンドも送信できます。 |
||
− | The Format command is conceptually closer to a mix of [[hdparm]] and [[fdisk]], as it allows to set low-level parameters for the drive ''and'' additionally to send a secure erase command. |
||
− | {{man|1|nvme-format}} |
+ | {{man|1|nvme-format}} には、Secure Erase Settings ({{ic|-s}}/{{ic|--ses}}) のオプションに関する以下の詳細が書かれています: |
+ | :''Secure Erase Settings: このフィールドは、フォーマットの一部として Secure Erase を行うかどうかや、Secure Erase 操作の種類を指定します。消去は、データの場所に関わらず、全ユーザデータに適用されます (例: 公開されている LBA 内、キャッシュ内、割り当て解除された LBA 内など)。デフォルトは 0 です。'' |
||
− | :''Secure Erase Settings: This field specifies whether a secure erase should be performed as part of the format and the type of the secure erase operation. The erase applies to all user data, regardless of location (e.g., within an exposed LBA, within a cache, within deallocated LBAs, etc). Defaults to 0.'' |
||
+ | 利用可能な値: |
||
− | Possible values : |
||
{| class="wikitable" |
{| class="wikitable" |
||
|- |
|- |
||
− | ! |
+ | ! 値 |
+ | ! 定義 |
||
− | ! Definitions |
||
|- |
|- |
||
| 0 |
| 0 |
||
+ | | Secure Erase 操作を要求しない |
||
− | | No secure erase operation requested |
||
|- |
|- |
||
| 1 |
| 1 |
||
+ | | User Data Erase: 全ユーザデータを削除する。削除後のユーザデータの内容は未確定です (例えば、ユーザデータは 0 や 1 などで埋められているかもしれません)。User Data Erase が要求された時、全ユーザデータが暗号化されている場合、コントローラは Cryptographic Erase を行う場合があります。 |
||
− | | User Data Erase: All user data shall be erased, contents of the user data after the erase is indeterminate (e.g., the user data may be zero filled, one filled, etc). The controller may perform a cryptographic erase when a User Data Erase is requested if all user data is encrypted. |
||
|- |
|- |
||
| 2 |
| 2 |
||
+ | | Cryptographic Erase: 全ユーザデータは、暗号を用いて消去されます。最後に暗号化キーを消去して完了します。 |
||
− | | Cryptographic Erase: All user data shall be erased cryptographically. This is accomplished by deleting the encryption key. |
||
|} |
|} |
||
− | + | 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にフォーマットするには: |
||
− | For example, to format {{ic|/dev/nvme0}} with a crypto erase to namespace 1: |
||
− | # nvme format /dev/nvme0 - |
+ | # nvme format /dev/nvme0 -s 2 -n 1 |
+ | 全ての名前空間をフォーマットするには {{ic|-n 0xffffffff}} オプションを使用してください。 |
||
− | See {{man|1|nvme-format}} for more information and important warnings regarding device/namespace selection. |
||
+ | 詳細やデバイス/名前空間の選択に関する重要な警告については {{man|1|nvme-format}} を参照してください。 |
||
− | === Sanitize command === |
||
+ | === Sanitize コマンド === |
||
− | The Sanitize command was created to be "functionally equivalent to the command of the same name in SATA and SAS implementations"[https://nvmexpress.org/changes-in-nvme-revision-1-3/]. From the aforementionned article[https://nvmexpress.org/open-source-nvme-management-utility-nvme-command-line-interface-nvme-cli/]: |
||
+ | 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/]: |
||
− | :''"According to the [https://nvmexpress.org/wp-content/uploads/NVM-Express-1_4-2019.06.10-Ratified.pdf NVMe 1.4 specification], “''a sanitize operation alters all user data in the NVM subsystem such that recovery of any previous user data from any cache, the non-volatile media, or any Controller Memory Buffer is not possible.” |
||
− | :''The big difference between Sanitize and Format is that sanitize ensures caches are deleted, and the process starts again after an unexpected power loss. Sanitize also supports a pattern overwrite for a secure erase operation, which is terrible for NAND endurance but can be used with other types of storage and memory classes, or for more certainty that user data cannot be recovered."'' |
||
+ | :「[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 から以前のユーザデータを復元できないようにします。」 |
||
− | Usage and possible values for the {{ic|-a/--sanact}} options are[https://github.com/linux-nvme/nvme-cli/blob/master/Documentation/nvme-sanitize.txt#L64-L71]: |
||
+ | :Sanitize と Format の大きな違いは、Sanitize はキャッシュが削除されることを保証し、予期せぬ電源断後にもプロセスが再び開始されることです。Sanitize は、Secure Erase 操作のためのパターン上書きもサポートしています。これは、NAND の耐久性にとってはひどいものですが、他のタイプのストレージやメモリクラスに使用できますし、ユーザデータを復元できないことをより確実にできます。」 |
||
+ | {{ic|-a/--sanact}} オプションの使用法と利用可能な値は {{man|1|nvme-sanitize}} で説明されています。 |
||
− | {{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|The binary values need to be replaced by their decimal counterparts in the commands, e.g. {{ic|1=000b = 0}}, {{ic|1=001b = 1}}, {{ic|1=010b = 2}}... {{ic|1=111b = 7}}.}} |
||
+ | 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] で定義されている通り): |
||
− | See {{man|1|nvme-sanitize}} for more informations. |
||
+ | :「User Data Erase: 全ユーザデータを削除する。削除後のユーザデータの内容は非決定的です (例えば、ユーザデータは 0 や 1 などで埋められているかもしれません)。User Data Erase が要求された時、全ユーザデータが暗号化されている場合、コントローラは Cryptographic Erase を行う場合があります。」 |
||
− | {{Tip|[https://nvmexpress.org/wp-content/uploads/Image-8.png This figure] from the aforementioned article (and taken from the spec) contains a more legible presentation of the various Sanitize Actions (SANACT, last row) than the man page.}} |
||
+ | :Cryptographic Erase: 全ユーザデータは、暗号を用いて消去されます。これは、暗号化キーを消去することで達成されます。 |
||
+ | :… |
||
+ | :Block Erase sanitize 操作は、メディア固有の低レベルなブロック消去法を用いて、ユーザデータが保存されている可能性のある NVM サブシステム内のメディア上のすべての場所において、ユーザデータを書き換えます。 |
||
+ | :Crypto Erase sanitize 操作は、ユーザデータが保存されている可能性のある NVM サブシステム内のメディア上のすべての場所において、メディアの暗号化キーを変更することにより、ユーザデータを書き換えます…」 |
||
+ | (サポートされていれば) あなたのドライブに対して様々な手法がどれくらいの時間を要するのか推定を得ることができます: |
||
− | You can get an estimation of the time the various methods would take on your drive (if supported): |
||
− | {{ |
+ | {{hc|# nvme sanitize-log /dev/nvme0| |
... |
... |
||
Estimated Time For Overwrite : 4294967295 (No time period reported) |
Estimated Time For Overwrite : 4294967295 (No time period reported) |
||
206行目: | 201行目: | ||
}} |
}} |
||
+ | もし、以下のような結果になる場合: |
||
− | If instead you get a result such as: |
||
− | {{ |
+ | {{hc|# nvme sanitize-log /dev/nvme0| |
... |
... |
||
Estimated Time For Overwrite : 4294967295 (No time period reported) |
Estimated Time For Overwrite : 4294967295 (No time period reported) |
||
215行目: | 210行目: | ||
}} |
}} |
||
+ | 操作が完了するまでに'''長い時間が掛かる'''ことを確認してください。比較として、Intel 660p 512GB においては 1 回の Block Erase がこれらの結果を得るまでに約 2~3 時間かかりました。 |
||
− | Then be sure that the operation '''will''' take a long time to complete. For reference, a Block Erase took around 2-3 hours to complete on the Intel 660p 512GB reporting those results. |
||
− | {{Warning| |
+ | {{Warning|一度始めると、再起動してもこの操作を中断することはできず、プロセスが完了するまでドライブは利用不可能になります。これには、[https://github.com/linux-nvme/nvme-cli/issues/752#issuecomment-647821283 長い時間]がかかります。}} |
− | + | Crypto Erase sanitize 操作を始めるには: |
|
− | # nvme sanitize ''device'' -- |
+ | # nvme sanitize ''device'' -a start-crypto-erase |
− | {{Note| |
+ | {{Note|{{ic|''device''}} パラメータは必須の NVMe キャラクタデバイス (例: {{ic|/dev/nvme0}}。{{ic|/dev/nvme0n1}} '''ではありません''') で、この操作は'''デバイス全体'''に適用されます。}} |
− | + | Block Erase の場合は: |
|
− | # nvme sanitize ''device'' -a |
+ | # nvme sanitize ''device'' -a start-block-erase |
− | {{Warning| |
+ | {{Warning|あなたのドライブでサポートされているとしても、''Overwrite'' アクションを使うことは避けてください。これは、「[https://nvmedeveloperdays.com/English/Collaterals/Proceedings/2018/20181204_PRECON2_Hands.pdf 耐久性の問題により NAND ベースの SSD にとっては良くなく、推奨されません]{{Dead link|2024|01|13|status=410}}」。}} |
+ | Sanitize ログにより、処理内容を追うことができます: |
||
− | You can follow the progress with the Sanitize Log: |
||
# nvme sanitize-log /dev/nvme0 |
# nvme sanitize-log /dev/nvme0 |
||
+ | ドライブを Crypto Erase している場合の出力例: |
||
− | Example output for a drive with a Crypto Erase in progress: |
||
{{bc| |
{{bc| |
||
265行目: | 260行目: | ||
== blkdiscard による一般的な方法 == |
== blkdiscard による一般的な方法 == |
||
− | {{Pkg|util-linux}} パッケージの {{man|8|blkdiscard}} コマンドは {{ic|--secure}} オプションを提供します。このオプションは、「''セキュアな消去を行います。セキュアな消去は、ガベージコレクションによって作成された可能性のある消去ブロックのコピーもすべて削除されることを除いて、通常の消去と同じです。セキュアな消去はデバイスのサポートを必要とします。''」 |
+ | {{Pkg|util-linux}} パッケージの {{man|8|blkdiscard}} コマンドは {{ic|--secure}} オプションを提供します。このオプションは、「''セキュアな消去を行います。セキュアな消去は、ガベージコレクションによって作成された可能性のある消去ブロックのコピーもすべて削除されることを除いて、通常の消去と同じです。セキュアな消去はデバイスのサポートを必要とします。''」 |
このコマンドを使うには、以下を実行してください: |
このコマンドを使うには、以下を実行してください: |
||
285行目: | 280行目: | ||
* [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://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] |
* [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}} |
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