Ротация и место на диске
Сценарий всегда один: df показывает сто процентов, сервис лёг, и надо освободить место прямо сейчас, а разбираться потом.
Найти виновника
Сначала — какой раздел
-h для читаемых размеров, -x tmpfs убирает виртуальные файловые системы из вывода.
Потом — какой каталог
Спускаться по одному уровню за раз быстрее, чем ждать полный обход.
Крупные файлы точечно
Место кончилось, а du ничего не находит
Скорее всего, кончились не байты, а иноды. Такое бывает от миллионов мелких файлов в кэше или очереди.
Самая частая ошибка
rm на открытом логе не освобождает место
Пока процесс держит дескриптор, файл существует для ядра, хоть его и нет в каталоге. Место вернётся только после перезапуска сервиса.
Если уже удалили
lsof +L1 показывает открытые файлы с нулевым числом ссылок — то есть удалённые, но всё ещё занимающие место.
Дальше два варианта: перезапустить процесс из колонки COMMAND либо обнулить файл через /proc: : > /proc/PID/fd/N, где N — номер дескриптора из вывода lsof.
logrotate
Минимальный рабочий конфиг
Кладётся в /etc/logrotate.d/app. Имя файла произвольное, расширения быть не должно.
Что здесь важно
maxsizeвместе сdaily— ротация раз в сутки, но досрочно, если файл раздулся. Без него один плохой день переполняет диск.delaycompressоткладывает сжатие на один цикл. Нужен, когда процесс ещё пишет в только что повёрнутый файл.notifemptyне плодит пустые архивы.missingokне роняет весь прогон logrotate, если конкретного файла нет.sharedscriptsвыполняетpostrotateодин раз на всю группу, а не для каждого файла.
Когда приложение не умеет переоткрывать файл
copytruncate копирует содержимое и обнуляет оригинал, не трогая дескриптор. Ценой возможной потери строк, записанных между копированием и обнулением.
Проверить, не дожидаясь суток
-d — сухой прогон, ничего не меняет и показывает решения. -f — принудительная ротация.
Если -d говорит, что ротация не нужна, а вы уверены в обратном — посмотрите /var/lib/logrotate/status. Там записана дата последнего прогона по каждому шаблону.
Журнал systemd
Ограничить раз и навсегда
В /etc/systemd/journald.conf: