Вопрос или проблема
Ситуация: когда загрузка меню завершилась неудачей, grub2 вернется к выбору меню и будет ждать бесконечно, пока пользователь не выберет другую опцию меню. Как заставить grub повторно попытаться загрузить ту же опцию меню без ввода от пользователя?
Это сервер с PXE-загрузкой, который имеет шанс на сбой загрузки, потому что сеть не так стабильна, как диск, и повторная попытка решит проблему, вместо того чтобы раздражающе ждать “Нажмите Enter, чтобы повторить попытку”
Ответ или решение
Для настройки GRUB2 так, чтобы он автоматически повторял попытку загрузки определенного menuentry
в случае сбоя, вам потребуется внести некоторые изменения в конфигурационные файлы GRUB. К сожалению, по умолчанию GRUB не поддерживает функцию автоматической перезагрузки меню по умолчанию, но можно реализовать это поведение с помощью скриптов.
Вот шаги, которые вам нужно выполнить:
-
Редактирование конфигурации GRUB: Вам нужно отредактировать файл конфигурации GRUB. Обычно он расположен по следующему пути:
/etc/default/grub
-
Установка переменных: Добавьте следующие переменные в файл
grub
:GRUB_TIMEOUT=0 GRUB_DEFAULT=saved GRUB_SAVEDEFAULT=true
GRUB_TIMEOUT=0
позволяет избежать ожидания выбора меню (можно установить большее время, если хотите).GRUB_DEFAULT=saved
сообщает GRUB загружать последнее успешно выбранное меню.GRUB_SAVEDEFAULT=true
сохранит последнее выбранное меню.
-
Создание сценария для автоматической перезагрузки: Вам потребуется создать отдельный скрипт, который будет выполнять определенные действия в случае неудачной загрузки. Вы можете создать файл, например,
/usr/local/bin/retry_grub.sh
:#!/bin/bash COUNT=0 MAX_RETRIES=5 while [ $COUNT -lt $MAX_RETRIES ]; do ((COUNT++)) echo "Попытка загрузки номер: $COUNT" # Замените 'my_menuentry' на ваше имя меню grub-reboot "my_menuentry" # Выполнение загрузки exec /boot/grub/grub-reboot # Проверка статуса последней попытки загрузки if [ $? -eq 0 ]; then echo "Загрузка успешна!" exit 0 fi echo "Загрузка не удалась. Ожидание перед следующей попыткой..." sleep 5 done echo "Достигнуто максимальное количество попыток. Завершение."
-
Выдача прав на выполнение: Убедитесь, что скрипт имеет права на выполнение:
sudo chmod +x /usr/local/bin/retry_grub.sh
-
Изменение целевой загрузки: Чтобы усложнить процесс, вы можете изменить загрузщик GRUB, чтобы запускался ваш скрипт на случай неудачи. Это можно сделать в файле конфигурации GRUB, добавив следующие строки в
menuentry
для автоматической перезагрузки. -
Обновление конфигурации GRUB: После завершения редактирования файлов не забудьте обновить конфигурацию GRUB:
sudo update-grub
Теперь, когда ваш сервер будет пытаться загрузить неверный или нестабильный menuentry
, он будет автоматически повторять попытку загрузки до тех пор, пока не будет достигнуто максимальное количество попыток, которое вы указали.
Обратите внимание, что приведенные настройки могут потребовать дополнительной настройки в зависимости от особенностей вашей системы и конфигурации сети. Используйте данные указания с осторожностью и обязательно протестируйте настройки в безопасной среде, прежде чем применять их на сервере.