Как безопасно стереть файлы с SSD диска?
При попытке надежно стереть SSD, у нас есть несколько проблем:
- SSD изнашиваются после ограниченного количества циклов стирания
- SSD имеют контроллер, который динамически отображает LBA (адреса логических блоков, используемые системой для доступа к диску) в ячейки NVRAM (фактические ячейки флэш-памяти), чтобы сбалансировать износ, что означает указание диску перезаписывать блоки, в которых ранее хранилась определенная файл может привести к перезаписи любых других запасных блоков.
- Твердотельные накопители имеют значительный процент резервной емкости, которая используется для компенсации умирающих ячеек хранения и уменьшения износа. Они не видны системе и могут содержать старые фрагменты данных.
Теперь, какие у нас есть возможности изнутри Ubuntu для безопасного стирания SSD?
Я слышал, что некоторые новые твердотельные накопители должны быть в состоянии безопасно стереть себя, но как мне узнать, способен ли мой SSD к этому и как я могу его запустить?
Также должна быть команда безопасного стирания ATA, как мне узнать, поддерживается ли она, и как мне ее вызвать?
Существуют ли способы безопасного удаления только данного файла или только неиспользуемого пространства?
Я предполагаю, что создание резервной копии всех разделов, безопасное удаление всего диска с последующим восстановлением резервной копии было бы возможно, но звучит слишком сложно и займет слишком много времени, чтобы быть практичным. Есть ли другие альтернативы? Если нет, то какие инструменты я могу использовать для резервного копирования разделов без резервного копирования уже удаленных файлов?
Конечно, стандартные инструменты, такие как shred
или же wipe
здесь нельзя использовать для пунктов, описанных выше. Они просто перезаписывают файл (перезаписывая его кластеры файловой системы, которые связаны с LBA, которые не постоянно указывают на одни и те же флэш-ячейки из-за контроллера выравнивания износа).
1 ответ
В настоящее время нет способа безопасно удалить файлы на SSD без стирания содержимого всего диска или доступа к встроенному ПО SSD.
Невозможно узнать, где SSD может хранить предыдущие копии логического блока.
Что еще хуже, из-за механизмов журналирования и копирования при записи файловой системы может оказаться невозможным узнать, какие логические блоки могут содержать предыдущую копию конкретного файла.
Единственный способ предотвратить утечку удаленных файлов кому-либо, имеющему прямой доступ к диску, - это, во-первых, зашифровать их и защитить ключ шифрования от посторонних глаз.
Приложение:
Я провел некоторое исследование и выяснил, что вы можете отсортировать все ранее удаленные файлы, если вам удастся изучить все незанятые сектора файловой системы, что обычно возможно и предлагается некоторыми инструментами файловой системы (например, для семейства ext*).), а затем отбросить их (например, с помощью blkdiscard(8)
как указано в этом ответе на связанный вопрос), который возвращает блоки для сборки мусора до тех пор, пока они не будут снова использованы и перезаписаны в процессе.
Это безопасно для всех, кто не может получить доступ к флеш-ячейкам напрямую, поэтому каждый, кто
- не имеет подходящего устройства чтения флэш-ячейки и
- не может убедить встроенное ПО привода раскрыть содержимое неназначенных блоков (что в большинстве случаев потребовало бы значительного изменения встроенного ПО и пользовательских команд ATA, поскольку не существует стандартизированного способа).
Предупреждение. Если это еще не ясно, безопасное удаление диска удалит все данные на диске и сделает невозможным его восстановление. Вы должны сделать резервную копию всей важной информации.
Самый простой способ определить, поддерживает ли ваш диск безопасное стирание, это задать его: я использовал /dev/sdX в приведенных ниже примерах. Вам нужно будет тщательно изменить его, чтобы он соответствовал устройству, с которым вы работаете:
Источники:
https://ata.wiki.kernel.org/index.php/ATA_Secure_Erase
https://superuser.com/questions/1161531/how-to-un-freeze-drive-in-linux
$ sudo hdparm -I /dev/sdX | grep -i erase
На моем SSD это приводит к:
supported: enhanced erase
2min for SECURITY ERASE UNIT. 2min for ENHANCED SECURITY ERASE UNIT.
Если ваше устройство поддерживает безопасное стирание, запуск выполняется в 2 или 3 этапа.
- Если устройство сообщает, что оно заморожено, как указано выводом из
sudo hdparm -I /dev/sdX
похож на это:
not enabled not locked frozen not expired: security count supported: enhanced erase
Разморозьте его, приостановив и возобновив работу вашей системы. Я сделал это с командой sudo systemctl suspend
перемещать указатель, пока система не возобновит работу.
Вы должны установить пароль, чтобы использовать безопасное стирание. В этом случае я использую foobar в качестве пароля, вы можете использовать любой непустой пароль, который вам нравится, поскольку он временный.
sudo hdparm --user-master u --security-set-pass foobar /dev/sdX
С установленным паролем вы можете теперь использовать его для безопасного стирания диска:
sudo hdparm --user-master u --security-erase foobar /dev/sdX
Если ваш накопитель поддерживает его и вы этого хотите, вы можете использовать вместо него усиленное стирание с помощью:
sudo hdparm --user-master u --security-erase-enhanced foobar /dev/sdX