Как заставить grub повторно попытаться загрузить menuentry, если загрузка этого menuentry не удалась?

Вопрос или проблема

Ситуация: когда загрузка меню завершилась неудачей, grub2 вернется к выбору меню и будет ждать бесконечно, пока пользователь не выберет другую опцию меню. Как заставить grub повторно попытаться загрузить ту же опцию меню без ввода от пользователя?

Это сервер с PXE-загрузкой, который имеет шанс на сбой загрузки, потому что сеть не так стабильна, как диск, и повторная попытка решит проблему, вместо того чтобы раздражающе ждать “Нажмите Enter, чтобы повторить попытку”

Ответ или решение

Для настройки GRUB2 так, чтобы он автоматически повторял попытку загрузки определенного menuentry в случае сбоя, вам потребуется внести некоторые изменения в конфигурационные файлы GRUB. К сожалению, по умолчанию GRUB не поддерживает функцию автоматической перезагрузки меню по умолчанию, но можно реализовать это поведение с помощью скриптов.

Вот шаги, которые вам нужно выполнить:

  1. Редактирование конфигурации GRUB: Вам нужно отредактировать файл конфигурации GRUB. Обычно он расположен по следующему пути:

    /etc/default/grub
  2. Установка переменных: Добавьте следующие переменные в файл grub:

    GRUB_TIMEOUT=0
    GRUB_DEFAULT=saved
    GRUB_SAVEDEFAULT=true
    • GRUB_TIMEOUT=0 позволяет избежать ожидания выбора меню (можно установить большее время, если хотите).
    • GRUB_DEFAULT=saved сообщает GRUB загружать последнее успешно выбранное меню.
    • GRUB_SAVEDEFAULT=true сохранит последнее выбранное меню.
  3. Создание сценария для автоматической перезагрузки: Вам потребуется создать отдельный скрипт, который будет выполнять определенные действия в случае неудачной загрузки. Вы можете создать файл, например, /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 "Достигнуто максимальное количество попыток. Завершение."
  4. Выдача прав на выполнение: Убедитесь, что скрипт имеет права на выполнение:

    sudo chmod +x /usr/local/bin/retry_grub.sh
  5. Изменение целевой загрузки: Чтобы усложнить процесс, вы можете изменить загрузщик GRUB, чтобы запускался ваш скрипт на случай неудачи. Это можно сделать в файле конфигурации GRUB, добавив следующие строки в menuentry для автоматической перезагрузки.

  6. Обновление конфигурации GRUB: После завершения редактирования файлов не забудьте обновить конфигурацию GRUB:

    sudo update-grub

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

Обратите внимание, что приведенные настройки могут потребовать дополнительной настройки в зависимости от особенностей вашей системы и конфигурации сети. Используйте данные указания с осторожностью и обязательно протестируйте настройки в безопасной среде, прежде чем применять их на сервере.

Оцените материал
Добавить комментарий

Капча загружается...