Solid state drive (Русский)/Memory cell clearing (Русский)

From ArchWiki
Состояние перевода: На этой странице представлен перевод статьи Solid state drive/Memory cell clearing. Дата последней синхронизации: 22 октября 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Можно полностью сбросить ячейки SSD до начального состояния, восстановив таким образом заводскую производительность записи. Известно, что производительность записи со временем снижается даже на SSD со встроенной поддержкой TRIM: он работает только при удалении файлов, но не при замене, например, инкрементном сохранении.

Выполнение Secure Erase не исправит износ ячеек SSD: если накопитель близок к концу своего срока службы — возможно, сброс ещё немного продлит ему жизнь, но вскоре он всё равно перестанет работать.

Важно:
  • Перед продолжением работы создайте резервную копию всех важных данных! Эта процедура уничтожит все данные на SSD, и их не получится восстановить даже в сервисе! После выполнения сброса будет необходимо заново создать разделы на диске и скопировать на него нужные данные.
  • Не выполняйте эту процедуру, если целевой диск не подключен напрямую к интерфейсу SATA/NVMe. Выполнение команды Secure Erase/Format/Sanitize на диске, подключенном через USB или карту SAS/RAID, может привести к поломке диска!

Диск SATA

Примечание: Следующая информация взята с официальной вики-страницы ATA.

Шаг 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» можно следующим образом:

  1. Перезагрузитесь в BIOS Dell, нажав F2 при запуске.
  2. В BIOS установите пароль внутреннего жёсткого диска (будьте осторожны, раскладка клавиатуры en_US / qwerty).
  3. Примените изменения и перезагрузитесь.
  4. Когда Dell Security Manager запросит пароль, нажмите Escape, а не вводите его. Диск останется заблокированным, но не в состоянии «frozen».
  5. Пропустите шаг 2 и перейдите непосредственно к шагу 3 ниже.
Примечание: Если вы используете Lenovo и не можете избавиться от состояния «frozen» (например, планшеты Lenovo используют SSD на интерфейсе M.2), вы можете использовать проприетарный инструмент для очистки ячеек памяти, а не следовать этой статье. Смотрите также: https://superuser.com/questions/763642/secure-erase-ssd-on-lenovo-thinkpad-t520-cant-unfreeze-ssd-machine-reboots-on

Шаг 2 - Включение защиты путём установки пароля пользователя

Примечание: После установки пароля диск будет заблокирован при следующем подключении питания, и для его разблокировки потребуется ввод правильного пароля.
Важно: Не перезагружайте компьютер после этого шага, особенно если у вас ноутбук Lenovo. Некоторые версии BIOS от Lenovo используют нестандартный алгоритм получения ключа из пароля. После запуска компьютер не сможет подключить SSD-накопитель.[1]

Можно использовать любой пароль, так как он всё равно будет временным. После выполнения 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).

Совет: Этот рисунок из вышеупомянутой статьи (и взятый из спецификации) содержит более разборчивое представление различных действий Sanitize (SANACT, последний ряд), чем в man-странице.

Разница между 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
Важно: Избегайте использования действия Overwrite, даже если оно поддерживается вашим устройством, так как оно «не рекомендуется для SSD на основе NAND из-за износа».

За ходом выполнения можно следить в 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 или переустановки загрузчика.

Смотрите также