SSD люблять охайність: коли система регулярно повідомляє, які блоки вільні, носій працює швидше і зношується повільніше. У Linux це робить TRIM: або періодично через fstrim, або «на льоту» через параметр mount discard. Давайте ввічливо та безпечно навчимо систему прибирати за собою, щоб ваше використання диска було ефективним, а оптимізація продуктивності — стабільною ⚡

Перевірка підтримки TRIM на вашому SSD

Починаємо з діагностики: переконайтеся, що диск і стек зберігання (файлова система, LUKS, RAID) підтримують TRIM.

# Короткий огляд підтримки DISCARD/TRIM
lsblk -D

# Тестовий TRIM для кореня (дивіться на звіт про відсічені блоки)
sudo fstrim -v /

# Для SATA-дисків (опційно)
sudo hdparm -I /dev/sda | grep -i trim

Якщо вивід lsblk -D показує нулі у стовпцях DISC-MAX/DISC-GRAN, або fstrim -v повертає помилки, TRIM може бути заблокований проміжним шаром (наприклад, шифруванням без дозволу на discard).

Налаштування регулярного TRIM через fstrim і systemd timers

Найбезпечніший спосіб — періодичний TRIM. Більшість сучасних дистрибутивів вже мають cron та systemd timers для цього. Перевіримо та увімкнемо:

# Увімкнути таймер і запустити його прямо зараз
sudo systemctl enable --now fstrim.timer

# Перевірити стан	systemctl status fstrim.timer

# Подивитися наступний запуск
systemctl list-timers | grep fstrim

# Прогнати TRIM вручну по всіх змонтованих файлових системах
sudo fstrim -av

# Подивитися лог останніх запусків fstrim
journalctl -u fstrim.service --since "-7 days"

За замовчуванням systemd запускає fstrim щотижня з рандомною затримкою — це чудовий баланс для SSD на десктопах і серверах.

Альтернатива через cron

Якщо у вас нема systemd (або ви любите класичний cron), створіть weekly-джобу:

# Створити щотижневе завдання для fstrim
sudo bash -c 'printf "%s\n" "#!/bin/sh" "/usr/sbin/fstrim --all --quiet" > /etc/cron.weekly/fstrim'
sudo chmod +x /etc/cron.weekly/fstrim

Це проста автоматизація задач, еквівалентна таймеру.

Параметри mount: noatime і discard

Окрім fstrim, варто налаштувати опції монтування, що зменшують зайві записи.

noatime vs relatime

noatime вимикає оновлення часу доступу до файлів. Більшість дистрибутивів уже застосовують relatime за замовчуванням, що теж значно скорочує записи. Якщо ви впевнені, що застосункам не потрібен точний atime, сміливо ставте noatime для ще меншого зносу.

# Резервна копія fstab на випадок помилок
sudo cp /etc/fstab /etc/fstab.bak

# Приклади рядків у /etc/fstab (налаштуйте свої UUID/типи ФС):
# ext4 з noatime
# UUID=xxxx-xxxx  /  ext4  defaults,noatime  0 1

# XFS з noatime
# UUID=xxxx-xxxx  /  xfs   noatime          0 0

discard: коли доречно

Рекомендація за замовчуванням: не вмикайте постійний discard у /etc/fstab, покладайтеся на fstrim.timer. Постійний discard може сповільнювати записи та збільшувати латентність, особливо під навантаженням. Але якщо потрібен миттєвий TRIM (наприклад, багатокористувацькі системи з частим видаленням великих файлів), використовуйте асинхронні режими там, де вони підтримуються.

  • ext4: використовуйте fstrim або discard=async (ядро ≥ 5.6). Синхронний discard — лише за особливої потреби.
  • btrfs: якщо дуже хочеться постійного TRIM — тільки discard=async; інакше — fstrim.timer.
  • xfs: краще fstrim.timer; опція discard часто шкодить продуктивності.
# ext4 з асинхронним discard (ядро ≥ 5.6)
# UUID=xxxx-xxxx  /  ext4  defaults,noatime,discard=async  0 1

# btrfs з асинхронним discard
# UUID=xxxx-xxxx  /  btrfs  noatime,compress=zstd,discard=async,subvol=@  0 0

Після редагування fstab перевірте конфіг:

sudo mount -a   # не повинно бути помилок

Альтернативні способи і тонке налаштування

Хочете змінити частоту TRIM? Легко переозначити таймер через drop-in конфіг:

# Зробити щоденний TRIM з розкидом у 4 години
sudo mkdir -p /etc/systemd/system/fstrim.timer.d
printf "%s\n" "[Timer]" "OnCalendar=daily" "RandomizedDelaySec=4h" "Persistent=true" | \ 
  sudo tee /etc/systemd/system/fstrim.timer.d/override.conf
sudo systemctl daemon-reload
sudo systemctl restart fstrim.timer

Persistent=true гарантує, що TRIM виконається після перезавантаження, навіть якщо комп'ютер був вимкнений у запланований час.

GUI-спосіб

У GNOME Disks (gnome-disk-utility):

  1. Відкрийте Disks → виберіть розділ → шестерня → Edit Mount Options.
  2. Вимкніть «User Session Defaults» → увімкніть «Discard». Збережіть і перезавантажтеся.

У KDE Partition Manager також можна задати опцію монтування «discard». Пам'ятайте: навіть якщо вмикаєте discard через GUI, оцініть вплив на продуктивність; інколи краще залишитися на fstrim.timer. Це якраз про зважені поради Linux 😊

FAQ

Чи безпечно використовувати discard постійно?

Технічно так, але не завжди бажано. Синхронний discard може збільшити латентність записів. Більшості користувачів достатньо щотижневого fstrim. Якщо потрібен реальний час — обирайте discard=async там, де він є.

Як часто запускати fstrim?

Для десктопа і більшості серверів — щотижня. Для систем із великим обігом даних — щодня. Змінюйте через drop-in для таймера.

Чи потрібен TRIM для NVMe?

Так. NVMe також виграють від TRIM: контролер краще управляє вільним простором і підтримує сталу швидкість.

Як перевірити, що TRIM відпрацював?

Подивіться логи journalctl -u fstrim.service або запустіть sudo fstrim -av і оцініть обсяг відсічених блоків.

TRIM і LUKS-шифрування — це сумісно?

Так, але потрібно дозволити пропускання discard для mapper. Додайте опцію discard у /etc/crypttab для відповідного тома. Пам'ятайте про невеликий ризик витоку патернів вільного простору. Більш безпечний варіант для багатьох — залишитись на періодичному fstrim.

Чи скорочує TRIM ресурс SSD?

Ні. TRIM лише повідомляє контролеру, що блоки вільні. Це допомагає зносостійкості (менше непотрібних перезаписів).

Порада від Kernelka

Якщо у вас кілька машин або віртуалок на одному хості, додайте RandomizedDelaySec до таймера — так усі не запустять fstrim одночасно. І не забувайте про Linux моніторинг: переглядайте логи fstrim і I/O-графіки, щоб бачити ефект змін. Маленькі кроки — стабільна продуктивність 🛡️

Підсумок

  • Увімкніть і перевірте fstrim.timer — це безпечний стандарт.
  • Налаштуйте noatime для меншого зносу і стабільної швидкості.
  • Уникайте постійного discard, якщо не потрібен; за потреби — discard=async на ext4/btrfs.
  • Тонко налаштовуйте частоту TRIM через drop-in конфіги systemd.
  • GUI-метод у GNOME Disks/KDE можливий, але перевіряйте вплив на продуктивність.