Данная статья применима к:

  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7)
  • Astra Linux Special Edition РУСБ.10152-02 (очередное обновление 4.7)
  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)
  • Astra Linux Special Edition РУСБ.10015-16 исп. 1 и исп. 2
  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.5) (частично)
  • Astra Linux Special Edition РУСБ.10265-01 (очередное обновление 8.1)
  • Astra Linux Common Edition 2.12
Накопители информации с твердотельными носителями информации (далее - SSD) не рекомендуется использовать для хранения архивов, так как при длительном (от трех месяцев) хранении в обесточенном состоянии сохранность записанных на них данных не гарантируется. Таким образом, защищаемая информация, размещенная на твердотельных носителях, может быть повреждена (искажена), что является нарушением требований информационной безопасности в отношении конфиденциальной информации.

Введение

В данной статье приведены рекомендации по применению SSD с учетом их конструктивных особенностей и состояния ПО на момент написания статьи, т.е. весна 2019-го года. Следует всегда помнить, что SSD представляет собой нетривиальное сочетание высоких технологий, способов удешевить устройство и маркетинговых хитростей, а устройства одного и того же производителя, сделанные в разное время, могут кардинально отличаться друг от друга и по внутренней конструкции и по используемым алгоритмам, даже если имеют формально одинаковую спецификацию.

Те, кто хочет освежить свои знания о том, что такое SSD, могут ознакомиться с подробной статьёй Википедии.

Для более пристального рассмотрения проблематики можно ознакомиться со старой, но вполне актуальной статьёй Log-структурированные файловые системы — каждому SSD.

Проблемы, которые рассматриваются далее в статье также давно и хорошо известны:

  • деградация скорости записи при заполнении носителя, с чем мы боремся с помощью операции TRIM;

  • ограниченный ресурс циклов перезаписи ячеек памяти твердотельных носителей, с чем борется внутренний контроллер SSD, самостоятельно решая, что куда записывать и перезаписывать, за что мы платим невозможностью гарантированно и полностью стереть конфиденциальную информацию с такого устройства;

Выбор файловой системы для SSD

SSD оборудованы внутренним контроллером FTL (Flash Translation Layer), транслирующим внешние обращения в свою собственную внутреннюю систему распределения данных, и использующим свою собственную внутреннюю файловую систему. При этом конструкция этой внутренней файловой системы SSD неизвестна, алгоритмы работы контроллеров не раскрываются. Контроллер FTL ничего не знает ни про файловые разделы, размещенные в устроятве, ни про то, под какую файловую систему эти разделы отформатированы, ни, тем более, про файловые объекты. Контроллер только транслирует полученные извне адреса блоков, по каким-то своим алгоритмам отображая их на доступное ему пространство хранения. Поэтому, с точки зрения обеспечения максимальной производительности, большой разницы в том, какую использовать внешнюю файловую систему для SSD просто нет.

  • файловые системы Ext{2,3,4} - самый простой и стандартный выбор. Проверены временем, поддерживаются всеми инсталляторами.
    Единственный нюанс - для экономии ресурса записи может быть разумно использовать версии без журналирования (Ext2) или отключать журналирование в Ext3/Ext4.
    Данные файловые системы поддерживаются всеми дистрибутивами, но (с учетом поддержки автоматического выполнения команды TRIM) единственным рекомендованным выбором остается Ext4.

    С учетом того, что файловая система Ext4 гарантированно поддерживает хранение классификационных меток, Ext4 становится единственным правильным выбором для Astra Linux SE;

    «В качестве файловых систем на носителях информации компьютеров с ОС (в том числе съемных машинных носителях информации) должны использоваться только файловые системы Ext2/Ext3/Ext4, поддерживающие расширенные (в т.ч. мандатные) атрибуты пользователей и обеспечивающие гарантированное уничтожение (стирание) информации»
    «Руководство по КСЗ, Часть 1» РУСБ.10015-01 97 01-1, 2020г., п. 17.3.1 «Условия применения ОС»

  • файловая система BTRFS - сравнительно новая файловая система, однако входит в состав дистрибутивов Astra Linux начиная с ОС Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.5). Автоматически определяет SSD, и включает их поддержку (поддерживает, но автоматически не включает операцию TRIM); Утверждается, что BTRFS по умолчанию не ведёт журналирование на SSD, что позволяет экономить ресурс записи. Кроме того BTRFS поддерживает различные опции монтирования SSD, определяющие  порядок записи на них (ssd, nossd, ssd_spread) и направленные на оптимизацию работы, однако, как указано в документации BTRFS:

    ...
    Некоторые SSD работают лучше при частом повторном использовании номеров блоков, в то время как другие работают намного лучше, когда кластеризация строго выделяет большие порции неиспользуемого пространства.
    ...
    Все эти параметры необходимо будет протестировать с вашей конкретной сборкой, чтобы увидеть, улучшает ли их использование или снижает производительность, так как каждая комбинация прошивки SSD и нагрузки приложений различны.
    ...

    При использовании в Astra Linux SE файловая система BTRFS также поддерживает работу с метками безопасности, и поддерживается действующим установщиком Astra Linux.

  • файловая система F2FS (Flash-Friendly File System) - ещё более новая файловая система, заявленная как специально ориентированная на работу с SSD.
    При использовании в Astra Linux SE файловая система F2FS также поддерживает работу с мандатными атрибутами.
    Подробнее с информацией об этой файловой системе можно ознакомиться в статье Разборки с F2FS или F2FS (Flash-Friendly File System).


