Как освободить место на сервере Linux: удаление логов, кешей и мусора вручную и автоматически

Введение

На 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.

Заключение

Теперь ваш сервер не будет внезапно падать из-за заполненного диска. Мы рассмотрели:

  • ✅ Ручную диагностику и поиск мусора
  • ✅ Очистку логов и временных файлов
  • ✅ Удаление старых пакетов и ядер
  • ✅ Скрипт автоматической очистки и запуск по расписанию