Solid state drive (Русский)/Memory cell clearing (Русский)
Можно полностью сбросить ячейки SSD до начального состояния, восстановив таким образом заводскую производительность записи. Известно, что производительность записи со временем снижается даже на SSD со встроенной поддержкой TRIM: он работает только при удалении файлов, но не при замене, например, инкрементном сохранении.
Выполнение Secure Erase не исправит износ ячеек SSD: если накопитель близок к концу своего срока службы — возможно, сброс ещё немного продлит ему жизнь, но вскоре он всё равно перестанет работать.
- Перед продолжением работы создайте резервную копию всех важных данных! Эта процедура уничтожит все данные на SSD, и их не получится восстановить даже в сервисе! После выполнения сброса будет необходимо заново создать разделы на диске и скопировать на него нужные данные.
- Не выполняйте эту процедуру, если целевой диск не подключен напрямую к интерфейсу SATA/NVMe. Выполнение команды Secure Erase/Format/Sanitize на диске, подключенном через USB или карту SAS/RAID, может привести к поломке диска!
Диск SATA
Шаг 1 - Убедитесь, что диск не в состоянии "frozen"
Выполните следующую команду:
# hdparm -I /dev/sdX | grep frozen
В разделе «Security» должна быть строка «not frozen». Если там написано «frozen», то вы не сможете продолжить. Прошивки некоторых материнских плат отправляют команду «security freeze» SATA-устройствам при инициализации.
Возможное решение — просто перейти в ждущий режим. После возвращения из него состояние «frozen» скорее всего будет снято. Если это не поможет, можно попробовать на лету переподключить дата-кабель (однако ядро может упасть от такого). Если при переподключении дата-кабеля ядро падает, дайте операционной системе полностью загрузиться и быстро (пере)подключите и дата-кабель, и кабель питания. Если даже так ядро всё равно падает, проверьте, включен ли в настройках BIOS режим AHCI (он допускает подключение устройств на лету). Можно также использовать USB-SATA адаптер, если он поддерживает горячее подключение. Можно использовать hdparm через USB.
Системы Dell
На системах Dell обойти состояние «frozen» можно следующим образом:
- Перезагрузитесь в BIOS Dell, нажав F2 при запуске.
- В BIOS установите пароль внутреннего жёсткого диска (будьте осторожны, раскладка клавиатуры en_US / qwerty).
- Примените изменения и перезагрузитесь.
- Когда Dell Security Manager запросит пароль, нажмите Escape, а не вводите его. Диск останется заблокированным, но не в состоянии «frozen».
- Пропустите шаг 2 и перейдите непосредственно к шагу 3 ниже.
Шаг 2 - Включение защиты путём установки пароля пользователя
Можно использовать любой пароль, так как он всё равно будет временным. После выполнения Secure Erase защита будет снята и пароль больше не понадобится. В данном примере используется пароль 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
В выводе команды в разделе «Master password» должна быть строка «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, «улучшенное» стирание (Enhanced Security Erase, --security-erase-enhanced
) выполняет более тщательное стирание. Если расчётное время завершения для обеих команд одинаково, это указывает на то, что производитель диска использует одну и ту же функцию стирания для обеих команд. Короткое время (например, 2 минуты), в свою очередь, указывает на то, что устройство является самошифрующимся и его функция BIOS просто стирает внутренний ключ шифрования вместо перезаписи всех ячеек данных.[2]
- Трижды проверьте, что вы указали путь к правильному диску. После выполнения команды обратного пути не будет. Вас предупредили.
- Убедитесь, что диск не примонтирован во время выполнения этой команды. Если команда стирания будет выполнена, когда устройство примонтировано, оно не сотрётся должным образом.
# hdparm --user-master u --security-erase PasSWorD /dev/sdX
Дождитесь завершения выполнения команды. В данном примере показано, что для твердотельного накопителя Intel X25-M 80GB это заняло около 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
В выводе команды в разделе «Master password» должна быть строка «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 не используют протокол SATA и не могут быть очищены описанным выше способом, спецификация NVMe определяет стандартизированный способ очистки дисков NVMe. Первоначально эту возможность предоставляла команда nvme-format(1) (часть nvme-cli), но в Specification 1.3 добавлена поддержка специальной команды nvme-sanitize(1). По словам Джонмайкла Хэндса, сопредседателя NVMe MWG, старшего специалиста по стратегическому планированию / менеджера по продукции, Intel[3]:
- «Эти команды используются для безопасного стирания пользовательских данных с устройства. Это может использоваться при установке нового устройства, выводе из эксплуатации или окончании его срока службы, нового применения SSD и так далее. Команда Sanitize была введена в спецификации NVMe 1.3, поэтому до неё для безопасного стирания использовался исключительно 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)
Затем выполните команду Format или Sanitize.
Команда Format
Команда Format концептуально ближе к смеси hdparm и fdisk, поскольку позволяет задать низкоуровневые параметры диска и дополнительно отправить команду Secure Erase.
nvme-format(1) даёт следующие сведения о параметре Secure Erase Settings (-s <ses>, --ses=<ses>
):
- Secure Erase Settings: В этом поле указывается, должно ли выполниться безопасное стирание как часть форматирования, а также тип операции безопасного стирания. Стирание применяется ко всем пользовательским данным, независимо от их расположения (например, внутри открытого LBA, внутри кэша, внутри деаллоцированных LBA и т. д.). По умолчанию равно 0.
Возможные значения:
Значение | Описание |
---|---|
0 | Безопасное стирание не запрашивается |
1 | Стирание пользовательских данных (User Data 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)
установлены в ноль, что, согласно спецификации, означает, что «контроллер поддерживает форматирование пространств имён по отдельности» (смотрите рисунок 249 byte row 524 «Format NVM Attributes (FNA)»).
Например, чтобы выполнить форматирование с криптографическим стиранием в пространстве имён 1 на устройстве /dev/nvme0
:
# nvme format /dev/nvme0 -s 2 -n 1
Более подробная информация, а также важные предупреждения касательно выбора устройства/пространства имён есть в nvme-format(1).
Команда Sanitize
Команда Sanitize была создана, чтобы быть «функционально эквивалентной одноимённой команде в реализациях SATA и SAS»[4]. Из вышеупомянутой статьи[5]:
- «Согласно спецификации NVMe 1.4, „операция sanitize изменяет все пользовательские данные в подсистеме NVM таким образом, что восстановление любых предыдущих пользовательских данных из кэша, энергонезависимого носителя или буфера памяти контроллера становится невозможным“.
- Основная разница между Sanitize и Format заключается в том, что Sanitize обеспечивает удаление кэша, и процесс начинается заново после неожиданного отключения питания. Sanitize также поддерживает перезапись шаблона для безопасного стирания, что ужасно для 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
000b = 0
, 001b = 1
, 010b = 2
... 111b = 7
.Дополнительная информация есть в nvme-sanitize(1).
Разница между Block Erase и Crypto Erase заключается в том, что Crypto Erase стирает только ключ шифрования (как определено в спецификации NVMe 1.4):
- «Стирание пользовательских данных (User Data Erase): Все пользовательские данные должны быть стёрты, содержимое пользовательских данных после стирания не определено (например, данные могут быть заполнены нулями, единицами и т.д.). Контроллер может выполнить криптографическое стирание, когда запрашивается стирание пользовательских данных, если они были зашифрованы.
- Криптографическое стирание (Cryptographic Erase): Все пользовательские данные должны быть стёрты криптографически. Это достигается путём удаления ключа шифрования.
- …
- Блочное стирание (Block Erase) изменяет пользовательские данные с помощью низкоуровневого метода стирания блоков, специфичного для носителя, во всех местах носителя в подсистеме NVM, в которых могут храниться пользовательские данные;
- Криптографическое стирание (Crypto Erase) изменяет пользовательские данные путём изменения ключей шифрования во всех местах носителя в подсистеме 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 512 ГБ выполнение Block Erase заняло около 2-3 часов.
Запуск Crypto Erase:
# nvme sanitize устройство -a 4
устройство
нужно указать символьное устройство NVMe, а не пространство имён (например, /dev/nvme0
, а не /dev/nvme0n1
), поскольку операция применима только к устройству целиком.Запуск Block Erase:
# nvme sanitize устройство -a 2
За ходом выполнения можно следить в Sanitize Log:
# 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
После успешного завершения команды:
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
Команда blkdiscard(8) из пакета util-linux предлагает опцию --secure
, которая выполняет «Secure discard. Он аналогичен обычному discard, за исключением того, что все копии сбрасываемых блоков, которые могли быть созданы сборщиком мусора, также должны быть стёрты. Это требует поддержки со стороны устройства».
Чтобы воспользоваться ею, выполните:
# blkdiscard --secure /dev/устройство
Для устройств, не поддерживающих безопасное стирание, можно использовать опцию -z
/--zeroout
, которая заполняет устройство нулями вместо того, чтобы просто cбрасывать все блоки на устройстве по умолчанию.
Обсуждение общей безопасности blkdiscard можно посмотреть здесь [7]; иллюстрация стирания томов с помощью blkdiscard есть здесь [8].
Решение проблем
Загрузочные записи UEFI удаляются после очистки диска
Некоторые реализации UEFI во время загрузки системы удаляют загрузочные записи, ссылающиеся на несуществующие файлы. Если вы планируете восстановить систему из резервной копии после очистки ячеек памяти, не забудьте также восстановить загрузочную запись с помощью efibootmgr или переустановки загрузчика.
Смотрите также
- Secure Erase HDDs/SSDs (SATA/NVMe) using hdparm & nvme-cli on Linux (2019): хорошее руководство с изображениями
- Verifying SSD Sanitization