dd if=/dev/sda of=backup.img), чтобы избежать boot-цикла. Никогда не удаляйте текущее ядро или rescue-ядро.1. Подготовка и проверка текущего состояния
Перед любыми изменениями подтвердите запущенное ядро и содержимое /boot, чтобы избежать удаления активных файлов.
Проверка текущего ядра:
uname -r
Ожидаемый вывод: 3.10.0-1160.81.1.el7.x86_64. Если вывод 3.10.0-1160.62.1.el7.x86_64 — остановитесь, перезагрузитесь на 81.1 из GRUB-меню (нажмите Shift при загрузке) и повторите.
Убедитесь, что вы root; используйте sudo uname -r.
Проверка списка всех ядерных пакетов:
rpm -qa | grep kernel
Обновите репозитории: yum clean all && yum update; если «No package kernel available» — проверьте /etc/yum.repos.d/ на наличие CentOS-Base.repo.
Проверка использования /boot:
df -h /boot
Ожидаемо: ~100–120 МБ занято из 150–200 МБ. Если свободно >10 МБ — проблема может быть в initramfs; продолжайте.
/boot смонтирован? Проверьте mount | grep /boot.
Создание бэкапа /boot:
cp -r /boot /root/boot_backup
Это сохранит копию; если ошибка «Permission denied» — используйте sudo. Размер бэкапа ~138 МБ, храните на другой раздел (df -h /root).
2. Удаление старого ядра и связанных пакетов
Удаляем только kernel и kernel-devel для 3.10.0-1160.62.1.el7.x86_64 (не трогаем headers/tools для 81.1, так как они нужны для модулей).
Удаление основного пакета kernel:
yum remove kernel-3.10.0-1160.62.1.el7.x86_64
Yum спросит подтверждение (y/N); введите y. Ожидаемо: Удалит ~25 МБ файлов.
Пакет уже удалён? Проверьте ls /boot/vmlinuz-3.10.0-1160.62.1.el7.x86_64; если файл есть, удалите вручную (см. Шаг 3).
Удаление devel-пакета:
yum remove kernel-devel-3.10.0-1160.62.1.el7.x86_64
Подтвердите y. Devel не критичен для boot, но удаление очистит /usr/src/kernels/3.10.0-1160.62.1.el7.x86_64 (~100 МБ, но не в /boot).
Используйте yum remove --setopt=protected_multilib=false kernel-devel-3.10.0-1160.62.1.el7.x86_64.
Если yum не удалил kdump-образ:
ls -lh /boot | grep 1160.62.1
rm -f /boot/initramfs-3.10.0-1160.62.1.el7.x86_64kdump.img
Если kdump активен (systemctl status kdump: active), отключите: systemctl stop kdump && systemctl disable kdump.
3. Обновление конфигурации загрузчика GRUB
После удаления файлов обновите GRUB, чтобы меню boot не ссылалось на удалённое ядро.
Генерация новой конфигурации:
grub2-mkconfig -o /boot/grub2/grub.cfg
Ожидаемо: «Generating grub configuration» и список меню без 1160.62.1.
Установите: yum install grub2-tools.
Проверьте путь (для UEFI: /boot/efi/EFI/centos/grub.cfg).
Проверка меню GRUB (опционально, для BIOS):
cat /boot/grub2/grub.cfg | grep menuentry
Должно быть записи только для 1160.81.1 и rescue. Если старая запись осталась — отредактируйте вручную (nano /boot/grub2/grub.cfg), удалите submenu для 1160.62.1 и перегенерируйте.
4. Проверка освобождения места и верификация
Убедитесь, что /boot освободился, и нет ошибок.
Проверка содержимого /boot:
ls -lh /boot
Ожидаемо: Файлы только для 1160.81.1, total ~100M или меньше. Если файлы 1160.62.1 остались — удалите вручную: rm -f /boot/vmlinuz-3.10.0-1160.62.1.el7.x86_64 /boot/initramfs-3.10.0-1160.62.1.el7.x86_64.img /boot/config-3.10.0-1160.62.1.el7.x86_64 и т.д. (будьте осторожны: не трогайте 81.1 или rescue).
Remount /boot rw: mount -o remount,rw /boot.
Проверка свободного места:
df -h /boot
Ожидаемо: >50 МБ свободно (минимум 4 МБ для установки). Если <4 МБ — проверьте большие файлы: du -sh /boot/* | sort -h; удалите ненужное.
Если /boot на LVM, расширьте: lvextend -L+100M /dev/centos/root (требует umount /boot и resize2fs).
Проверка пакетов:
rpm -qa | grep kernel
Должно остаться только для 1160.81.1. Если devel 62.1 висит — yum erase kernel-devel-3.10.0-1160.62.1.el7.x86_64.
5. Установка нового ядра и перезагрузка
Теперь, когда место есть, установите целевое ядро.
Обновление или установка ядра:
yum update kernel
Или конкретно: yum install kernel-3.10.0-1160.119.1.el7.x86_64. Подтвердите y. Ожидаемо: Установит ~25–30 МБ новых файлов в /boot.
Повторите Шаг 2–4.
Обновите репозитории: yum clean all && yum makecache; проверьте CentOS-Vault.repo для EOL (CentOS 7 EOL с 2024, используйте vault.centos.org).
Обновление GRUB после установки:
grub2-mkconfig -o /boot/grub2/grub.cfg
Теперь меню будет включать 1160.119.1.
Перезагрузка:
reboot
При загрузке выберите новое ядро в GRUB (если не default). После: uname -r должно показать 3.10.0-1160.119.1.el7.x86_64.
Загрузитесь с rescue-диска (CentOS ISO), mount /boot, восстановите grub.cfg из бэкапа и chroot /mnt/sysimage grub2-install /dev/sda.
Вернитесь к 81.1 в GRUB и удалите новое ядро.
6. Профилактика повторения проблемы
Чтобы /boot не заполнялся в будущем.
Настройка лимита ядер в yum.conf:
nano /etc/yum.conf
Добавьте или измените: installonly_limit=2 (сохранит 2 ядра: текущее +1). Сохраните (Ctrl+O, Enter, Ctrl+X). Теперь yum будет удалять старые автоматически.
Создайте: touch /etc/yum.conf.
Установка package-cleanup в cron для еженедельной очистки:
crontab -e
Добавьте: 0 2 * * 0 /usr/bin/package-cleanup --oldkernels --count=2. Сохраните. Это запустит по воскресеньям в 2:00.
yum install cronie.
Отключение ненужных сервисов:
Если kdump не используется: systemctl disable --now kdump. Проверьте: systemctl status kdump.
Мониторинг:
Добавьте в скрипт: watch -n 3600 'df -h /boot' (каждый час). Если /boot <20% свободно — повторите очистку. Для EOL CentOS 7 рассмотрите миграцию на AlmaLinux/Rocky 8/9.
Резервное копирование
Всегда создавайте резервные копии перед внесением изменений в систему
Осторожность
Никогда не удаляйте текущее ядро или rescue-ядро
Профилактика
Настройте автоматическую очистку старых ядер для предотвращения проблемы
Если после всех шагов ошибка сохраняется — укажите вывод df -h /boot и ls -lh /boot для дальнейшей диагностики.
Нужна помощь с вашей IT-инфраструктурой?
Команда экспертов Kamensky-lab готова взять на себя задачи по настройке, оптимизации и безопасности ваших серверов. От разовых консультаций до полного сопровождения проектов.


