Подробный гайд: Принудительный и автоматический TRIM в Debian
Важно:
TRIM актуален только для SSD/NVMe накопителей. Для HDD он не применяется и может даже вызвать ошибки. В современных дистрибутивах Debian (11/12) предпочтительнее использовать периодический fstrim через systemd, а не опцию монтирования discard.
1. Проверка поддержки TRIM накопителем
Перед настройкой убедитесь, что ваш диск и файловая система поддерживают TRIM.
# Показать диски и параметры TRIM
lsblk -D
Ищите столбцы DISC-GRAN (гранулярность) и DISC-MAX (макс. объём за один запрос). Если значения не 0B, поддержка есть.
Дополнительно:
# Для SATA SSD
sudo hdparm -I /dev/sdX | grep -i trim
# Для NVMe
sudo nvme id-ctrl /dev/nvmeX | grep -i "Format NVM|Deallocate"
Файловые системы:
ext4, xfs, btrfs, f2fs поддерживают TRIM из коробки. zfs использует autotrim=on.
2. Ручной (принудительный) запуск TRIM
Команда fstrim сообщает SSD о неиспользуемых блоках. Запускать нужно от root или через sudo.
# TRIM для конкретной точки монтирования (например, корень)
sudo fstrim -v /
# TRIM для всех смонтированных поддерживаемых ФС
sudo fstrim -av
Флаги:
-a/--all→ обработать все подходящие точки монтирования-v/--verbose→ показать, сколько байт было освобожденоfstrimработает только со смонтированными разделами. Если раздел отмонтирован, TRIM применить нельзя.
3. Автоматический TRIM через systemd (рекомендуется)
В Debian по умолчанию присутствует сервис fstrim.timer, который запускает TRIM раз в неделю.
Обычно он уже активен, но проверим:
systemctl status fstrim.timer
Если inactive или disabled, включите и запустите:
sudo systemctl enable --now fstrim.timer
Изменение расписания
По умолчанию таймер срабатывает раз в неделю.
Чтобы запускать чаще (например, ежедневно), создайте override-файл:
sudo systemctl edit fstrim.timer
Добавьте в открывшийся редактор:
[Timer]
OnCalendar=daily
Persistent=true
Сохраните и примените:
sudo systemctl daemon-reload
sudo systemctl restart fstrim.timer
4. TRIM для LVM и LUKS (если используется)
Если система развёрнута поверх LVM или зашифрованного контейнера LUKS, стандартный fstrim не сработает без дополнительной настройки.
LVM
Включите отправку discard-команд на нижележащий уровень:
sudo nano /etc/lvm/lvm.conf
Найдите строку:
issue_discards = 0
Замените на:
issue_discards = 1
Примените без перезагрузки:
sudo dmsetup message /dev/mapper/<vg-lv> 0 "trim 0 <size_in_sectors>"
# Или просто перезагрузитесь / пересоздайте initramfs, если нужно
LUKS
Добавьте флаг allow-discards в /etc/crypttab.
Пример строки:
sda3_crypt UUID=xxxx-xxxx none luks,discard
или
sda3_crypt UUID=xxxx-xxxx none luks,allow-discards
Обновите initramfs и перезагрузитесь:
sudo update-initramfs -u
sudo reboot
Безопасность LUKS + TRIM:
Включение TRIM на шифрованных разделах позволяет атакующему определить, какие блоки диска используются, а какие пусты. Это снижает криптостойкость в сценариях физического доступа. Включайте только если доверяете окружению или приоритетнее производительность/ресурс SSD.
5. Проверка выполнения TRIM
После ручного или автоматического запуска проверьте логи:
# Последние запуски fstrim
journalctl -u fstrim.service --no-pager | tail -20
# Или просмотреть статус таймера
systemctl status fstrim.timer
systemctl list-timers fstrim.timer
Пример вывода успешного TRIM:
/: 42.3 GiB (45412345678 bytes) trimmed
6. Чего делать НЕ нужно
| Действие | Почему |
|---|---|
Добавлять discard в /etc/fstab |
Постоянный TRIM при каждой записи снижает производительность и износ контроллера SSD. fstrim.timer безопаснее и эффективнее. |
Запускать fstrim на HDD |
Приведёт к ошибкам Operation not supported. |
| Игнорировать обновления прошивки SSD | Производители часто оптимизируют сборку мусора (GC) и обработку TRIM в новых версиях FW. |
| Использовать TRIM в VM без поддержки хоста | Виртуальные диски (qcow2, vmdk) по умолчанию не пробрасывают TRIM. Требует настройки discard=unmap или fstrim на хосте. |
7. Полезные команды для диагностики
# Проверить, смонтирован ли раздел с discard
mount | grep discard
# Узнать тип ФС и параметры монтирования
findmnt -t ext4,xfs,btrfs -o TARGET,SOURCE,FSTYPE,OPTIONS
# Проверить SMART-атрибуты износа (зависит от диска)
sudo smartctl -a /dev/nvmeX | grep -i "percentage used|data units"
Итог
- Убедитесь, что SSD поддерживает TRIM (
lsblk -D). - Для разового очищения:
sudo fstrim -av - Для постоянного обслуживания:
sudo systemctl enable --now fstrim.timer - Для LVM/LUKS: настройте
issue_discards=1иallow-discardsв/etc/crypttab. - Не используйте
discardв/etc/fstabна современных системах.