Zum vollständigen Löschen bzw. Zurücksetzen von SSDs ist ein Secure Erase notwendig. Bei modernen NVMe-SSDs unterscheidet sich das Löschen von den früheren SATA-SSDs. Hier kommt das „NVMe storage command line interface utility“ zum Einsatz, oder kurz „nvme-cli“.
Zum Löschen der SSD kann der „nvme format“ Befehl verwendet werden. Es sind zwei unterschiedliche Arten der Formatierung möglich: User Data Erase und Cryptographic Erase.
Darüber hinaus wurde ab der NVMe-1.3-Spezifikation noch der Befehl „nvme sanitize“ eingeführt. Der Unterschied zu „nvme format“ wurde von Jonmichael Hands folgendermaßen erklärt:
While both options work, Sanitize is more robust for ensuring the data was properly wiped; format is good for everyday use and testing.
Vorgehen
Zunächst muss das System in Linux gebootet werden. Empfehlen kann ich Ubuntu ab 21.04, denn da ist „nvme-cli“ bereits enthalten. Via
nvme version
könnt ihr prüfen, ob und welche Version installiert ist.
Falls es nicht installiert ist, könnt ihr es unter Debian und Ubuntu folgendermaßen installieren:
sudo apt-get update sudo apt-get install nvme-cli
Im nächsten Schritt können mit
sudo nvme list
alle verbundenen NVMe-Geräte angezeigt werden.
Anschließend kann mit diesem Befehl
sudo nvme id-ctrl /dev/nvmeX -H | grep -E 'Format |Crypto Erase|Sanitize'
alle Infos über die verfügbaren Formatierungsmöglichkeiten der gewählten SSD angezeigt werden. Das „X“ müsst ihr natürlich durch eine Zahl aus der Liste der NVMe-Geräte ersetzen. Bei einer SSD ist dies logischerweise 0.
Je nachdem welche Befehle von eurer SSD unterstützt werden, könnt ihr direkt dort weitermachen.
nvme format
Bei diesem Befehl wird das NVMe-Laufwerk als Parameter mitgegeben. Zudem wird mit der Option „-s“ die Art der Formatierung bestimmt.
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.
Value | Definitions |
---|---|
0 | No secure erase operation requested |
1 | 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 | Cryptographic Erase: All user data shall be erased cryptographically. This is accomplished by deleting the encryption key. |
Sofern die SSD einen „Cryptographic Erase“ unterstützt, wird dieser auch bei Variante 1 durchgeführt. „-n 0xffffffff“ sorgt dafür, dass alle Namespaces formatiert werden.
sudo nvme format /dev/nvme0 -s 1 -n 0xffffffff
Variante 2 führt direkt einen „Cryptographic Erase“ durch, welcher nur wenige Sekunden dauert.
sudo nvme format /dev/nvme0 -s 2 -n 0xffffffff
Weitere Infos findet ihr in der nvme-format Dokumentation.
nvme sanitize
Zu Anfang des Artikels wurde bereits der Unterschied zwischen „nvme sanitize“ und „nvme format“ beschrieben. Nachfolgend nochmal eine detailliertere Erklärung:
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.
Auch bei diesem Befehl wird das NVMe-Laufwerk als Parameter mitgegeben. Die Option „-a“ bestimmt die Art der Formatierung.
Value | Definition |
0x00 | Reserved |
0x01 | exit-failure | Exit Failure Mode |
0x02 | start-block-erase | Start a Block Erase sanitize operation |
0x03 | start-overwrite | Start an Overwrite sanitize operation |
0x04 | start-crypto-erase | Start a Crypto Erase sanitize operation |
Mit diesem Befehl könnt ihr eine grobe Zeitschätzung erhalten, wie lange welcher Befehl dauert, sofern er unterstützt wird. „No time period reported“ bedeutet, dass diese Art der Formatierung nicht unterstützt wird.
sudo nvme sanitize-log /dev/nvme0 ... Estimated Time For Overwrite : 4294967295 (No time period reported) Estimated Time For Block Erase : 228 Estimated Time For Crypto Erase : 30
Ein „Cryptographic Erase“ oder „Block Erase“ ist die sinnvollste Variante. „Overwrite“ sollte nicht benutzt werden, da sich dieser Befehl sehr negativ auf die Haltbarkeit des NAND-Speichers auswirkt.
sudo nvme sanitize /dev/nvme0 -a start-crypto-erase
Weitere Infos findet ihr in der nvme-sanitize Dokumentation.
Quelle
https://wiki.archlinux.org/title/Solid_state_drive/Memory_cell_clearing