Почему Ubuntu не включает TRIM для SSD по умолчанию и как включить его самому

Кратко
TRIM освобождает блоки на SSD после удаления файлов и предотвращает постепенное замедление диска. Ubuntu долгое время не включала TRIM в режиме «в реальном времени» (параметр mount=discard) из-за проблем с производительностью ядра. Рекомендуем запускать периодический TRIM через fstrim (cron/systemd timer). Ниже — объяснение, когда что подходит, пошаговые инструкции, чек-листы для разных ролей, матрица совместимости, тесты и план отката.
Быстрое содержание
- Почему TRIM важен
- Почему Ubuntu не использует TRIM по умолчанию
- Альтернативы: realtime TRIM vs fstrim
- Пошаговое включение: единоразовый запуск и регулярная задача
- Чек-листы для пользователей и администраторов
- Тесты, критерии приёмки и план отката
- Матрица совместимости файловых систем и SSD
- Короткий глоссарий и рекомендации по безопасности
Почему TRIM важен
TRIM — это команда, которую операционная система посылает SSD, чтобы сообщить, какие блоки больше не содержат полезных данных. Без TRIM SSD со временем ухудшает производительность записи: контроллер вынужден сначала очищать ячейки перед записью, что добавляет задержку.
Пояснение в одну строку: TRIM сообщает диску, какие блоки можно стирать заранее — это поддерживает скорость записью в течение всего срока службы SSD.
Кому это важно:
- Пользователи ноутбуков и рабочих станций на SSD.
- Администраторы серверов и виртуальных машин с SSD / NVMe.
- Разработчики системного ПО и интеграторы.
Важно: TRIM не «восстанавливает» файлы — он просто повышает производительность и потенциально продлевает срок службы SSD.
Почему Ubuntu не использует TRIM по умолчанию
Реальная причина — реализация TRIM в ядре Linux (реaltime discard) былa не оптимизирована для современных SSD на момент внедрения. Когда команда TRIM отправляется «на лету» при каждом удалении (параметр монтирования discard), это может привести к замедлению обычной работы диска. Поэтому дистрибутивы, включая Ubuntu, предпочли отключить realtime TRIM по умолчанию и вместо этого рекомендовать плановый запуск fstrim.
Ключевая мысль: realtime discard работает медленно в некоторых комбинациях ядра + контроллер SSD. Плановый fstrim делает ту же работу, но в контролируемое время, что уменьшает влияние на отклик системы.
Разница между realtime TRIM (discard) и fstrim
discard (параметр монтирования): при удалении файла ОС немедленно отправляет TRIM на диск. Преимущества — немедленное освобождение блоков. Недостатки — в Linux на ряде конфигураций это снижает производительность.
fstrim (плановый): утилита, которая сканирует файловую систему и сообщает диску неиспользуемые блоки. Обычно запускается периодически (cron или systemd timer). Преимущества — минимальное влияние на обычную нагрузку и возможность планирования в «тихое» время. Недостатки — освобождение происходит не мгновенно.
Когда использовать что:
- На персональном ноутбуке и десктопе: чаще всего достаточно fstrim по расписанию.
- На высоконагружённых серверах с критичными задержками: тщательно протестируйте discard; по умолчанию используйте fstrim в низкую нагрузку.
Когда TRIM не нужен или не работает
Контрпримеры / кейсы, когда TRIM не применим:
- Старые SSD и контроллеры без поддержки TRIM. fstrim выдаст ошибку “operation not supported”.
- Некорректно реализованный контроллер может давать деградацию производительности при realtime TRIM.
- Если используется файловая система, не поддерживающая TRIM (например, ext3, ext2), TRIM не сработает.
Важно: всегда проверяйте поддержку TRIM в конкретном диске (datasheet/производитель) и в используемой версии ядра.
Как проверить поддержку TRIM в текущей системе
- Проверить, поддерживает ли SSD TRIM (команда через ATA или NVMe):
# Для NVMe
sudo nvme id-ctrl /dev/nvme0 | grep -i trim
# Для SATA SSD (иногда можно посмотреть с помощью hdparm или lsblk)
sudo hdparm -I /dev/sda | grep -i trim- Попробовать выполнить fstrim вручную и посмотреть результат:
sudo fstrim -v /Если диск не поддерживает TRIM, будет сообщение об ошибке или ноль освобождённых байт.
Пошаговое: единоразовый запуск TRIM
Откройте терминал и выполните:
sudo fstrim -v /Описание:
- Параметр -v показывает, сколько байт было освобождено.
- Команда безопасна: она лишь информирует диск о неиспользуемых блоках.
Пример вывода:
/ trimmed: 123456789 bytesЕсли получите ошибку, проверьте, поддерживает ли диск TRIM и выбрана ли файловая система с поддержкой (ext4, btrfs, xfs и др.).

