После запуска yum update
на CentOS при последующей
перезагрузке вас может поджидать сюрприз в виде окирпиченного
сервера, который зависает на заставке биоса.
О проблеме на форумах и багтрекерах начали писать вчера. Похоже, что проблема затрагивает все системы с UEFI загрузчиком и актуальна как минимум для версий CentOS 7.8 и 8.2. Вот и мне вчера под вечер не повезло обновиться и перезагрузить сервер, обеспечив себе ночь веселья.
Проблема проявляет себя в момент перезагрузки сервера в виде зависшего экрана с заставкой биоса, от чего сначала вообще не понятно, что происходит ни ошибок, ни консоли grub, только зависшая заставка bios.
Решение
Если после обновления сервер не перезагружался, то чтобы не получить кирпич при последующей перезагрузке достаточно откатить обновление grub2 пакетов и их зависимостей:
yum downgrade grub2\* shim\* mokutil
Если же сервер перезагрузили и кирпич все-таки получили, то чтобы восстановить загрузчик понадобится Live-CD диск или флешка. Последовательность действий для отката пакетов на не грузящейся системе будет следующей:
- Загрузиться с Live-CD (7 версию я брал тут);
- Настроить сеть;
- Смонтировать корневой раздел в /mnt/sysimage;
- Смонтировать раздел /boot в /mnt/sysimage/boot и раздел /boot/efi в /mnt/sysimage/boot/efi;
- Выполнить последовательность команд:
mount -o bind /dev/urandom /mnt/sysimage/dev/urandomecho 'nameserver 1.1.1.1' > /mnt/sysimage/etc/resolv.confchroot /mnt/sysimageyum downgrade grub2\* shim\* mokutil
После этого загрузчик обновится на старую версию и сервер должен загрузиться.
Исключение пакетов из обновления
Чтобы при следующем обновлении загрузчик опять не сломался, надо
добавить проблемные пакеты в исключения (строка
exclude=grub2* shim* mokutil
) в файл конфигурации yum
/etc/yum.conf
.
Проблемные версии пакетов для CentOS 7, именно с ними ломается
UEFI загрузчик:grub2-2.02-0.86.el7.centos.x86_64
shim-x64-15-7.el7_9.x86_64