[Инструкция] Полная инструкция по оптимизации и очистке Debian 12

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

Это поможет выявить старые временные файлы, которые можно удалить без риска.

Итоги

И после проверки можно очистить временные файлы:

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 в оптимальном состоянии:

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