Пошаговое: регулярный запуск — cron или systemd timer
Рекомендуемый способ — запускать fstrim регулярно (еженедельно или ежесуточно для интенсивных систем). Есть два распространённых подхода:
- Использовать cron (классический метод). Пример простого скрипта, который выполняет fstrim ежедневно:
Создайте файл:
sudo nano /etc/cron.daily/fstrimВставьте содержимое:
#!/bin/sh
fstrim /Сделайте исполняемым:
sudo chmod +x /etc/cron.daily/fstrimCron запустит этот скрипт ежедневно вместе с другими задачами в /etc/cron.daily.
- Использовать systemd timer (современный и гибкий метод). Пример для еженедельного запуска:
Создайте юнит сервис:
sudo tee /etc/systemd/system/fstrim-weekly.service > /dev/null << 'EOF'
[Unit]
Description=Run fstrim weekly
[Service]
Type=oneshot
ExecStart=/sbin/fstrim -av
EOFСоздайте таймер:
sudo tee /etc/systemd/system/fstrim-weekly.timer > /dev/null << 'EOF'
[Unit]
Description=Weekly fstrim timer
[Timer]
OnCalendar=weekly
Persistent=true
[Install]
WantedBy=timers.target
EOFЗагрузите и включите таймер:
sudo systemctl daemon-reload
sudo systemctl enable --now fstrim-weekly.timerПреимущества systemd timer: можно точно настроить расписание, хранить журналы через journalctl и следить за статусом.