Отключение журналирования в Ext{3,4} (для не загрузочного дискового раздела):

  • отмонтировать дисковый раздел, содержащий файловую систему;

  • перед отключением рекомендуется проверить целостность файловой системы:

    sudo fsck -f /dev/sdf1

  • отключить журналирование командой:

    sudo tune2fs -O ^has_journal /dev/sdf1

  • далее раздел можно примонтировать и использовать в обычном порядке;


Файловая система F2FS не входит в состав дистрибутива ОС Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.5).

Резервирование свободного места на SSD

Контроллер FTL устройства самостоятельно выравнивает нагрузку по записи на память, используя имеющееся свободное пространство для размещения данных.
Поэтому для сохранения постоянной скорости записи на SSD, их не рекомендуется заполнять больше чем на 75%. Кроме того, в устройстве резервируется область, из которой FTL будет брать блоки для замены повреждённых блоков.
Теоретически, в современных SSD необходимые области зарезервированы аппаратно, и, например, заявленная ёмкость устройства 120ГБ вместо 128ГБ может означать, что 8ГБ находятся в резерве.


Включение операции TRIM

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 поддерживается только на файловых системах Ext4, BTRFS, FAT, GFS2, JFS, XFS;
  • Дополнительно offline TRIM с помощью различных инструментов поддерживается на Ext3, NILFS2, OCFS2.

TRIM на NTFS поддерживается только в Windows.

На простых дисках

Команду TRIM можно использовать несколькими способами.

  1. Использовать опцию discard при монтировании диска. При включении этой опции при каждом удалении файлового объекта команда TRIM будет выполняться автоматически, т.е. при каждом удалении файла операционная система будет передавать контроллеру SSD список освобождающихся блоков. Такое поведение может негативно влиять на производительность в целом при частом удалении файловых объектов. Побочным результатом использования такого варианта является некоторое повышение конфиденциальности (так как данные в освобождаемых блоках должны при выполнении команды TRIM перезаписываться единицами). 

  2. Использовать системную службу fstrim.service/fstrim.timer

    Этот метод недоступен в ОС Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.5)

    Системная служба fstrim.service/fstrim.timer входит в пакет util-linux, который устанавливается автоматически при стандартной установке ОС.
    Хотя пакет устанавливается автоматически, служба при этом не устанавливается и не активируется, и её нужно дополнительно установить и активировать. Сделать это можно следующими командами:

    1. В 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 юнит службы создается автоматически;

    2. Активировать таймер службы:

      sudo systemctl enable fstrim.timer

      После активации служба будет один раз в неделю  (неделя считается общепринятым интервалом для выполнения этой операции для обычных систем)  выполнять команду, формирующую списки свободных блоков по всем смонтированным дисковым разделам (опция  -a т.е. все смонтированные разделы) и выдавать команду TRIM соответствующим устройствам, эту команду поддерживающим:

      fstrim -av

  3. Использовать для автоматического запуска команды fstrim службу cron

    Этот вариант применим также и для ОС Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.5)

    например, в файл /etc/crontab добавить строку (выполнение команды fstrim -av в 10 утра по понедельникам):

    # m h dom mon dow user command
    0 10 * * 1 root fstrim -av

На дисках LVM

Для включения TRIM на дисках LVM следует изменить значение опции issue_discards с 0 на 1 в файле /etc/lvm/lvm.conf.
Включение этой опции передаст команды TRIM на базовый физический том (тома) логических томов, когда логический том больше не использует пространство физических томов (например, при выполнении команд lvremove, lvreduce и т. д.).
(Смотрите lvm.conf (5) и / или
вписанные комментарии в /etc/lvm/lvm.conf). Как таковое, по-видимому, не требуется, чтобы работали «обычные» запросы TRIM (удаление файловых объектов внутри файловой системы).

На дисках dm-crypt

Включение TRIM на дисках dm-crypt выполняется добавлением опции discard в конфигурационный файл /etc/crypttab, например:

# <target name> <source device> <key file> <options>
sda2_crypt /dev/sda2 none luks,discard

Использование TRIM совместно с dm-crypt считается небезопасным, так как раскрывает информацию о том, какие секторы дискового раздела не используются.

