Hetzner · Robot · Документация

Отключение recordfail в GRUB2: сервер не должен ждать на меню загрузки

Обновлено

В Ubuntu и ряде других дистрибутивов GRUB2 запоминает неудачную загрузку (recordfail): если система не загрузилась до конца, при следующем старте меню загрузки остаётся на экране и ждёт ввода с клавиатуры. На обычном компьютере это удобно, но на сервере без монитора такой «вечный» экран означает, что машина не стартует и недоступна по сети, пока вы не подключитесь через консоль. Ниже — как это отключить.

Признаки проблемы

  • После аварийной перезагрузки сервер не отвечает на ping и SSH.
  • В KVM-консоли виден экран GRUB с ожиданием выбора.
  • Через Rescue System в /boot/grub/grubenv присутствует строка recordfail=1.

Настройка

Отредактируйте /etc/default/grub и задайте таймаут для режима recordfail:

GRUB_TIMEOUT=5
GRUB_RECORDFAIL_TIMEOUT=5

Для немедленной загрузки используйте GRUB_TIMEOUT=0 и GRUB_RECORDFAIL_TIMEOUT=0, но тогда выбрать другое ядро или режим восстановления через консоль можно будет только при ручном вмешательстве (клавиша Shift или Esc во время старта в BIOS-режиме). Поэтому на серверах разумнее оставить небольшой таймаут, например 3–5 секунд.

Примените изменения:

sudo update-grub                    # Debian/Ubuntu
sudo grub2-mkconfig -o /boot/grub2/grub.cfg   # RHEL-семейство (BIOS)

Для UEFI в RHEL-семействе путь другой (/boot/efi/EFI/<дистрибутив>/grub.cfg). Подробнее про загрузку в режиме UEFI — в статье UEFI и Legacy BIOS.

Сброс флага recordfail

sudo grub-editenv list
sudo grub-editenv - unset recordfail

Если сервер не загружается, сделайте то же из Rescue System: смонтируйте корневой раздел и раздел /boot, выполните chroot (пример) и запустите команду. В системах с RAID1 и несколькими загрузочными дисками убедитесь, что GRUB установлен на оба.

Проверка

  • Откройте /boot/grub/grub.cfg и найдите recordfail_timeout — значение должно совпадать с заданным.
  • Выполните перезагрузку и убедитесь, что сервер вернулся в сеть.
  • Имитируйте аварийный сброс только на тестовом сервере.

Другие причины зависания на GRUB

  • GRUB установлен на диск, который не первый в порядке загрузки BIOS.
  • Повреждён grub.cfg или раздел /boot: проверка файловой системы.
  • Слишком длинное меню с несколькими ядрами и режимом восстановления.

Частые вопросы

Безопасно ли ставить таймаут 0?

Загрузка станет быстрее, но у вас не будет шанса выбрать другое ядро. На серверах с KVM-доступом лучше оставить 3–5 секунд.

Нужно ли обновлять initramfs?

Нет: параметры GRUB применяются командой update-grub.

Работает ли это в Debian?

Механизм recordfail есть в Ubuntu и в Debian-производных; в чистом Debian он обычно не включается, но параметры безопасны.