Debian 12 – стабильный и надёжный серверный дистрибутив, но даже на нём время от времени требуется чистка и оптимизация для освобождения места на диске и поддержания производительности. В этой статье рассмотрим основные этапы и инструменты для оптимизации.
1. Проверка дискового пространства
Сначала увидим текущую загрузку диска:
df -h
Просмотр размера каталогов в корневом разделе:
du -h --max-depth=1 /
Это позволит определить «тяжёлые» папки.
2. Очистка кэша пакетного менеджера
APT сохраняет установочные пакеты в кэше, чтобы не загружать их повторно.
Очистить весь кэш:
apt clean
Удалить устаревшие пакеты из кэша:
apt autoclean
3. Удаление неиспользуемых и зависимых пакетов
Через время системный мусор накапливается в виде неиспользуемых библиотек:
apt autoremove
Удаляет файлы конфигурации от уже удалённых пакетов:
sudo apt purge $(dpkg -l | grep '^rc' | awk '{print $2}')
4. Очистка журналов системы
Логи могут занимать много места, особенно systemd-journal.
Просмотр размера логов:
du -sh /var/log/*
Очистка журналов systemd старше 7 дней
journalctl --vacuum-time=7d
Удаление всех журналов (будь осторожен, это стирает логи):
rm -rf /var/log/journal/*
systemctl restart systemd-journald
Полное удаление журналов может затруднить диагностику, если потребуется.
Также можно очистить старые файлы логов btmp и wtmp, которые отвечают за логи входов:
> /var/log/btmp
> /var/log/btmp.1
> /var/log/wtmp
5. Поиск и очистка больших файлов
Чтобы отыскать файлы, которые занимают много места (например больше 100 МБ):
find / -xdev -type f -size +100M -exec ls -lh {} \;
Просмотри эти файлы и удали или перемести ненужные.
6. Чистка домашнего кэша
Пользовательские кэши могут расти многократно.
Для root:
rm -rf /root/.cache/*
Для обычного пользователя:
rm -rf ~/.cache/*
7. Управление swap
Чтобы улучшить производительность, иногда полезно проверить swap.
Просмотр swap:
swapon --show
free -h
Отключение swap (временно):
swapoff -a
Важно: после отключения swap он останется выключенным, пока не включить его вручную или не перезагрузить сервер.
Чтобы очистить swap без перезагрузки, рекомендуем сделать отключение и повторное включение:
swapoff -a
swapon -a
Это освободит swap и вернёт его в работу без перезапуска системы.
8. Оптимизация и очистка системных служб
Смотреть и отключать неиспользуемые службы:
systemctl list-unit-files --state=enabled
systemctl disable имя_службы
9. Проверка и очистка временных файлов в /tmp
Перед тем как удалять файлы из /tmp, рекомендуется проверить, что там нет важных или используемых системой и процессами данных.
Проверка содержимого /tmp
Посмотреть список файлов и их даты создания:
ls -lht /tmp
Если выводимый список пустой (total 0), значит в /tmp сейчас нет файлов – удалить можно безопасно.
Проверка занятости /tmp процессами
Посмотреть, какие процессы используют файлы в /tmp:
lsof +D /tmp
Если команда не найдена, установи инструмент:
apt install lsof
Если вывод пуст – значит процессы не блокируют /tmp и файлы не используются.
Дополнительная проверка процессов с /tmp
Можно посмотреть процессы, работающие с временной папкой:
fuser -v /tmp
Если этот вывод пустой, то /tmp свободна для очистки.
Проверка устаревших файлов
Найти файлы в /tmp старше одного дня:
find /tmp -type f -mtime +1 -ls
Это поможет выявить старые временные файлы, которые можно удалить без риска.
Итоги
- Если папка /tmp пуста – удаление безопасно.
- Если процессы не используют файлы в /tmp – можно удалять спокойно.
- Старые файлы в /tmp обычно можно удалять для освобождения места и улучшения производительности.
- Перед очисткой рекомендуется внимательно проверить содержимое и занятость /tmp, чтобы не нарушить работу активных приложений.
И после проверки можно очистить временные файлы:
rm -rf /tmp/*
[!caution] ОПАСНО: Не очищайте
/tmpвслепую!
Никогда не выполняйтеrm -rf /tmp/*на «живом» рабочем сервере без последующей перезагрузки. Многие службы (например, базы данных или веб-серверы) создают там свои сокеты, блокировки и временные файлы во время работы. Если их внезапно удалить, службы могут «упасть» или начать вести себя непредсказуемо. Пользуйтесь либо автоматикой скрипта (которая проверяет занятость файлов), либо удаляйте только то, что точно устарело.
10. Обновление и оптимизация системы
Обновить пакеты до последних версий:
apt update && apt upgrade -y
Проверить целостность установленных пакетов и очистить неиспользуемые:
# Установка (если не установлен):
apt install deborphan -y
# Запуск поиска сирот:
deborphan
11. Автоматизация очистки: настройка cron
Пример задания в cron для очистки кэша пакетов и старых логов еженедельно.
Файл /etc/cron.weekly/cleanup
Открываем:
nano /etc/cron.weekly/cleanup
Вставляем:
#!/bin/bash
# Скрипт для автоматической очистки кэша, неиспользуемых пакетов, системных журналов и временных файлов /tmp
# Выполнять только с правами root!
echo "cleanup запущен: $(date)" >> /var/log/cleanup.log
echo "Начинаем очистку системы..." >> /var/log/cleanup.log
# Полные пути к командам
APT_BIN="/usr/bin/apt"
JOURNALCTL_BIN="/usr/bin/journalctl"
LSOF_BIN="/usr/bin/lsof"
FIND_BIN="/usr/bin/find"
RM_BIN="/bin/rm"
# Очистка кэша APT
$APT_BIN clean
# Удаление неиспользуемых пакетов
$APT_BIN autoremove -y
# Важно: рекомендуется использовать команду 'journalctl --vacuum-size=500M' для безопасного ограничения размера системных журналов.
# Полное удаление папки /var/log/journal/ может привести к потере важных логов и усложнить диагностику системы.
# Ограничение размера системных журналов до 500 МБ
$JOURNALCTL_BIN --vacuum-size=500M
# Проверяем, используются ли файлы в /tmp процессами
if $LSOF_BIN +D /tmp >/dev/null 2>&1; then
echo "Предупреждение: В /tmp есть файлы, занятые процессами. Полная очистка отложена." >> /var/log/cleanup.log
echo "Удаляем только файлы в /tmp старше одного дня..." >> /var/log/cleanup.log
$FIND_BIN /tmp -mindepth 1 -mtime +1 -exec $RM_BIN -rf {} +
else
echo "Файлы в /tmp не заняты процессами. Выполняем полную очистку /tmp." >> /var/log/cleanup.log
# Удаляем все файлы в /tmp, включая скрытые (кроме . и ..)
$RM_BIN -rf /tmp/* /tmp/.[!.]*
fi
echo "Очистка завершена." >> /var/log/cleanup.log
Этот скрипт проверяет, заняты ли файлы в /tmp, и если да – безопасно удаляет только устаревшие (старше суток). Если /tmp свободна – удаляет всё полностью.
Дать права на выполнение:
chmod +x /etc/cron.weekly/cleanup
11.1 Ручная очистка Docker и системных журналов
Если в вашей системе ещё нет автоматизированных заданий для очистки Docker и логов, можно выполнять эти действия вручную.
Внимание:
Команда docker system prune -a --volumes -f удаляет все остановленные контейнеры, неиспользуемые образы, тома и сети. Это может привести к потере данных, если важные тома или контейнеры не используются в данный момент, но нужны вам позже. Перед выполнением убедитесь, что вы не потеряете нужную информацию.
Для очистки неиспользуемых данных Docker выполните команду:
docker system prune -a --volumes -f
Она удалит все остановленные контейнеры, неиспользуемые образы, тома и сети.
[!WARNING] КРИТИЧЕСКОЕ ПРЕДУПРЕЖДЕНИЕ
Командаdocker system prune -a --volumes– это «ядерный вариант». Она удалит абсолютно всё. Если у вас есть база данных в контейнере, который сейчас остановлен – её данные могут быть безвозвратно стёрты вместе с томами (volumes). Будьте предельно осторожны!
Если Docker не используется длительное время, можно временно остановить сервис и отключить его автозапуск:
sudo systemctl stop docker
sudo systemctl disable docker
Это освободит системные ресурсы и предотвратит автоматический запуск Docker при загрузке.
Для уменьшения размера системных журналов выполните:
journalctl --vacuum-size=500M
Эта команда оставит в журналах только 500 МБ самых свежих записей, удаляя старые.
Чтобы убедиться, что команды работают правильно при автоматическом запуске (например, в cron), рекомендуется использовать полные пути к ним.
Узнать полный путь легко:
which docker
which journalctl
Чаще всего это:
/usr/bin/docker
/usr/bin/journalctl
В следующих разделах рассмотрим, как настроить автоматическую очистку с учётом этого.
11.2 Настройка автоматической очистки через cron
Откройте редактор crontab от имени root:
sudo crontab -e
Добавьте строку для еженедельного выполнения очистки (например, каждый понедельник утром в 3 часа):
0 3 * * 1 /usr/bin/docker system prune -a --volumes -f && /usr/bin/journalctl --vacuum-size=500M >/dev/null 2>&1
Итоги
Регулярная очистка и мониторинг позволит поддерживать Debian 12 в оптимальном состоянии:
- Очистка кэша и неиспользуемых пакетов
- Контроль журналов и лимит их размера
- Поиск и удаление больших ненужных файлов
- Управление службами и swap
12. Команды для проверки работы скрипта и автозапуска через cron
Проверка прав и местоположения скрипта
ls -l /etc/cron.weekly/cleanup
Запуск скрипта вручную
sudo /etc/cron.weekly/cleanup
Просмотр лога работы скрипта
cat /var/log/cleanup.log
Проверка статуса службы cron
systemctl status cron
Проверка логов cron через системный журнал
grep CRON /var/log/syslog
Проверка логов cron через systemd journal
journalctl -u cron