Опция монтирования noatime

Дополнительно для сохранения ресурса перезаписи и повышения производительности SSD можно добавить к параметрам монтирования файловой системы опцию noatime, отключающую выполнение записи последнего времени доступа при каждом чтении файла.
Однако это может нарушить работу программ, использующих этот атрибут, и считается, что выигрыш от применения этой опции небольшой.

Конфиденциальная информация на SSD

См. также: Съемные устройства хранения данных в Astra Linux.

Как упоминалось выше, все обращения к SSD обрабатываются его внутренним контроллером FTL, и транслируются по неизвестным нам алгоритмам в неизвестные нам структуры данных.
При этом при "перезаписи" ранее записанной информации контроллер предпочитает записать новую информацию в  новый блок (блок с меньшим количеством перезаписей), не затирая ранее записанные данные.
Из этого следует, что

операции перезаписи для удаления конфиденциальной информации (гарантированное удаление данных файловых объектов в Astra Linux Special Edition с помощью многократной перезаписи (опции монтирования secdel и secdelrnd)) при применении на SSD технически не может гарантировать полное удаление конфиденциальной информации, ранее записанной на SSD.

Система очистки устройств хранения данных Astra Linux SE гарантирует невозможность восстановления файловых данных при доступе к устройству с помощью штатных средств операционной системы. Однако, при включённом журнале файловой системы может быть получен несанкционированный доступ к именам удалённых конфиденциальных файловых объектов (файлов и каталогов), а при наличии физического доступа к устройству, дающего возможность использования нештатных средств (использование сервисных режимов работы устройства, вскрытие корпуса, прямое чтение чипов памяти и пр.) недоступность удалённых файловых данных не гарантируется. В связи с этим рекомендуется  отключать журналы файловой системы, использовать защитное преобразование файловых данных, а также физически уничтожать любые выводимые из эксплуатации устройства.

См. также Отключение журналирования в файловой системе ext4

Можно, конечно, попытаться стереть все данные, перезаписав всю его доступную ёмкость. Однако, как упоминалось выше, в SSD может быть аппаратно зарезервирована область для ротации данных, недоступная извне устройства,  и в этой области могут остаться не перезаписанные копии данных. Аналогично, выполнение операции TRIM не сотрёт копии данных, находящиеся в резервной области. Кроме того команда fstrim:

  • работает только на примонтированных дисковых разделах;
  • не работает на свободных (незанятых дисковыми разделами) областях носителя;
  • не работает на непримонтированных дисковых разделах.

Т.е. при удалении отмонтированного дискового раздела команда TRIM не будет применена к освободившейся области.

Предопределённое чтение после TRIM (DRAT/DZAT)

Некоторые накопители, поддерживающие команду 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
* Data Set Management TRIM supported (limit 1 block)
* Deterministic read data after TRIM

TRIM ненужного дискового раздела

В современных Linux-системах при форматировании нового раздела на SSD в файловую систему Ext4 первым делом выдаётся команда TRIM на все блоки, входящие в этот дисковый раздел, и только после этого начинается запись метаданных раздела.
Т.е. для очистки раздела достаточно его отформатировать в Ext4 (правда, при форматировании будет записаны некоторые новые данные).

Кроме того, чтобы выполнить TRIM по целому дисковому разделу (или по всему накопителю, т.к. командой поддерживаются блочные устройства) применяется команда blkdiscard.
Пример для дискового раздела /dev/sdf1:

sudo blkdiscard /dev/sdf1

Команды ATA-интерфейса Secure Erase, Enhanced Erase

Некоторые устройства поддерживают выполнение команд ATA-интерфейса Secure erase/Enhanced erase, согласно спецификациям ATA обеспечивающих однократную (Secure erase) или многократную (Enhanced erase) перезапись всех блоков данных устройства.
В некоторых источниках утверждается, что при применении этих команд к SSD выполняется команда TRIM по всем блокам данных (и даже по блокам в резервных областях)..
Однако реальные процедуры выполнения этих команд не стандартизованы, и конкретные реализации не задокументированы, оставаясь полностью на усмотрение производителей оборудования.

Для примера, по одному из подключенных устройств команда hdparm -I выдает такую информацию:

....

supported: enhanced erase
120min for SECURITY ERASE UNIT. 120min for ENHANCED SECURITY ERASE UNIT.

...

Т.е. формально поддерживаются обе команды, но, похоже, делают они одно и то же, так как выполнение команд занимает одинаковое время.

В частности, известно, что некоторые устройства при выполнении этих команд не выполняют физическое перезаписывание всех данных , а просто заменяют свой внутренний ключ защитного преобразования хранимых данных.

Данные команды поддерживаются не всеми устройствами, и не работают на USB-устройствах.

Более подробная информация доступна по ссылке.