TRIM

TRIM — это команда операционной системы, оптимизирующая работу дисковых устройств. На физических машинах эта команда специфична для накопителей типа SSD, однако в виртуальних средах она работает с накопителями любого типа — т.е. как SSD, так и HDD. Эта команда сообщает контроллерам дисковых устройств, какие блоки больше не используются файловой системой и могут быть окончательно освобождены. В результате операции записи на диск ускоряются, а в виртуальных средах также оптимизируется размещение данных на облачном хранилище. (Поэтому, используя TRIM, вы помогете держать цены на наши услуги стабильными — учитывая текущую ситуацию ажиотажного спроса на дисковое пространство.)

В виртуальной среде VMWare TRIM работает на всех доступных дисковых контроллерах, в виртуальной среде OpenStack – работает на контроллерах VirtIO-SCSI и IDE, но не работает на контроллере VirtIO (также известном как virtio-blk) — однако последний считается устаревшим и существует главным образом для обеспечения совместимости со старыми операционными системами, выпущенными до 2011–2012 годов. Для современных операционных систем использовать контроллер VirtIO нецелесообразно, т.к. все они поддерживают более новый и производительный контроллер VirtIO-SCSI.

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

Windows

Автоматическое выполнение TRIM:

В ОС Windows существует функция оптимизации дисков, которая в частности включает в себя выполение команд TRIM. По умолчанию Windows включает для каждого дискового раздела оптимизацию по расписанию.

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

Нажатие кнопки Оптимизировать вызовет окно графического интерфейса к данной операции (Оптимизация дисков).

Текущие настройки оптимизации по расписанию можно увидеть в левой нижней части окна. Изменить параметры (в частности, время запуска по расписанию) можно, нажав соответствующую кнопку правее. Запустить процесс оптимизации вручную можно в том же окне, однако практика показывает, что способ, описанный ниже, показывает лучшие результаты.

Ручной запуск TRIM из Power Shell:

1) запустить Windows Power Shell с правами администратора

(вызов: Поиск – ввести в строке поиска «power shell» — нажать на результатах поиска правую кнопку мыши и выбрать из контекстного меню пункт «Запуск от имени администратора»).

2) В окне Power Shell выполнить следующую команду для каждого дискового раздела:

Optimize-Volume -DriveLetter C -ReTrim -Verbose

Обратите внимание на параметр -DriveLetter и его аргумент — букву диска. В вышеприведённой команде TRIM выполняется для диска C. Чтобы выполнить его для другого раздела, нужно подставить вместо C соответствующую букву раздела — D, E, и т.д.

Linux

В Linux есть два основных способа обеспечить функционирование TRIM — запуск команды fstrim или опция монтирования файловых систем discard.

Автоматическое выполнение TRIM:

В современных дистрибутивах Linux (Ubuntu 16, RHEL/CentOS 7, Debian 8 и новее) самый простой способ обеспечить регулярное выполнение TRIM — через systemd. Соотвутствующие юниты, которые обеспечивают автоматическое выполнение fstrim для всех смонтированных файловых систем раз в неделю, содержатся в пакете util-linux. Для активации нужно одноразово виконати (з привілеями суперкористувача) наступну команду:

sudo systemctl enable fstrim.timer

Для инсталляций без systemd мы рекомендуем использовать опцию монтирования файловых систем discard. Преимущество данного метода — «раз настроил и забыл». Опцию discard нужно добавить для каждой файловой системы в файле /etc/fstab.

Опция монтирования discard поддерживается следующими файловыми системами: ext4, XFS, BTRFS, F2FS, JFS, ReiserFS4, а также файловыми системами FAT/FAT32. Однако добавление данной опции монтирования для других файловых систем, которые её не поддерживают, также совершенно безопасно — в таком случае она просто никак не влияет на работу.

В файле /etc/fstab кадой файловой системе соответствует отдельная строка, которая имеет несколько полей, разделённых пробелами или табуляцией. Последовательность текстовых полей слева направо: устройство, точка монтирования, тип файловой системы, опции монтирования. Ещё правее располагаются два числовых поля из одноц цифры. Нас интересует последнее текстовое поле — опци монтирования.

В это поле нужно додавить через запятую, без пробелов, опцію discard — как показано ниже:

После того как опция discard добавлена и файл /etc/fstab сохранён, нужно перезагрузить машину.

Примечание по поводу опции discard: в интернете можно найти материалы, призывающие относиться к опции discard с осторожностью, т.к. при определённых условияї она может сказываться на производительности — однако это касается только работы некоторых SSD-накопителей в физических серверах определённых конфігураций. Что же касается виртуальных сред — мы не выявили никакого измеримого влияния на производительность.

Команда fstrim:

Для выполнения TRIM вручную используется команда fstrim (входящая в состав пакета util-linux). Команда должна запускаться от имени суперпользователя (root). Периодическое выполнение fstrim также можно автоматизировать, создав соответствующие задания для cron.

Важная особенность команды fstrim — она работает на некоторых файловых системах, которые не поддерживают опцию монтирования discard — прежде всего на NTFS, работающей через ntfs-3g.

В современных дистрибутивах (Ubuntu 16, CentOS 7, Debian 8 и новее) можно запускать команду fstrim с ключом -a без дополнительных аргументов — в таком случае она отработает на всех смонтированных файловых системах:

fstrim -a

В более старых дистрибутивах (таких как Ubuntu 14, CentOS 6, Debian 7) ключ -a не поддерживается, и fstrim нужно запускать отдельно для каждой файловой системы, указывая точку монтирования как аргумент. Например:

fstrim /

Linux + LVM

При использовании LVM недостаточно включить TRIM для файловых систем — его нужно также включить для LVM.

В разных дистрибутивах по умолчанию используются разные политики. Например, в Ubuntu TRIM для LVM по умолчанию включён, тогда как в RHEL/CentOS — выключен. Проверить, включён ли TRIM, можно при помощи следующей команды:

grep issue_discards /etc/lvm/lvm.conf

Если в выводе данной команды будет присутствовать строка issue_discards = 1 — TRIM для LVM включён. Если же значение параметра issue_discards = 0 — TRIM выключен. Включить его можно, отредактировав соответствующую строку в файле /etc/lvm/lvm.conf и установив issue_discards = 1 (для редактирования нужны права суперпользователя).

ZFS (Linux/FreeBSD)

ZFS на Linux поддерживает TRIM начиная с версії 0.8. Эта версия является штатной для Ubuntu 20 LTS (но для 18 LTS штатной является более старая версия 0.7, в которой поддержки TRIM ещё не было). Другие дистрибутивы не поддерживают ZFS «из коробки» и требуют подключения сторонних репозиториев, потому номер доступной версии нужно уточнять в соответствующих репозиториях.

Команды для управления и выполнения TRIM на ZFS одинаковы для Linux и FreeBSD.

В приведённых ниже командах мы используем ZFS-пул по с именем tank, которое стандартно используется в документации по ZFS. В реальных условиях вместо него следует подставить імя вашего пула.

Проверить, включён ли периодический автоматеский TRIM:

zpool get autotrim tank

Значение этого параметра может быть off (выключено) или on (включено). По умолчанию этот параметр отключён. Включить его можно при помощи команды

zpool set autotrim=on tank

Ручной запуск TRIM из командной строки:

zpool trim tank