Введение / Зачем это нужно
Дисковое пространство на сервере или рабочей станции Linux может заканчиваться по разным причинам: накопление кэша пакетов, рост логов, временные файлы, старые версии программ или "сиротские" файлы. Неконтролируемое использование диска приводит к замедлению системы, ошибкам записи и даже сбоям служб. Этот гайд поможет вам системно подойти к очистке диска, начиная с анализа и заканчивая безопасным удалением ненужных данных. Вы научитесь использовать стандартные утилиты и команды, которые работают на большинстве дистрибутивов.
Требования / Подготовка
Перед началом убедитесь, что:
- У вас есть доступ к терминалу с правами суперпользователя (sudo) для удаления системных файлов.
- Вы знаете, какие данные на системе критичны. При сомнениях — сделайте резервную копию важных каталогов.
- Установлены базовые утилиты:
df,du,find,sort. Для расширенного анализа рекомендуется установитьncdu(sudo apt install ncduилиsudo yum install ncdu). - Если на системе установлен Docker, убедитесь, что служба запущена (
systemctl status docker).
⚠️ Важно: Не удаляйте файлы в системных каталогах (
/bin,/sbin,/usr,/etc), если не уверены в их назначении. Это может привести к неработоспособности системы.
Шаг 1: Анализ использования дискового пространства
Прежде чем удалять что-либо, нужно понять, что занимает место.
Проверка свободного места на разделах
df -h
Команда df (disk free) показывает использование файловых систем в удобочитаемом виде (-h — human-readable). Обратите внимание на процент использования (Use%) и точку монтирования (Mounted on). Если какой-то раздел заполнен на 90%+, это приоритет для очистки.
Поиск больших каталогов
sudo du -sh /* 2>/dev/null | sort -rh | head -n 20
du (disk usage) оценивает использование каталогов. -s — суммарный размер, -h — удобный формат. Мы проверяем корневые каталоги (/*), перенаправляем ошибки (например, "Permission denied") в /dev/null, сортируем по убыванию (sort -rh) и берем топ-20. Это покажет, какие каталоги самые большие.
Интерактивный анализ с ncdu
Если установлен ncdu, это самый удобный способ:
sudo ncdu /
Инструмент позволяет перемещаться по каталогам, видеть размеры и удалять файлы прямо из интерфейса (клавиша d). Будьте осторожны: удаление из ncdu необратимо.
Шаг 2: Очистка кэша пакетного менеджера
Пакетные менеджеры хранят скачанные архивы пакетов, которые после установки часто не нужны.
Для APT (Debian, Ubuntu, Mint)
sudo apt-get clean
Удаляет все файлы из кэша (/var/cache/apt/archives). Это безопасно, но при последующей установке пакетов их придется скачивать заново.
Если хотите очистить только устаревшие версии пакетов (освободит меньше места):
sudo apt-get autoclean
Для YUM/DNF (RHEL, CentOS, Fedora)
sudo yum clean all
или для DNF:
sudo dnf clean all
Удаляет кэш метаданных и пакетов из /var/cache/yum или /var/cache/dnf.
Для Pacman (Arch Linux)
sudo pacman -Scc
Очищает весь кэш пакетов. Будьте осторожны: вы не сможете откатиться на предыдущие версии пакетов без перескачивания.
Для Zypper (openSUSE)
sudo zypper clean
Шаг 3: Удаление старых ядер и неиспользуемых пакетов
Системы Linux часто оставляют старые версии ядра после обновлений. Каждое ядро занимает 100-300 МБ.
Для APT
sudo apt-get autoremove --purge
Удалит пакеты, установленные как зависимости, но больше не нужные, включая старые ядра. Флаг --purge также удаляет конфигурационные файлы.
Если нужно удалить конкретное старое ядро:
dpkg -l 'linux-image*' # список установленных ядер
sudo apt-get remove linux-image-5.4.0-XX-generic
Для DNF/YUM
sudo dnf autoremove
или
sudo yum autoremove
Для Pacman
sudo pacman -Rns $(pacman -Qdtq)
Удаляет "сиротские" зависимости (пакеты, установленные как зависимости, но не являющиеся зависимостями ни для одного установленного пакета). Будьте осторожны: команда может удалить важные пакеты, если они были установлены вручную. Проверьте список перед удалением:
pacman -Qdtq
Шаг 4: Очистка временных файлов
Временные файлы накапливаются в стандартных каталогах и в домашних директориях пользователей.
Очистка /tmp и /var/tmp
sudo rm -rf /tmp/*
sudo rm -rf /var/tmp/*
⚠️ Внимание: Убедитесь, что нет важных процессов, которые используют эти каталоги. Лучше удалять файлы старше 10 дней:
sudo find /tmp -type f -atime +10 -delete
sudo find /var/tmp -type f -atime +10 -delete
Очистка кэша пользователя
Для текущего пользователя:
rm -rf ~/.cache/*
Для всех пользователей (требует sudo):
sudo rm -rf /home/*/.cache/*
Или используйте ncdu для анализа ~/.cache.
Шаг 5: Очистка логов
Логи в /var/log могут разрастаться, особенно если приложения пишут в них без ротации.
Удаление старых сжатых логов
sudo find /var/log -type f -name "*.gz" -delete
Удаляет сжатые архивы логов (обычно это старые логи, уже ротированные).
Очистка активных логов (осторожно!)
sudo find /var/log -type f -name "*.log" -size +100M -delete
Удаляет лог-файлы больше 100 МБ. Перед удалением проверьте, можно ли их сжать (gzip) или ротировать через logrotate.
Проверка и очистка systemd journal (если используется)
sudo journalctl --disk-usage
Показывает текущий размер журнала systemd. Ограничьте его:
sudo journalctl --vacuum-size=100M
Удалит старые записи, оставив не более 100 МБ. Или по времени:
sudo journalctl --vacuum-time=3d
Оставит записи за последние 3 дня.
Шаг 6: Поиск и удаление больших файлов
Иногда место занимают "забытые" файлы: iso-образы, архивы, дампы.
Поиск файлов больше N МБ
sudo find / -type f -size +500M -exec ls -lh {} \; 2>/dev/null | awk '{ print $5, $9 }'
Ищет файлы больше 500 МБ и выводит их размер и путь. Измените +500M на нужный размер.
Поиск больших каталогов (альтернатива du)
sudo du -a / 2>/dev/null | sort -n -r | head -n 30
Покажет топ-30 самых больших файлов и каталогов во всей системе.
Удаление конкретного файла
После нахождения файла убедитесь, что он не нужен, и удалите:
sudo rm -f /путь/к/файлу
Шаг 7: Очистка Docker (если установлен)
Docker быстро заполняет диск образами, контейнерами и томами.
Просмотр использования
docker system df
Показывает место, занятое образами, контейнерами, томами и кэшем сборки.
Очистка всего неиспользуемого
docker system prune -a
Удалит:
- Все остановленные контейнеры
- Неиспользуемые образы (включая dangling и unreferenced)
- Неиспользуемые сети
- Кэш сборки
Флаг
-aудаляет также неиспользуемые образы, а не только dangling.
Точечная очистка
docker image prune -a # только образы
docker container prune # только контейнеры
docker volume prune # только тома
💡 Совет: Добавьте
--filter "until=24h"чтобы удалить только объекты старше 24 часов.
Шаг 8: Дополнительные методы (по необходимости)
Очистка кэша браузеров (для десктоп-систем)
- Firefox:
rm -rf ~/.cache/mozilla/firefox/*.default/cache2/ - Chrome/Chromium:
rm -rf ~/.cache/google-chrome/Default/Cache/ - Edge:
rm -rf ~/.cache/microsoft-edge/Default/Cache/
Очистка кэша Flatpak/Snap
flatpak uninstall --unused # Flatpak
sudo snap set system refresh.retain=2 # Оставить только 2 последних версии snap-пакетов
Очистка кэша компиляторов
sudo rm -rf /var/lib/apt/lists/* # кэш метаданных APT (уже удален в шаге 2, но можно заново)
sudo rm -rf /usr/share/doc/*/ # документация пакетов (может занимать много)
Проверка результата
После всех очисток проверьте, сколько места освободилось:
df -h
Сравните с исходными данными. Убедитесь, что критически важные разделы (например, / или /var) теперь имеют запас свободного места (минимум 10-15%).
Также проверьте, что службы работают нормально:
systemctl status --type=service --state=running
Если какие-то службы упали, возможно, вы удалили их логи или файлы блокировок.
Возможные проблемы
1. "Нет свободного места" при выполнении команд
Некоторые команды (например, apt-get) требуют свободного места для работы. Если место закончилось полностью:
- Удалите самые большие файлы, найденные на шаге 6.
- Временно переместите большие файлы на другой раздел или внешний диск.
- Увеличьте размер раздела (если есть возможность).
2. Файлы удалены, но место не освободилось
Это происходит, если файл открыт процессом (например, лог-файл, который удалили, но процесс продолжает писать в него). Найдите такие файлы:
sudo lsof | grep deleted
В выводе будут строки вида:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsyslogd 1234 root 1w REG 8,1 1024000 123456 /var/log/syslog (deleted)
Перезапустите процесс (например, sudo systemctl restart rsyslog), или перезагрузите систему.
3. Удалены важные файлы
Если случайно удалили системный файл:
- Восстановите из резервной копии.
- Переустановите поврежденный пакет:
sudo apt-get install --recover пакет - В крайнем случае — восстановите из установочного носителя.
4. После очистки кэша пакетов не работает apt-get update
Убедитесь, что вы не удалили кэш метаданных (/var/lib/apt/lists). Если удалили, выполните:
sudo apt-get update
5. Docker не запускается после docker system prune
Если удалили нужные сети или тома, проверьте конфигурацию контейнеров. Возможно, потребуется пересоздать контейнеры:
docker-compose up -d # если используете docker-compose
Заключение
Регулярная очистка диска — важная часть обслуживания Linux-системы. Рекомендуется:
- Анализировать использование диска раз в месяц с помощью
ncdu. - Настроить автоматическую ротацию логов через
logrotate. - Ограничивать размер кэша пакетов (например, для APT:
APT::Keep-Downloaded-Packages "0";в/etc/apt/apt.conf.d/). - Для Docker-хостов настроить
--data-rootна отдельный раздел или использовать volume-драйверы.
Эти шаги помогут поддерживать систему в чистоте и избежать внезапного заполнения диска.