TRIM — что это, зачем нужен SSD, fstrim | Глоссарий | Глоссарий FREEHOSTING

TRIM

TRIM SSD Command
TRIM — Команда ATA, через которую операционная система сообщает SSD, какие блоки больше не используются файловой системой. Контроллер накопителя освобождает их во время сборки мусора, что поддерживает скорость записи и продлевает ресурс ячеек памяти.

Определение простыми словами

В отличие от жёсткого диска, SSD не может перезаписать ячейку напрямую — её сначала нужно стереть. Когда вы удаляете файл, ОС просто помечает кластеры свободными, но накопитель об этом не знает: для контроллера ячейки выглядят занятыми, и при новой записи он вынужден сначала прочитать блок, стереть его и записать заново. Это явление называется write amplification и убивает скорость записи и ресурс SSD.

Команда TRIM решает проблему: при удалении файла ОС шлёт SSD список логических адресов, которые больше не нужны. Контроллер помечает эти страницы как свободные и стирает их в фоне (garbage collection). Когда придёт реальная запись, блок уже подготовлен — задержка минимальна, износ ниже. Аналогом TRIM в стандарте NVMe служит команда DEALLOCATE (Dataset Management).

Сравнение (таблица)

Параметр С включённым TRIM Без TRIM
Скорость записи через год Близка к новой Падает на 30–60 %
Write amplification 1.1–1.5× 3–10×
Износ ячеек Минимальный Ускоренный
Задержка при записи Стабильная Растут «горбы»
Поддержка в RAID RAID 0/1 в современных контроллерах В аппаратных RAID-контроллерах часто отключён

Кейсы использования

  • Любой Linux-сервер с SSD: либо периодический fstrim по таймеру, либо опция discard в /etc/fstab.
  • Виртуальные машины с дисками qcow2 или raw на SSD-хосте — гость должен пробрасывать TRIM до железа.
  • SSD-кеш в кэширующих слоях вроде bcache или LVM cache — без TRIM кеш быстро деградирует.
  • Шифрованные тома LUKS поверх SSD — с параметром discard в cryptsetup open.
  • Негативный сценарий: включать discard в /etc/fstab при использовании LVM снимков или Btrfs с снапшотами на старых ядрах. На ядрах до 4.0 это могло привести к потере данных в снимках. На современных ядрах безопасно, но из соображений совместимости и нагрузки лучше использовать fstrim.timer — недельный пакетный TRIM.

Технические детали

# Проверка поддержки TRIM в SSD
sudo hdparm -I /dev/sda | grep -i trim

# Однократный TRIM всех смонтированных ФС
sudo fstrim -av

# Включение еженедельного TRIM через systemd
sudo systemctl enable --now fstrim.timer
sudo systemctl status fstrim.timer

# Опция discard в /etc/fstab (real-time TRIM)
UUID=xxx /  ext4  defaults,discard,noatime  0  1

# TRIM для LUKS-тома
sudo cryptsetup --allow-discards refresh data

# Для NVMe — команда deallocate
sudo nvme dsm /dev/nvme0n1 --ad -s 0 -b 1000

На большинстве дистрибутивов Linux fstrim.timer включён по умолчанию и запускается раз в неделю. Этого достаточно для домашних и рабочих машин. Для нагруженных СУБД с интенсивной записью имеет смысл запускать fstrim чаще — например, ежедневно ночью.

Частые вопросы

Нужен ли TRIM для NVMe?

Да, но команда называется иначе — DEALLOCATE из набора Dataset Management. На уровне ОС утилита fstrim работает с NVMe прозрачно, никаких отдельных настроек не требуется.

Что лучше — discard в fstab или fstrim по таймеру?

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

Работает ли TRIM в аппаратных RAID-массивах?

Зависит от контроллера. Современные LSI MegaRAID, Adaptec и серверные платформы Dell/HPE поддерживают TRIM в RAID 0 и 1; в RAID 5/6 поддержка ограничена. Уточняйте по модели контроллера.