В данной статье сделана попытка актуализировать рекомендации по применению накопителей SSD с учетом их конструктивных особенностей на момент написания статьи, т.е. весна 2019-го года.
При этом следует понимать, что SSD представляет собой нетривиальное сочетание высоких технологий, способов удешевить устройство и маркетинговых хитростей, а диски одного и того же производителя, сделанные в разное время, могут кардинально отличаться друг от друга по внутренней конструкции, даже если имеют формально одинаковую спецификацию.
Данная статья применима к:
- ОС СН Смоленск 1.6
- ОС СН Ленинград 8.1
- ОС ОН Орёл 2.12
- ОС СН Смоленск 1.5 (частично)
Введение
Те, кто хочет освежить свои знания о том, что такое SSD, могут ознакомиться с подробной статьёй на Википедии.
Для более пристального рассмотрения проблематики можно ознакомиться со статьёй Log-структурированные файловые системы — каждому SSD.
Проблемы, которые рассматриваются далее в статье также хорошо известны:
- деградация скорости записи при заполнении накопителя, с чем мы боремся с помощью операции TRIM;
- ограниченный ресурс циклов перезаписи ячеек SSD, с чем борется внутренний контроллер SSD-накопителя, самостоятельно решая, что куда записывать и перезаписывать, за что мы платим невозможностью гарантированно и полностью стереть конфиденциальную информацию с такого накопителя;
Резервирование свободного места на SSD
Контроллер FTL накопителя самостоятельно выравнивает нагрузку по записи на память, используя имеющееся свободное пространство для размещения данных.
Поэтому для сохранения постоянной скорости записи SSD, его не рекомендуется заполнять больше чем на 75%. Кроме того, на накопителе резервируется область, из которой FTL будет брать блоки для замены повреждённых блоков.
Теоретически, в современных дисках необходимые области зарезервирована автоматически, и, например, заявленная ёмкость накопителя 120ГБ вместо 128ГБ может означать, что 8ГБ находятся в резерве.
Включение операции TRIM
Утверждается, что при выполнении команды TRIM освобождающиеся блоки стираются (перезаписываются единицами, что является первым шагом в последовательности операций перезаписи блока SSD), при этом злоупотребление командой TRIM повышает количество перезаписей ячеек памяти SSD, что ведёт к снижению его ресурса. Однако гарантировать, что все контроллеры FTL всегда будут работать именно так, вряд ли возможно.
Проверить, поддерживает ли накопитель команду TRIM можно проверить командой (возможно, понадобится установить пакет настройки параметров жестких дисков):
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 можно использовать несколькими способами.
- Использовать опцию discard при монтировании диска (). При включении этой опции при каждом удалении файла команда trim будет выполняться автоматически, т.е. при каждом удалении файла операционная система будет сообщать контроллеру SSD-накопителя, что блоки, входившие в файл, свободны. Может негативно влиять на производительность в целом при частом удалении файлов. Имеются сведения, что при большой интенсивности удалений файлов некоторые накопители не могут обработать все команды, что ведёт существенному замедлению работы.
- . Побочным результатом использования такого варианта является повышение конфиденциальности (так как данные в освобождаемых блоках должны стираться при выполнении команды).
Использовать системную службу 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После активации служба будет выполнять 1 раз в неделю команду
fstrim -avкоторая будет выдавать команду TRIM всем подключенным накопителям.- Использовать для автоматического запуска команды fstrim службу cron (вариант, применимый и рекомендованный для ОС СН Смоленск 1.5);
Этот метод не работает для файловых систем
На дисках 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
Опция монтирования noatime
Дополнительно для сохранения ресурса перезаписи и повышения производительности SSD-накопителя можно добавить к параметрам монтирования накопителя опцию noatime, отключающую запись о последнем времени доступа при каждом чтении файла
Однако это может нарушить работу программ, использующих этот атрибут, и как показывают тесты - выигрыш от применения команды небольшой.
Конфиденциальная информация на SSD
Как упоминалось выше, все обращения к SSD-накопителю обрабатываются его внутренним контроллером FTL, и транслируются в неизвестные нам структуры данных.
При этом при перезаписи ранее записанной информации контроллер предпочитает записать новую информацию в свободный блок, пока свободные блоки есть, не затирая ранее записанные данные.
Из этого следует, что
Можно, конечно, попытаться стереть весь накопитель, перезаписав все его блоки. Однако, как упоминалось выше, в накопителе может быть зарезервирована область для ротации данных, недоступная извне накопителя, и в этой области могут остаться неперезаписанные копии данных. Аналогично, выполнение операции TRIM не сотрёт копии данных, находящиеся в резервной области. Кроме того, команда TRIM не работает на свободных (незанятых дисковыми разделами) областях накопителя, и не работает на непримонтированных накопителях. Т.е. при удалении отмонтированного накопителя команда TRIM не будет применена к освободившейся области.