Периодическая очистка неиспользуемых блоков не работает
Периодическая очистка неиспользуемых блоков продлевает срок службы твердотельных носителей и ускоряет запись. Её отказ ничего не ломает сразу, поэтому остаётся незамеченным месяцами, а последствия проявляются как постепенное падение скорости записи.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Устройство или файловая система не поддерживают операцию
На виртуальных дисках и за некоторыми контроллерами операция недоступна. Задача сообщает об отказе.
-
Смонтировано с параметром, запрещающим операцию
Часть параметров монтирования отключает операцию для раздела.
-
Таймер не включён
Задача есть, таймер выключен. Очистка не выполняется никогда, и об этом ничего не сообщается.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Результат последних запусков очистки.
journalctl -u fstrim.service -n 30 --no-pagerПоддерживают ли устройства операцию очистки.
lsblk -D -o NAME,DISC-GRAN,DISC-MAXВключён ли таймер и когда сработает.
systemctl list-timers fstrim.timer --all --no-pagerРешение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- На виртуальных дисках и за некоторыми контроллерами операция недоступна. Задача сообщает об отказе.
- Как проверить
-
Посмотрите результат задачи и поддержку операции.
journalctl -u fstrim.service -n 20 --no-pager lsblk -D -o NAME,DISC-GRAN,DISC-MAX | head
- Как исправить
- Если поддержки нет, отключите таймер: постоянно падающая задача засоряет журнал и маскирует настоящие отказы.
- Почему происходит
- Часть параметров монтирования отключает операцию для раздела.
- Как проверить
-
Посмотрите параметры монтирования.
findmnt -o TARGET,FSTYPE,OPTIONS | head -10
- Как исправить
- Уберите мешающий параметр либо смиритесь с отсутствием очистки на этом разделе. Постоянная очистка при монтировании — альтернатива периодической, но медленнее при удалении файлов.
- Почему происходит
- Задача есть, таймер выключен. Очистка не выполняется никогда, и об этом ничего не сообщается.
- Как проверить
-
Посмотрите состояние таймера.
systemctl is-enabled fstrim.timer 2>/dev/null; systemctl list-timers fstrim.timer --all --no-pager
- Как исправить
-
Включите таймер на машинах с твердотельными носителями. Для виртуальных машин это решает и вопрос возврата места гипервизору.
sudo systemctl enable --now fstrim.timer
Пример вывода
Операция не поддерживается устройством. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
fstrim[11400]: fstrim: /: the discard operation is not supported
systemd[1]: fstrim.service: Main process exited, code=exited, status=1/FAILURE
systemd[1]: Failed to start fstrim.service - Discard unused blocks on filesystems from /etc/fstab.
Связанные ошибки
- Таймер не работает после перезагрузки Таймер работал, пока его запускали вручную, но после перезагрузки не активен: не выполнено включение или нет WantedBy=timers.target.
- Таймер продолжает запускать падающую службу Задание падает при каждом срабатывании, а таймер работает как ни в чём не бывало: состояния таймера и службы независимы.
- No space left on device в журнале службы Нет места на устройстве: разбор по свободным блокам, по inode, по журналу systemd и по удалённым, но открытым файлам.
- Failed to parse calendar expression: ошибка в OnCalendar systemd не разбирает календарное выражение таймера. Правила записи OnCalendar и проверка через systemd-analyze calendar.
- File corrupted or uncleanly shut down, renaming and replacing Журнал повреждён после жёсткой перезагрузки: что означает сообщение и когда нужно вмешательство.
- I/O error, dev sda, sector N: ошибка носителя Ядро сообщает об ошибке чтения или записи на устройстве. Что делать со службой и данными.
- Mount process exited, code=exited, status=32: не найдено устройство Монтирование не проходит: устройство или UUID не найдены, неверная файловая система, недоступен сетевой ресурс. Код 32 от команды mount.
- You are in emergency mode: система не загрузилась Загрузка остановилась в аварийном режиме. Что проверять: fstab, файловые системы, цель по умолчанию. Как войти и починить.
Источники
-
fstrim(8)
Очистка неиспользуемых блоков и поддержка устройств. -
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено на виртуальном диске без поддержки операции.