Стереть SSD надёжно: почему обнуление работает не так, как на HDD
Если вы когда-то списывали сервер или отдавали диск в утиль, вы наверняка помните привычный ритуал для HDD: прогнать dd if=/dev/zero пару раз, и можно спать спокойно. С SSD этот же ритуал даёт ложное чувство безопасности — часть данных физически может остаться на чипах памяти даже после многократной перезаписи всего видимого объёма диска. Причина в том, как SSD вообще устроен внутри, и разбираться в ней стоит один раз, чтобы потом не гадать, действительно ли диск, который вы отдаёте вместе с сервером или сдаёте в утилизацию, чист.
Содержание
- Почему перезапись логического адреса не значит перезапись физической ячейки
- TRIM и garbage collection: почему они не решают задачу стирания
- Почему многократная перезапись как для HDD не работает — и вредит SSD
- Штатное решение: команды безопасного стирания на уровне самого накопителя
- Практический план для сервера перед передачей или списанием диска
- Когда штатного стирания недостаточно: шифрование заранее и физическое уничтожение
Почему перезапись логического адреса не значит перезапись физической ячейки
На HDD всё просто: логический адрес блока (LBA) почти всегда соответствует одному и тому же физическому месту на магнитной пластине. Записали новые данные по тому же LBA — старые данные физически затёрты новыми магнитными доменами на том же участке диска. Отсюда и работали классические методы гарантированного стирания HDD: несколько проходов перезаписи гарантированно перекрывали именно те физические сектора, где лежали исходные данные.
На SSD между операционной системой и физическими ячейками NAND-флеш стоит FTL (Flash Translation Layer) — слой прошивки контроллера, который держит таблицу соответствия логических адресов физическим блокам и постоянно её меняет. Об этом же слое подробно рассказано в разборе про wear leveling: контроллер намеренно не пишет новые данные поверх тех же физических ячеек, а перекладывает их в наименее изношенные свободные блоки, чтобы равномерно распределить ресурс записи по всему чипу. Это защищает диск от преждевременного износа — но именно это же превращает наивную перезапись в ненадёжный способ удаления.
Когда вы «перезаписываете» файл на SSD, происходит следующее:
- ОС отправляет запись по тому же логическому адресу, что и раньше;
- FTL находит для этой записи новый, менее изношенный физический блок;
- данные пишутся в новое физическое место;
- старый физический блок с прежним содержимым помечается как «логически невалидный», но сами биты в NAND-ячейках остаются нетронутыми — они физически лежат там до момента, пока контроллер не решит стереть этот блок в рамках сборки мусора (garbage collection).
То есть между «файл перезаписан с точки зрения ОС» и «старые данные физически стёрты с чипа» может пройти сколько угодно времени — от секунд до недель, в зависимости от загрузки диска и алгоритма прошивки. Всё это время исходные данные потенциально читаются напрямую с NAND, если есть доступ к чипам в обход контроллера.
TRIM и garbage collection: почему они не решают задачу стирания
TRIM (на NVMe — команда Deallocate, на практике часто называемая тем же словом) сообщает контроллеру, какие логические блоки больше не содержат нужных данных, и их можно освобождать заранее, не дожидаясь новой записи по этому же адресу. Это заметно ускоряет будущие записи и снижает write amplification — тема отдельного разбора: write amplification: почему SSD пишет больше, чем вы ему отдали.
Но у TRIM есть принципиальные ограничения именно как у инструмента гарантированного удаления:
- TRIM асинхронен. Он помечает блок как свободный, но физическое стирание NAND-ячеек контроллер выполняет по собственному расписанию — когда ему это удобно с точки зрения garbage collection, а не сразу по команде.
- TRIM не гарантирован программно. Поддержка зависит от файловой системы, режима подключения диска, слоя виртуализации и RAID-контроллера — часть конфигураций (например, некоторые аппаратные RAID) TRIM попросту не пробрасывают дальше, и подробнее об этом есть отдельный разбор: что происходит с SSD, когда о TRIM забыли.
- Резервная область недоступна операционной системе. У любого SSD есть spare area — блоки, зарезервированные контроллером под ротацию и не видимые пользователю напрямую. Даже идеальный TRIM по всему видимому объёму не гарантирует, что старые копии данных не осели именно там в процессе прошлых циклов wear leveling.
- Кеш и промежуточные буферы. Часть контроллеров использует небольшую SLC-кеш-область для ускорения записи «на лету», и данные могут какое-то время физически существовать в двух местах — в кеше и в основном массиве TLC/QLC — прежде чем кеш освободится.
Вывод простой: TRIM — отличный механизм для производительности и здоровья диска, но он не проектировался как гарантия безопасного удаления и не даёт такой гарантии сам по себе.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверПочему многократная перезапись как для HDD не работает — и вредит SSD
Классические методы гарантированного стирания HDD (несколько проходов случайными паттернами, известные по старым военным и государственным стандартам) исходили из физики магнитной записи и адресации «один LBA — одно физическое место». На SSD оба этих допущения не работают:
- Перезапись LBA не бьёт по тем же физическим ячейкам — из-за FTL и wear leveling, как описано выше, старые данные могут физически пережить десятки «перезаписей» того же логического адреса.
- Резервная область и переразмеченные блоки вообще не адресуются напрямую — многократная перезапись видимого пользователю объёма диска физически не затрагивает spare area и блоки, выведенные из ротации как «слабые», но ещё хранящие старые данные.
- Каждый лишний проход перезаписи — это реальный расход ресурса записи (TBW/DWPD), который у SSD ограничен физически — подробнее в материале про ресурс SSD и TBW. Несколько проходов «стирания по-старому» на SSD не увеличивают надёжность удаления, зато ощутимо приближают диск к исчерпанию ресурса — двойной проигрыш.
Ниже — сравнение, почему подход, который был правильным для HDD, для SSD не переносится один в один.
| Параметр | HDD | SSD |
|---|---|---|
| Соответствие LBA физическому месту | Прямое и стабильное | Меняется контроллером через FTL |
| Что реально стирает перезапись | Ровно те физические секторы, куда шла запись | Новый физический блок; старый может остаться нетронутым |
| Резервная область | Практически отсутствует | Есть всегда (spare area), не адресуется напрямую |
| Эффект многопроходной перезаписи | Надёжно перекрывает старые данные | Не гарантирует стирание старых физических ячеек |
| Побочный эффект многопроходной перезаписи | Износ незначителен | Реальный расход ресурса записи (TBW) |
Штатное решение: команды безопасного стирания на уровне самого накопителя
Правильный инструмент для SSD — не перезапись через файловую систему, а команда, которая выполняется прошивкой самого контроллера и работает на уровне, недоступном обычной записи данных. Смысл в том, что стирание инициируете вы, а физически его выполняет контроллер, у которого есть доступ ко всем блокам диска — включая резервную область и переразмеченные ячейки, которые операционная система вообще не видит.
Для этого производители дисков предусмотрели штатные команды, стандартизированные на уровне интерфейса накопителя:
- Для SATA-дисков — ATA Secure Erase. Команда, встроенная в стандарт ATA, инициирует полный сброс всех пользовательских блоков на уровне контроллера. Есть режим Enhanced Secure Erase — на дисках, которые его поддерживают, он в дополнение к обычному сбросу перезаписывает ячейки заданным паттерном на уровне прошивки.
- Для NVMe-дисков — команда Format с указанием режима стирания (Secure Erase Settings) и отдельная команда Sanitize. Format с соответствующим параметром запускает либо криптографическое стирание (см. ниже), либо блочное стирание пользовательских данных силами контроллера. Sanitize — более строгая операция, которая по спецификации NVMe должна гарантированно затронуть и восстановленные (переразмеченные) блоки, а не только текущую активную область.
- Криптографическое стирание (crypto erase / cryptographic erase). Если диск умеет шифровать данные на лету (self-encrying drive, SED) собственным внутренним ключом, «стирание» может свестись к уничтожению этого ключа контроллером — тогда все ранее записанные данные мгновенно становятся нечитаемым шифротекстом без него, физически ничего не перезаписывая. Это самый быстрый вариант из штатных, но он полагается на то, что реализация шифрования в прошивке действительно надёжна, а сам ключ контроллер не хранил где-то ещё в открытом виде.
Общий принцип у всех этих команд один: стирание выполняет тот же контроллер, что управляет wear leveling и знает реальную физическую карту диска — а не операционная система, которая видит только логические адреса. Именно поэтому такие команды и дают гарантию, которую не даёт перезапись через dd или аналогичные утилиты уровня файловой системы.
Практический план для сервера перед передачей или списанием диска
Если вы администрируете арендованный или собственный сервер и диск подлежит замене, возврату провайдеру или утилизации, порядок действий обычно такой.
Сначала определите тип накопителя и доступный инструментарий:
lsblk -d -o NAME,ROTA,MODEL
Поле ROTA со значением 0 означает твердотельный диск (SSD/NVMe), 1 — механический (HDD).
Для NVMe-дисков используется nvme-cli:
nvme id-ctrl /dev/nvme0 | grep -i sanitize
nvme sanitize /dev/nvme0 --sanact=1
nvme sanitize-log /dev/nvme0
Первая команда покажет, какие режимы санитизации вообще поддерживает конкретная модель — набор возможностей у разных контроллеров различается, и не все диски поддерживают все режимы. Вторая запускает операцию (конкретные значения sanact зависят от прошивки — сверяйтесь с документацией на модель), третья позволяет отслеживать прогресс, поскольку полное стирание может занимать заметное время в зависимости от объёма и модели диска.
Для SATA SSD — hdparm:
hdparm -I /dev/sda | grep -i security
hdparm --user-master u --security-set-pass p4ss /dev/sda
hdparm --user-master u --security-erase p4ss /dev/sda
Первая команда покажет, поддерживает ли диск Secure Erase и не заблокирован ли он «замороженным» состоянием (frozen) — это частая ловушка: некоторые системы и материнские платы блокируют команду безопасности после старта, и тогда диск нужно физически переподключить (hot-plug или перезагрузка с другого контроллера) перед стиранием.
Отдельный практический совет, который сильно упрощает жизнь: если диск с самого начала эксплуатации был зашифрован (например, через LUKS на Linux), то для гарантированного уничтожения данных перед списанием достаточно надёжно уничтожить ключевой материал шифрования — заголовок LUKS с ключевыми слотами — а не стирать весь массив физически. Это на порядок быстрее полного Sanitize на больших дисках. Как это соотносится с другими сценариями шифрования диска и что именно оно закрывает, разобрано в статье шифрование дисков: что защищает, а что нет.
После стирания стоит выборочно проверить результат — прочитать несколько случайных участков диска низкоуровневой утилитой и убедиться, что данные заменены на предсказуемый паттерн (обычно нули или единицы, в зависимости от режима), а не остались читаемым содержимым.
Когда штатного стирания недостаточно: шифрование заранее и физическое уничтожение
Штатные команды стирания — это индустриальный стандарт для подавляющего большинства сценариев: замена диска, возврат оборудования провайдеру, плановая утилизация. Но для по-настоящему критичных данных — например, при работе с персональными данными под регуляторными требованиями, где нужна не просто уверенность, а доказуемая гарантия уничтожения физического носителя, — практика обычно строже:
- Шифрование диска с первого дня эксплуатации. Если весь массив изначально зашифрован на уровне блочного устройства, у вас всегда остаётся быстрый и надёжный запасной вариант — криптографическое уничтожение ключа, даже если по каким-то причинам штатная команда стирания на конкретном диске недоступна или не сработала. Это не отменяет физическое стирание, а добавляет к нему независимый второй рубеж.
- Физическое уничтожение накопителя. Самый надёжный вариант из всех — механическое разрушение чипов NAND-памяти до состояния, когда считывание данных физически невозможно. В отличие от механических дисков, для SSD не работает размагничивание (degausser) — флеш-память хранит заряд, а не намагниченность, так что этот метод, стандартный для HDD, на SSD просто бесполезен. Для SSD применяют промышленное измельчение (шреддинг) с достаточно мелкой фракцией, чтобы отдельные чипы памяти были физически разрушены, а не просто отделены друг от друга.
- Документальное подтверждение уничтожения. Для регулируемых данных обычно важен не только сам факт стирания, но и акт/сертификат от организации, которая его выполнила — это то, что реально спрашивают при проверке соответствия, а не сам факт «мы что-то стёрли».
Здесь стоит подчеркнуть: для подавляющего большинства серверов и обычных данных штатной команды безопасного стирания на уровне контроллера более чем достаточно, и физическое уничтожение — это не универсальная рекомендация всем подряд, а мера для узкого круга по-настоящему критичных случаев, где цена ошибки несопоставимо выше стоимости замены диска.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Достаточно ли просто удалить файлы и запустить fstrim?
Нет. fstrim инициирует TRIM для уже помеченных как свободные блоков, но не гарантирует немедленное физическое стирание NAND-ячеек и никак не затрагивает резервную область диска — это гигиена производительности, а не средство гарантированного удаления.
Работает ли ATA Secure Erase на всех SATA SSD?
Нет, поддержка и качество реализации зависят от модели и прошивки, а на части систем команда блокируется состоянием frozen до перезагрузки или переподключения диска. Перед тем как полагаться на этот способ, стоит явно проверить hdparm -I и убедиться, что диск не заморожен.
Можно ли перезаписать SSD случайными данными несколько раз, как раньше делали с HDD, для верности?
Можно, но это не даёт дополнительной гарантии по сравнению со штатной командой стирания — а лишний износ реальный. Многопроходная перезапись для SSD — устаревшая практика, перенесённая из мира HDD без учёта FTL и wear leveling.
Если диск неисправен и не отвечает на команды стирания, что делать?
Единственный надёжный вариант в такой ситуации — физическое уничтожение, поскольку программные команды требуют работоспособного контроллера. Полагаться на то, что «неисправный диск и так никто не прочитает», не стоит — механическая неисправность контроллера не мешает чтению чипов NAND напрямую специализированным оборудованием.
Криптографическое стирание (crypto erase) действительно мгновенное?
Операция уничтожения ключа внутри контроллера действительно занимает секунды, в отличие от полного Sanitize, который может идти долго на больших объёмах. Но надёжность в конечном счёте зависит от качества реализации шифрования в конкретной прошивке — это одна из причин, почему для по-настоящему критичных данных полагаются на собственное шифрование (LUKS) поверх диска, а не только на встроенное в контроллер.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →