Оглавление

В мире DevOps автоматизация рутинных задач — это не просто удобство, а необходимость. Если вы используете Ubuntu, то наверняка сталкивались с тем, что старые ядра Linux постепенно заполняют диск, особенно раздел /boot. В этой статье я расскажу, как настроить автоматическую очистку старых ядер с помощью встроенных возможностей apt и планировщика cron, а также покажу ручной метод с использованием команды apt purge. Это отличная практика для десктопов, но для серверов я рекомендую действовать осторожнее и предпочесть ручной режим.

Зачем чистить ядра?

Каждое обновление ядра оставляет предыдущую версию на случай проблем с новым релизом. Это полезно для отката, но со временем ненужные файлы накапливаются, а раздел /boot может переполниться, что приведёт к ошибкам при обновлении системы. Автоматизация или упрощённый ручной процесс помогают поддерживать порядок.

Вариант 1: Автоматизация с apt и cron

Современные версии Ubuntu (начиная с 22.04 и новее) интегрировали очистку старых ядер в apt, что делает процесс проще и надёжнее.

Шаг 1: Проверка текущего ядра

Узнаем, какое ядро активно, чтобы случайно не удалить его:

uname -r

Пример вывода: 5.15.0-73-generic. Это ядро трогать не будем.

Шаг 2: Используем apt для очистки

Команда apt autoremove автоматически удаляет неиспользуемые пакеты, включая старые ядра:

sudo apt autoremove --purge

Флаг --purge также удаляет конфигурационные файлы. После выполнения проверьте, какие ядра остались:

dpkg --list | grep linux-image
Шаг 3: Настройка cron для автоматизации

Для десктопов автоматизация через cron — отличный выбор. Откройте редактор cron от имени root:

sudo crontab -e

Добавьте задание, например, для ежемесячной очистки 1-го числа в 3:00 утра:

0 3 1 * * /usr/bin/apt autoremove --purge -y >> /var/log/kernel-clean.log 2>&1
  • -y автоматически подтверждает действия.
  • >> /var/log/kernel-clean.log 2>&1 перенаправляет вывод в лог для отладки.

Сохраните изменения (в nano: Ctrl+O, Enter, Ctrl+X).

Шаг 4: Проверка

После выполнения cron-задания или ручного запуска убедитесь, что остались только нужные ядра:

dpkg --list | grep linux-image

Вариант 2: Ручная очистка с apt purge

Для серверов или если вы хотите больше контроля, используйте точечное удаление:

sudo apt purge $(dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | head -n -1)
Как это работает?
  • dpkg -l 'linux-*' — список всех пакетов, связанных с ядрами.
  • sed '/^ii/!d' — фильтрует только установленные пакеты.
  • '/"$(uname -r | sed ...)"'/d' — исключает текущее ядро.
  • s/.../\1/ — извлекает имена пакетов.
  • head -n -1 — оставляет одно запасное ядро.
  • sudo apt purge — удаляет отфильтрованные ядра.

После этого обновите GRUB:

sudo update-grub

Десктопы vs Серверы

  • Десктопы: Автоматизация с cron и apt — идеальная практика. Обновления частые, риски минимальны, а место экономится без лишних усилий.
  • Серверы: Здесь лучше ручной режим. Ошибка в новом ядре может оставить сервер без загрузки, если старые версии уже удалены. Используйте apt purge вручную после тестирования, оставляя минимум два запасных ядра:
  sudo apt purge $(dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | head -n -2)

Полезные советы

  • Проверяйте место на диске:
  df -h
  • Если apt autoremove не удаляет ядра, проверьте, не помечены ли они как «вручную установленные»:
  sudo apt-mark auto linux-image-*

Затем повторите apt autoremove.

Итог

Для десктопов автоматизация через apt и cron — это DevOps-стиль: минимум рутины, максимум порядка. Для серверов выбирайте ручной контроль с apt purge, чтобы избежать сюрпризов. Держите /boot в чистоте и наслаждайтесь стабильной системой!