Введение / Зачем это нужно
Со временем любая Linux-система накапливает кэши, старые ядра, логи и временные файлы. Это замедляет работу и может привести к сбоям, если закончится место на корневом разделе. В этом гайде вы узнаете, как найти «тяжёлые» объекты и безопасно их удалить, освободив диск без риска для стабильности системы.
Требования / Подготовка
- Пользователь с правами
sudo. - Основные утилиты:
ncdu,du,apt,journalctl. При необходимости установите их через пакетный менеджер. - Убедитесь, что у вас есть актуальная резервная копия важных данных перед удалением системных компонентов.
Шаг 1: Анализ занятого места
Начните с поиска самых больших директорий. Это сэкономит время и предотвратит случайное удаление нужных данных.
# Установите ncdu, если её нет
sudo apt install ncdu -y
# Пройдитесь по корню в интерактивном режиме
sudo ncdu /
Альтернатива для быстрой оценки:
sudo du -sh /* 2>/dev/null | sort -h
Обратите внимание на /var, /home, /snap и /usr. Именно там чаще всего скапливается лишний вес.
Шаг 2: Очистка кэша пакетов
Установленные, но уже ненужные пакеты и их зависимости могут занимать сотни мегабайт.
# Удалить скачанные deb-файлы
sudo apt clean
# Удалить автоматически установленные, но больше не нужные пакеты
sudo apt autoremove --purge
💡 Совет: Команда
apt cleanбезопасна — при необходимости пакеты скачаются заново из репозиториев.
Шаг 3: Удаление старых ядер
Оставьте текущее ядро и одно предыдущее для отката. Удаление остальных освободит заметное место.
# Узнать загруженное ядро
uname -r
# Список установленных ядер
dpkg --list | grep linux-image
dpkg --list | grep linux-headers
Удалите старые версии (замените x.x.x-xx на реальные версии, которые хотите удалить):
sudo apt purge linux-image-x.x.x-xx-generic linux-headers-x.x.x-xx-generic
sudo apt autoremove --purge
⚠️ Важно: Не удаляйте текущее ядро и не удаляйте все предыдущие — оставьте хотя бы одно запасное.
Шаг 4: Ротация и очистка логов
Системные журналы могут разрастаться до гигабайт, особенно если какие-то сервисы пишут ошибки в цикле.
# Обрезать системные журналы до заданного размера
sudo journalctl --vacuum-size=500M
# Проверить настройки logrotate
cat /etc/logrotate.conf
ls /etc/logrotate.d/
Для очень больших логов можно принудительно ротировать конкретный файл:
sudo logrotate -f /etc/logrotate.d/rsyslog
Шаг 5: Управление снапшотами и контейнерами
Инструменты вроде Timeshift или Snapper могут хранить десятки снапшотов, а Docker — неиспользуемые образы и тома.
# Удалить неиспользуемые данные Docker (образы, контейнеры, сети, кэш)
sudo docker system prune -a
# Для снапшотов используйте графические утилиты или консольные команды
# Пример для Snapper (проверьте свой профиль)
sudo snapper list
sudo snapper delete <номер>
Регулярно уменьшайте количество хранимых снапшотов в настройках программ резервного копирования.
Шаг 6: Периодическое обслуживание
Настройте автоматическую очистку, чтобы проблема не возвращалась.
# Включить TRIM для SSD (еженедельно)
sudo systemctl enable fstrim.timer
sudo systemctl start fstrim.timer
# Настроить очистку /tmp через systemd-tmpfiles
cat /etc/tmpfiles.d/tmp.conf
sudo systemd-tmpfiles --clean
Добавьте в cron или пользовательские systemd-таймеры регулярный вызов apt autoremove и journalctl --vacuum-size, если это соответствует вашей политике обслуживания.
Проверка результата
Убедитесь, что место действительно освободилось:
df -h /
ncdu /
Проверьте, нет ли резких скачков в логах:
sudo journalctl -p 3 -xb
Если занятое место снова быстро растёт, используйте iotop или lsof +L1, чтобы найти процессы, интенсивно пишущие на диск.
Возможные проблемы
- Ошибки при удалении пакетов — могут возникнуть, если нарушены зависимости. Попробуйте
sudo apt --fix-broken installперед повторной очисткой. - Невозможно удалить файл, так как занят процессом — найдите процесс через
lsof /путь/к/файлуи завершите его, если это безопасно. - Слишком большой размер
/var/logдаже после очистки — проверьте, не пишет ли какой-то сервис дампы или логи отладки. Настройте лимиты вlogrotateили отключите избыточное логирование в конфигурации сервиса.