Устранение проблемы с заполненным /boot в CentOS 7

⚠️

ВАЖНО: Работайте от root или с sudo. Сделайте полную резервную копию системы перед началом (например, 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 при загрузке) и повторите.

Ошибка: «Command not found»

Убедитесь, что вы 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; продолжайте.

Ошибка: «No such file or directory»

/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 МБ файлов.

Ошибка: «No package kernel-3.10.0-1160.62.1.el7.x86_64 available»

Пакет уже удалён? Проверьте 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).

Ошибка: «Protected multilib versions: kernel-devel-3.10.0-1160.62.1.el7.x86_64 is a duplicate»

Используйте 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.

Ошибка: «grub2-mkconfig: command not found»

Установите: yum install grub2-tools.

Ошибка: «/boot/grub2/grub.cfg: No such file or directory»

Проверьте путь (для 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).

Ошибка: «Operation not permitted»

Remount /boot rw: mount -o remount,rw /boot.

Проверка свободного места:

df -h /boot

Ожидаемо: >50 МБ свободно (минимум 4 МБ для установки). Если <4 МБ — проверьте большие файлы: du -sh /boot/* | sort -h; удалите ненужное.

Ошибка: «Filesystem full»

Если /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.

Ошибка: «Transaction check error» (если место всё равно мало)

Повторите Шаг 2–4.

Ошибка: «No package available»

Обновите репозитории: 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.

Ошибка: Система не стартует (black screen)

Загрузитесь с rescue-диска (CentOS ISO), mount /boot, восстановите grub.cfg из бэкапа и chroot /mnt/sysimage grub2-install /dev/sda.

Ошибка: «Kernel panic»

Вернитесь к 81.1 в GRUB и удалите новое ядро.

6. Профилактика повторения проблемы

Чтобы /boot не заполнялся в будущем.

Настройка лимита ядер в yum.conf:

nano /etc/yum.conf

Добавьте или измените: installonly_limit=2 (сохранит 2 ядра: текущее +1). Сохраните (Ctrl+O, Enter, Ctrl+X). Теперь yum будет удалять старые автоматически.

Ошибка: «No such file»

Создайте: touch /etc/yum.conf.

Установка package-cleanup в cron для еженедельной очистки:

crontab -e

Добавьте: 0 2 * * 0 /usr/bin/package-cleanup --oldkernels --count=2. Сохраните. Это запустит по воскресеньям в 2:00.

Ошибка: «crontab: command not found»

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 для дальнейшей диагностики.

case studies

See More Case Studies

Связаться с нами

Комплексные IT услуги для вас

Мы будем рады ответить на любые ваши вопросы и помочь вам определить, какая из наших услуг лучше всего соответствует вашим потребностям.

Наши преимущества:
Что дальше?
1

Мы запланируем звонок в удобное для вас время

2

Мы проводим рабочую встречу по выявлению потребностей и консультированию

3

Мы готовим коммерческое предложение

Получить бесплатную консультацию