Рекомендации по частоте
- Домашний пользователь: еженедельно или ежемесячно — обычно достаточно.
- Интенсивные рабочие нагрузки (много операций записи/удаления): еженощно или ежедневно.
- Серверы с критичной нагрузкой: планировать в окна с низкой нагрузкой и тестировать влияние.
Факторы, влияющие на частоту: объём записи данных, модель SSD, важность минимизации простоев.
Чек-листы и роли
Чек-лист для обычного пользователя:
- Убедиться, что файловая система — ext4, btrfs, xfs или другая современная.
- Выполнить sudo fstrim -v / и проверить результат.
- Если всё работает, настроить systemd timer или cron для автоматизации.
Чек-лист для системного администратора:
- Проверить поддержку TRIM в конкретной модели SSD.
- Выполнить нагрузочные тесты с realtime discard и без него.
- Настроить fstrim с расписанием, подходящим для нагрузки.
- Настроить мониторинг и оповещения на сбои fstrim.
- Подготовить план отката и документировать изменения в конфигурации.
SOP: стандартная операционная процедура для включения fstrim
- Проверка совместимости диска и файловой системы.
- Резервное копирование критичных данных (рекомендуется всегда перед изменениями на дисках).
- Тестовый запуск fstrim вручную на нерабочей системе или вне пиков.
- Настройка systemd timer с журналированием.
- Мониторинг первых трёх выполнений на предмет ошибок.
- Корректировка расписания и уведомлений.
Короткая команда проверки журнала systemd:
sudo journalctl -u fstrim-weekly.service -n 200Тестовые случаи и критерии приёмки
Тесты:
- TC1: fstrim запускается вручную без ошибок и возвращает >0 освобождённых байт.
- TC2: cron/script выполняется автоматически и появляется запись в логах.
- TC3: при запуске на несupportируемом диске выводится корректная ошибка и скрипт не завершился с успехом.
- TC4: воздействие на производительность: запуск fstrim в пиковое время не увеличивает среднее время отклика более допустимого порога (задаётся SLA).
Критерии приёмки:
- Успешное выполнение fstrim в запланированное время минимум три раза подряд.
- Логи и метрики показывают отсутствие критических ошибок.
- Нагрузка на диск в момент выполнения находится в допустимых пределах.
План отката и процедуры при инциденте
Если после включения регулярного fstrim наблюдается деградация производительности или ошибки:
- Отключить таймер/cron:
sudo systemctl disable --now fstrim-weekly.timer
sudo rm /etc/cron.daily/fstrim- Проверить логи fstrim и SMART диска (smartctl) на наличие ошибок:
sudo journalctl -u fstrim-weekly.service -b
sudo smartctl -a /dev/sdaЕсли диск стал некорректно работать, восстановите из резервной копии и свяжитесь с производителем SSD.
Документируйте инцидент и проведите post-mortem.
Матрица совместимости (файловые системы и TRIM)
| Файловая система | TRIM поддерживается | Примечания |
|---|---|---|
| ext4 | Да | Стандартно поддерживается fstrim и discard |
| btrfs | Да | Поддерживает fstrim; watch на фрагментацию |
| xfs | Да | Поддерживает fstrim (начиная с соответствующих версий ядра) |
| ext3 / ext2 | Нет | Не поддерживают TRIM |
| LVM на блочных устройствах | Частично | TRIM нужно проверять через слой блочного устройства |
| LUKS (шифрование) | Зависит | При использовании шифрования TRIM может быть отключён по соображениям безопасности; проверьте настройки |
Примечание: конкретная поддержка зависит от версии ядра и драйверов.
Модель принятия решений — кратко
- Если SSD поддерживает TRIM и файловая система современная => используйте fstrim по расписанию.
- Если система чувствительна к задержкам и у вас есть подозрение, что realtime discard ухудшит производительность => не включайте discard без тестов.
- Если вы используете шифрование диска — изучите влияние TRIM на безопасность и проверьте документацию LUKS/cryptsetup.
Риски и смягчения
- Риск: realtime discard может замедлить систему. Смягчение: используйте fstrim и тестируйте нагрузку.
- Риск: диск не поддерживает TRIM и команда не сработает. Смягчение: проверить поддержку перед автоматизацией.
- Риск: информация об освобождённых блоках может снизить уровень приватности при шифровании. Смягчение: оценить требования к безопасности и, при необходимости, не включать TRIM или использовать безопасный метод очистки.
Безопасность и приватность
TRIM сообщает контроллеру диска, какие блоки не используются. В некоторых сценариях это может облегчить восстановление ранее удалённых данных при физическом доступе к диску. При использовании полного шифрования диска (LUKS) это повлияет на модель угроз: по умолчанию TRIM может раскрыть информацию о занятии блоков, но не их содержимое. Если конфиденциальность критична, изучите trade-offs между производительностью и утечкой метаданных.
Короткий глоссарий
- TRIM: команда, сообщающая SSD об удалённых блоках.
- discard: параметр монтирования, который отправляет TRIM при каждом удалении файлов.
- fstrim: утилита, выполняющая сканирование файловой системы и массовую отправку TRIM.
- systemd timer: механизм systemd для запуска задач по расписанию.
Часто задаваемые вопросы
Нужно ли мне использовать discard вместо fstrim?
Нет — в большинстве случаев fstrim по расписанию предпочтительнее, поскольку он уменьшает риск падения производительности.
Как узнать, какая у меня файловая система?
findmnt -no FSTYPE /Есть ли риск для данных при запуске fstrim?
fstrim не удаляет пользовательские данные; он лишь сообщает контроллеру, что определённые блоки свободны.
Заключение
TRIM — важная функция для поддержания скорости SSD. Ubuntu и многие другие дистрибутивы не включают realtime TRIM по умолчанию из-за исторических проблем с производительностью в реализации ядра. Лучший практический подход — использовать утилиту fstrim и запускать её по расписанию (systemd timer или cron). Это даёт баланс между производительностью и обслуживанием SSD.
Важно: перед автоматизацией проверьте поддержку TRIM у вашего SSD и протестируйте влияние на производительность в вашей среде.
Кредит изображения: Mace Ojala on Flickr (cropped)
Похожие материалы
Purgeable в macOS Sierra: как освобождать место
Удаление пароля root в Linux — зачем и как
Трансляция Skype в Mixlr на macOS
Создать живые плитки игр в Windows 10
Ускорить медленно открывающуюся папку Windows