|
| Твердотельные носители не рекомендуется использовать для хранения архивов, так как при длительном (от трех месяцев) хранении в обесточенном состоянии сохранность записанных на них данных не гарантируется. Таким образом, защищаемая информация, размещенная на твердотельных носителях, может быть повреждена (искажена), что является нарушением требований информационной безопасности в отношении конфиденциальной информации. |
В данной статье приведены рекомендации по применению твердотельных носителей (SSD-носителей) с учетом их конструктивных особенностей и состояния ПО на момент написания статьи, т.е. весна 2019-го года. Следует всегда помнить, что твердотельный носитель представляет собой нетривиальное сочетание высоких технологий, способов удешевить устройство и маркетинговых хитростей, а носители одного и того же производителя, сделанные в разное время, могут кардинально отличаться друг от друга и по внутренней конструкции и по используемым алгоритмам, даже если имеют формально одинаковую спецификацию.
Те, кто хочет освежить свои знания о том, что такое SSD-носитель, могут ознакомиться с подробной статьёй Википедии.
Для более пристального рассмотрения проблематики можно ознакомиться со старой, но вполне актуальной статьёй Log-структурированные файловые системы — каждому SSD.
Проблемы, которые рассматриваются далее в статье также давно и хорошо известны:
Контроллер FTL носителя самостоятельно выравнивает нагрузку по записи на память, используя имеющееся свободное пространство для размещения данных.
Поэтому для сохранения постоянной скорости записи на SSD-носители, их не рекомендуется заполнять больше чем на 75%. Кроме того, на носителе резервируется область, из которой FTL будет брать блоки для замены повреждённых блоков.
Теоретически, в современных SSD-носителях необходимые области зарезервированы аппаратно, и, например, заявленная ёмкость носителя 120ГБ вместо 128ГБ может означать, что 8ГБ находятся в резерве.
| TRIM — команда внешнего ATA-интерфейса носителя, позволяющая операционной системе сообщить контроллеру SSD-носителя, что некие блоки данных уже не заняты файловыми объектами и могут быть использованы носителем повторно. Утверждается, что при выполнении команды TRIM освобождающиеся блоки стираются (перезаписываются единицами, что является первым шагом в последовательности операций перезаписи блока памяти SSD), при этом злоупотребление командой TRIM повышает количество перезаписей ячеек памяти SSD, что ведёт к снижению его ресурса. Однако гарантировать, что все контроллеры FTL всегда будут работать именно так, вряд ли возможно. |
Проверить, поддерживает ли носитель команду TRIM можно с помощью команды hdparm (возможно, понадобится установить пакет настройки параметров жестких дисков):
| sudo apt install hdparm sudo hdparm -I /dev/sdf | grep TRIM |
Команда TRIM может выполняться в автоматическом режиме (непосредственно при работе с файловой системой), или в режиме offline (когда составляется список свободных блоков дискового раздела, и несколькими командами TRIM передаётся контроллеру носителя). В Linux:
TRIM на NTFS поддерживается только в Windows. |
Команду TRIM можно использовать несколькими способами.
Использовать системную службу fstrim.service/fstrim.timer
| Этот метод недоступен в ОС Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.5) |
Системная служба fstrim.service/fstrim.timer входит в пакет util-linux, который устанавливается автоматически при стандартной установке ОС.
Хотя пакет устанавливается автоматически, служба при этом не устанавливается и не активируется, и её нужно дополнительно установить и активировать. Сделать это можно следующими командами:
В Astra Linux Special Edition РУСБ.10015-01 очередное обновление 1.6 создать юнит службы, скопировав образцы файлов из каталога /usr/share/doc/util-linux/examples/ в каталог /etc/systemd/system:
| sudo cp /usr/share/doc/util-linux/examples/fstrim.service /etc/systemd/system sudo cp /usr/share/doc/util-linux/examples/fstrim.timer /etc/systemd/system |
В Astra Linux Special Edition x.7 юнит службы создается автоматически;
Активировать таймер службы:
| sudo systemctl enable fstrim.timer |
После активации служба будет один раз в неделю (неделя считается общепринятым интервалом для выполнения этой операции для обычных систем) выполнять команду, формирующую списки свободных блоков по всем смонтированным дисковым разделам (опция -a т.е. все смонтированные разделы) и выдавать команду TRIM соответствующим устройствам, эту команду поддерживающим:
| fstrim -av |
Использовать для автоматического запуска команды fstrim службу cron
| Этот вариант применим также и для ОС Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.5) |
например, в файл /etc/crontab добавить строку (выполнение команды fstrim -av в 10 утра по понедельникам):
# m h dom mon dow user command |
Для включения TRIM на дисках LVM следует изменить значение опции issue_discards с 0 на 1 в файле /etc/lvm/lvm.conf.
Включение этой опции передаст команды TRIM на базовый физический том (тома) логических томов, когда логический том больше не использует пространство физических томов (например, при выполнении команд lvremove, lvreduce и т. д.).
(Смотрите lvm.conf (5) и / или вписанные комментарии в /etc/lvm/lvm.conf). Как таковое, по-видимому, не требуется, чтобы работали «обычные» запросы TRIM (удаление файловых объектов внутри файловой системы).
Включение TRIM на дисках dm-crypt выполняется добавлением опции discard в конфигурационный файл /etc/crypttab, например:
# <target name> <source device> <key file> <options> |
| Использование TRIM совместно с dm-crypt считается небезопасным, так как раскрывает информацию о том, какие секторы дискового раздела не используются. |
Дополнительно для сохранения ресурса перезаписи и повышения производительности SSD-носителя можно добавить к параметрам монтирования носителя опцию noatime, отключающую выполнение записи последнего времени доступа при каждом чтении файла.
Однако это может нарушить работу программ, использующих этот атрибут, и считается, что выигрыш от применения этой опции небольшой.
См. также: Съемные носители в Astra Linux.
Как упоминалось выше, все обращения к SSD-носителю обрабатываются его внутренним контроллером FTL, и транслируются по неизвестным нам алгоритмам в неизвестные нам структуры данных.
При этом при "перезаписи" ранее записанной информации контроллер предпочитает записать новую информацию в новый блок (блок с меньшим количеством перезаписей), не затирая ранее записанные данные.
Из этого следует, что
операции перезаписи для удаления конфиденциальной информации (гарантированное удаление данных файловых объектов в Astra Linux Special Edition с помощью многократной перезаписи (опции монтирования secdel и secdelrnd)) при применении на SSD-носителях технически не может гарантировать полное удаление конфиденциальной информации, ранее записанной на SSD-носитель
|
Можно, конечно, попытаться стереть весь носитель, перезаписав всю его доступную ёмкость. Однако, как упоминалось выше, в носителе может быть аппаратно зарезервирована область для ротации данных, недоступная извне носителя, и в этой области могут остаться неперезаписанные копии данных. Аналогично, выполнение операции TRIM не сотрёт копии данных, находящиеся в резервной области. Кроме того, команда fstrim работает только на примонтированных дисковых разделах, и не работает на свободных (незанятых дисковыми разделами) областях носителя, и не работает на непримонтированных дисковых разделах. Т.е. при удалении отмонтированного дискового раздела команда TRIM не будет применена к освободившейся области.
Некоторые носители, поддерживающие команду TRIM, обеспечивают так называемый Deterministic read data after TRIM (DRAT), гарантирующий, что при чтении подвергнутых очистке данных будет возвращено некое предопределённое значение данных (или даже гарантированно нулевые значения - в варианте Deterministic read zero after TRIM (DZAT)). Особо следует отметить, что говоря об свойстве DRAT обычно утверждается, что выдаются нулевые значения. Это нормально для дисковых носителей, однако SSD-носители при подготовке очищают блоки данных не нулями, а единицами, а записав нули снова получим "грязный" блок, что лишает смысла всю операцию TRIM. Детали реализации опять не раскрываются, и контроллер может просто выдавать фиксированные значения для блоков, числящихся свободными, вообще не перезаписывая содержимое этих блоков.
Проверить наличие DRAT/DZAT можно той же командой hdparm:
$ sudo hdparm -I /dev/sdh | grep TRIM |
В современных Linux-системах при форматировании нового раздела на SSD-носителе в файловую систему Ext4 первым делом выдаётся команда TRIM на все блоки, входящие в этот дисковый раздел, и только после этого начинается запись метаданных раздела.
Т.е. для очистки раздела достаточно его отформатировать в Ext4 (правда, при форматировании будет записаны некоторые новые данные).
Кроме того, чтобы выполнить TRIM по целому дисковому разделу (или по целому носителю, т.к. командой поддерживаются блочные устройства) применяется команда blkdiscard.
Пример для дискового раздела /dev/sdf1:
| sudo blkdiscard /dev/sdf1 |
Некоторые устройства поддерживают выполнение команд ATA-интерфейса Secure erase/Enhanced erase, согласно спецификациям ATA обеспечивающих однократную (Secure erase) или многократную (Enhanced erase) перезапись всех блоков данных устройства.
В некоторых источниках утверждается, что при применении этих команд к SSD-носителям выполняется команда TRIM по всем блокам данных (и даже по блокам в резервных областях)..
Однако реальные процедуры выполнения этих команд не стандартизованы, и конкретные реализации не задокументированы, оставаясь полностью на усмотрение производителей оборудования.
Для примера, по одному из имеющихся носителей команда hdparm -I выдает такую информацию:
Т.е. формально поддерживаются обе команды, но, похоже, делают они одно и то же, так как выполнение команд занимает одинаковое время. |
В частности, известно, что некоторые устройства при выполнении этих команд не выполняют физическое перезаписывание всех данных , а просто заменяют свой внутренний ключ защитного преобразования хранимых данных.
Данные команды поддерживаются не всеми устройствами, и не работают на USB-устройствах.
Более подробная информация доступна по ссылке.