Прорпало место на VDS под управлением Linux Ubuntu? Давайте искать.
Мониторинг места
На сервере начните с обзора файловых систем: df -h покажет общий и свободный объём по разделам, а df -i — расход инодов, что важно при большом количестве мелких файлов. Для локализации «тяжёлых» директорий используйте du -xh --max-depth=1 по ключевым путям вроде /, /var, /home, чтобы увидеть суммарный размер на уровне каталогов. Эти базовые команды дают мгновенную картину, где именно убывает место и есть ли проблемы не только с байтами, но и с количеством инодов.
Быстрый аудит: ncdu
ncdu — интерактивный «ду» с текстовым интерфейсом: удобно проваливаться по каталогам, сортировать по объёму и удалять лишнее прямо из интерфейса. Установите и запустите: sudo apt update && sudo apt install ncdu, затем sudo ncdu / для аудита с правами администратора по всему диску. ncdu упрощает расследование «куда делось место» в /var, /home, /opt и позволяет сфокусироваться на реально крупных узлах.
Где растут логи
Системные двоичные журналы systemd хранятся в /var/log/journal и управляют собственным ретеншеном по лимитам SystemMaxUse и SystemKeepFree. Проверить текущий объём просто: journalctl --disk-usage покажет, сколько место занимают журналы и нужно ли урезать ретеншен. Помните, journald умеет автоматически подчищать старые записи при нехватке места, но лучше явно задать верхние пределы под ваш VDS.
Ограничение объёма journald
Создайте drop-in файл /etc/systemd/journald.conf.d/size.conf с параметрами, например: SystemMaxUse=500M и SystemKeepFree=15% для гарантии свободного пространства. После изменения конфигурации перезапустите службу: systemctl restart systemd-journald, чтобы немедленно применить новые границы по месту. Семейство параметров journald.conf официально документировано, включая единицы измерения и поведение «compact mode».
Ручная чистка журнала
Для разовой очистки воспользуйтесь «пылесосом» журнала: journalctl --vacuum-size=200M ограничит архивы до заданного объёма. Альтернативно можно срезать по времени, например journalctl --vacuum-time=7d для хранения только последней недели. Эти команды безопасно удаляют лишь устаревшие архивы журнала без вмешательства в текущую запись логов.
Logrotate для текстовых логов
Текстовые логи в /var/log ротуются logrotate: он архивирует, сжимает, удаляет старые файлы по политике, чтобы логи не съедали весь диск. Создайте политику в /etc/logrotate.d/ для приложений, используя директивы daily/weekly, rotate N, compress, missingok, notifempty и др. Проверить конфиг можно без выполнения ротации через logrotate /etc/logrotate.conf --debug, а принудительно запустить через -f.
Удаление старых файлов
Для возрастной очистки используйте find, например удалить файлы старше 30 дней: find /path -type f -mtime +30 -delete. Безопаснее сначала посмотреть, что будет удалено: find /path -type f -mtime +30 -print, а затем применять -delete или -exec rm -f {} ;. Подход годится для бэкапов, временных и архивных логов, если политика хранения соблюдена и путь задан точно.
Очистка APT и кешей
Кеш пакетов накапливается в /var/cache/apt/archives и может занимать гигабайты на небольших VDS. Очистка: sudo apt clean вычищает весь кеш, sudo apt autoclean — только устаревшие .deb, а sudo apt autoremove удаляет больше не нужные зависимости и старые ядра. Комбинация autoclean + autoremove обычно безопасна для плановой профилактики пространства.
Инструменты: сравнение
Где обычно «тяжелеет»
/var/log/journal и архивы journald при активных сервисах и без лимитов SystemMaxUse. Текстовые логи в /var/log без корректной политики logrotate или при ошибках приложений с чрезмерным логированием. Кеши APT в /var/cache/apt/archives и исторические сборки/артефакты в рабочих каталогах.
Автоматизация
Ротация logrotate подключается системой автоматически и применяется регулярно согласно cron/timer, если конфигурации в /etc/logrotate.d/ заданы корректно. Для собственных архивов и временных файлов автоматизируйте find в cron, чтобы удалять старше N дней по безопасным путям. Перед автоматизацией протестируйте «сухим» запуском (print/--debug), чтобы исключить удаление нужных данных.
Практические команды
Ограничить journald: создать /etc/systemd/journald.conf.d/size.conf с SystemMaxUse=500M и SystemKeepFree=15%, затем systemctl restart systemd-journald.
Разово почистить журнал: journalctl --vacuum-time=7d или --vacuum-size=200M.
Настроить logrotate: политика с daily, rotate 7, compress в /etc/logrotate.d/имя.
Проверить logrotate: logrotate /etc/logrotate.conf --debug.
Удалить старые файлы: find /var/log -type f -mtime +30 -delete (сначала -print).
Очистить кеши APT: sudo apt autoclean; sudo apt autoremove; при необходимости sudo apt clean.