Введение
На VPS, домашнем сервере или одноплатном компьютере (например, Orange Pi с Ubuntu Server) свободное место может внезапно закончиться. Причины — логи, временные файлы, кеши обновлений, старые ядра, забытые бэкапы.
В этой статье разберём ручные методы анализа и очистки, а также автоматизацию с помощью скриптов и cron.
1. Проверка занятого места
df -h /
Для показа по каталогам:
du -h --max-depth=1 / | sort -hr | head -n 20
Или интерактивно:
sudo ncdu /
(установить: sudo apt install ncdu
)
2. Удаление логов
2.1 Очистка journalctl
Проверим объём:
journalctl --disk-usage
Очистим логи старше 7 дней:
sudo journalctl --vacuum-time=7d
Или ограничим до 200 МБ:
sudo journalctl --vacuum-size=200M
2.2 Очистка /var/log
Удалим .log старше 14 дней:
sudo find /var/log -type f -name "*.log" -mtime +14 -exec rm -f {} \;
Или всё содержимое:
sudo rm -rf /var/log/*.gz /var/log/*.1 /var/log/*.old
3. Очистка кеша APT и лишних пакетов
sudo apt autoremove --purge -y
sudo apt clean
sudo apt autoclean
4. Удаление старых ядер (если не используется snap или zfs)
Проверим:
dpkg --list | grep linux-image
Удалим старые:
sudo apt remove --purge linux-image-
Или с помощью purge-old-kernels:
sudo apt install byobu
sudo purge-old-kernels --keep 2 -qy
5. Очистка /tmp, /var/tmp
sudo rm -rf /tmp/*
sudo rm -rf /var/tmp/*
Либо:
sudo systemd-tmpfiles --clean
6. Поиск больших файлов
sudo find / -type f -size +100M -exec ls -lh {} \; | awk '{ print $NF ": " $5 }'
7. Автоматизация: скрипт очистки
Создайте файл /usr/local/bin/clean_disk.sh
:
#!/bin/bash
echo "[+] Очистка journalctl"
journalctl --vacuum-time=7d
echo "[+] Очистка старых логов"
find /var/log -type f -name "*.log" -mtime +14 -exec rm -f {} \;
echo "[+] Очистка временных файлов"
rm -rf /tmp/* /var/tmp/*
echo "[+] Очистка APT-кеша"
apt autoremove --purge -y
apt clean
Сделайте его исполняемым:
chmod +x /usr/local/bin/clean_disk.sh
8. Настройка запуска по расписанию
Откройте crontab:
sudo crontab -e
Добавьте строку (раз в неделю, в 03:00):
0 3 * * 0 /usr/local/bin/clean_disk.sh >> /var/log/clean_disk.log 2>&1
9. Бонус: уведомление на почту (опционально)
В начало скрипта можно добавить:
MAILTO="admin@yourdomain.com"
Убедитесь, что установлен mailutils или другой MTA.
Заключение
Теперь ваш сервер не будет внезапно падать из-за заполненного диска. Мы рассмотрели:
- ✅ Ручную диагностику и поиск мусора
- ✅ Очистку логов и временных файлов
- ✅ Удаление старых пакетов и ядер
- ✅ Скрипт автоматической очистки и запуск по расписанию