Дерево страниц

Вы просматриваете старую версию данной страницы. Смотрите текущую версию.

Сравнить с текущим просмотр истории страницы

« Предыдущий Версия 4 Следующий »

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

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

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

  • ОС СН Смоленск 1.6
  • ОС СН Ленинград 8.1
  • ОС ОН Орёл 2.12
  • ОС СН Смоленск 1.5 (частично)

Введение

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

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

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

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

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

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

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

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

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

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


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

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

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

    sudo fsck -f /dev/sdf1

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

    sudo tune2fs -O ^has_journal /dev/sdf1

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


Файловая система F2FS не входит в состав дистрибутива ОС СН Смоленск 1.5.

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

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


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

TRIM - команда внешнего интерфейса накопителя, позволяющая операционной системе сообщить контроллеру 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

    Этот метод недоступен в ОС СН Ленинград 1.5

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

    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
    sudo systemctl enable fstrim.timer

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

    fstrim -av
    которая будет выдавать команду TRIM всем подключенным накопителям (опция  -a - все накопители).

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

    Этот вариант применим также и для ОС СН Смоленск 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-crupt выполняется добавлением опции discard в конфигурационный файл /etc/crypttab, например:

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

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

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

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

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

См. также Смоленск 1.6: Порядок работы с конфиденциальной информацией на USB носителях и Смоленск 1.5: Порядок работы с конфиденциальной информацией на USB носителях.

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

операции перезаписи отдельных файлов для удаления конфиденциальной информации (гарантированное удаление файлов и папок в ОС СН Astra Linux с помощью многократной перезаписи) при применении на SSD-накопителях технически не может гарантировать удаление конфиденциальной информации, ранее записанной на SSD-накопитель.

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

Дополнительные материалы

Coding for SSDs

Critical Role of Firmware and FTL in SSD Design

  • Нет меток