Поделиться через


Предварительная настройка доступа к GRUB и sysrq может сэкономить много времени.

Область применения: ✔️ виртуальные машины Linux

Наличие доступа к Серийной консоли и GRUB в большинстве случаев сокращает время восстановления виртуальной машины Linux (IaaS). GRUB предусматривает варианты восстановления виртуальной машины, которые в противном случае потребовали бы больше времени.

Существует множество причин для восстановления виртуальной машины, которые можно отнести к следующим сценариям:

  • Повреждения файловой системы/ядра/основной загрузочной записи (MBR)
  • Сбои при обновлении ядра
  • Неправильные параметры ядра для GRUB
  • Неправильные конфигурации fstab
  • Конфигурации брандмауэра
  • Потеря пароля
  • Искаженные файлы конфигурации sshd
  • Конфигурации сети

Многие другие сценарии можно найти здесь.

Убедитесь, что вы можете получить доступ к GRUB и Серийной консоли на виртуальных машинах, развернутых в Azure.

Если вы не знакомы с Серийной консолью, см. эту статью.

Совет

Обязательно создавайте резервные копии файлов перед внесением изменений.

Просмотрите видео ниже, чтобы увидеть, как можно быстро восстановить виртуальную машину Linux при наличии доступа к GRUB.

Видео о восстановлении виртуальной машины Linux

Существует ряд методов восстановления виртуальных машин Linux. В облачной среде это сложный процесс. Все действия с инструментами и функциями выполняются непрерывно, чтобы обеспечить быстрое восстановление служб.

Серийная консоль Azure позволяет взаимодействовать с виртуальной машиной Linux, как если бы вы работали в консоли системы.

Можно управлять множеством файлов конфигурации, включая конфигурацию загрузки ядра.

Более опытные системные администраторы Linux или Unix оценят однопользовательский и аварийный режимы, доступные через Серийную консоль Azure, которые позволяют исключить процедуры замены диска и удаления виртуальной машины во многих сценариях восстановления.

Метод восстановления зависит от проблем, которые возникают, например, сбросить потерянный или неуместный пароль можно с помощью портал Azure параметров ->Reset Password. Функция Сброс пароля называется расширением и взаимодействует с гостевым агентом Linux.

Доступны и другие расширения, например "Настраиваемый скрипт", однако для этих параметров должен быть запущен и находиться в работоспособном состоянии агент Linux waagent, что не всегда соответствует действительности.

Снимок экрана: состояние агента на странице

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

Снимок экрана с выбранной загрузочной ОС в GRUB, где можно выбрать несколько ядер.

Рекомендуемый порядок методов восстановления

Видео с заменой диска

Если у вас нет доступа к GRUB, просмотрите это видео о том, как можно легко автоматизировать процедуру замены диска для восстановления виртуальной машины.

Сложности

Не для всех виртуальных машин Linux в Azure по умолчанию настроен доступ к GRUB, а также возможность прерывания работы с помощью команд sysrq. Для некоторых старых дистрибутивов, таких как SLES 11, не настроен вывод запроса на вход в Серийной консоли Azure.

В этой статье мы рассмотрим различные дистрибутивы Linux и способы настройки доступа к GRUB.

Настройка виртуальной машины Linux для приема команд SysRq

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

Функция SysRq полезна для перезагрузки нерабочей или неотвечающей виртуальной машины непосредственно из Серийной консоли Azure, а также может пригодиться для получения доступа к меню GRUB. В противном случае перезапуск виртуальной машины из другого окна портала или сеанса SSH может привести к разрыву текущего подключения консоли и истечению времени ожидания GRUB, которое используется для вывода меню GRUB. Виртуальную машину необходимо настроить таким образом, чтобы она принимала для параметра ядра значение 1, которое включает все функции sysrq, или 128, которое разрешает перезагрузку и выключение.

Видео о включении sysrq

Чтобы настроить для виртуальной машины возможность перезагрузки с помощью команд SysRq на портал Azure, необходимо задать значение 1 для параметра ядра kernel.sysrq.

Чтобы эта конфигурация сохранилась после перезагрузки, добавьте запись в файл sysctl.conf.

echo kernel.sysrq = 1 >> /etc/sysctl.conf

Также возможна динамическая настройка параметра ядра.

sysctl -w kernel.sysrq=1

Если у вас нет доступа с правами root или не работает sudo, настроить sysrq из командной строки оболочки будет невозможно.

В этом сценарии можно включить sysrq, используя портал Azure. Этот метод может быть полезен, если файл sudoers.d/waagent поврежден или удален.

Использование функции запуска портал Azure —> run Command —> RunShellScript требует работоспособности процесса waagent, после чего можно внедрить эту команду, чтобы включить sysrq

sysctl -w kernel.sysrq=1 ; echo kernel.sysrq = 1 >> /etc/sysctl.conf

Как показано здесь:

Снимок экрана: окно RunShellScript при внедрении команды.

После завершения можно попытаться получить доступ к sysrq и проверить возможность перезагрузки.

Снимок экрана: параметр

Выберите пункт Перезагрузка и нажмите кнопку Отправить SysRq.

Снимок экрана: параметр перезагрузки в диалоговом окне

Система должна записать в журнал сообщение о сбросе, как показано ниже:

Снимок экрана: журнал сообщений сброса в интерфейсе командной строки.

Настройка GRUB для Ubuntu

По умолчанию доступ к GRUB можно получить, удерживая нажатой клавишу ESC во время загрузки виртуальной машины. Если меню GRUB не появится, можно вызвать его принудительно в Серийной консоли Azure с помощью одного из следующих способов.

Вариант 1. Принудительное отображение GRUB на экране

Обновите файл /etc/default/grub.d/50-cloudimg-settings.cfg, чтобы меню GRUB оставалось на экране в течение указанного времени ожидания. Вам не нужно нажимать esc , так как GRUB будет отображаться немедленно.

GRUB_TIMEOUT=5
GRUB_TIMEOUT_STYLE=menu

Вариант 2. Разрешение нажатия клавиши ESC перед загрузкой

Аналогичного эффекта можно добиться, внеся изменения в файл /etc/default/grub, после чего время ожидания нажатия клавиши ESC составит 3 секунды.

Закомментируйте эти две строки:

#GRUB_HIDDEN_TIMEOUT=0
#GRUB_HIDDEN_TIMEOUT_QUIET=true

и добавьте следующую строку:

GRUB_TIMEOUT_STYLE=countdown

Ubuntu 12.04

Ubuntu 12.04 разрешает доступ к серийной консоли, но не предоставляет возможности взаимодействия. Запрос login: не отображается.

Чтобы получить запрос login: в версии 12.04, выполните следующее:

  1. Создайте файл с именем /etc/init/ttyS0.conf, содержащий следующий текст:

    # ttyS0 - getty
    #
    # This service maintains a getty on ttyS0 from the point the system is
    # started until it is shut down again.
    start on stopped rc RUNLEVEL=[12345]
    stop on runlevel [!12345]
    
    respawn
    exec /sbin/getty -L 115200 ttyS0 vt102
    
  2. Запустите getty с помощью upstart:

    sudo start ttyS0
    

Параметры, необходимые для настройки серийной консоли для версий Ubuntu, можно найти здесь.

Режим восстановления Ubuntu

Через GRUB для Ubuntu доступны дополнительные параметры восстановления и очистки, однако это возможно лишь в том случае, если соответствующим образом настроены параметры ядра. Если при настройке этого параметра загрузки ядра произойдет сбой, меню восстановления будет принудительно отправлено в Диагностику Azure, а не в Серийную консоль Azure. Чтобы получить доступ к меню восстановления Ubuntu, выполните указанные ниже действия.

Прервите процесс BOOT и откройте меню GRUB.

Выберите "Advanced Options for Ubuntu" и нажмите клавишу ВВОД.

Снимок экрана: последовательная консоль с выбранными дополнительными параметрами Для Ubuntu.

Выберите строку, отображающую (режим восстановления), не нажимайте ввод, но нажимайте клавишу E.

Снимок экрана: последовательная консоль с выбранной версией режима восстановления.

Найдите строку, которая загружает ядро, и замените последний параметр nomodeset на console=ttyS0.

linux /boot/vmlinuz-4.15.0-1023-azure root=UUID=21b294f1-25bd-4265-9c4e-d6e4aeb57e97 ro recovery nomodeset

change to

linux /boot/vmlinuz-4.15.0-1023-azure root=UUID=21b294f1-25bd-4265-9c4e-d6e4aeb57e97 ro recovery console=ttyS0

Снимок экрана: последовательная консоль с измененным значением.

Нажмите CTRL+Х, чтобы запустить и загрузить ядро. Если все получится, вы увидите дополнительные параметры для других вариантов восстановления.

Снимок экрана: последовательная консоль в меню восстановления, которая предлагает дополнительные параметры восстановления.

Настройка GRUB для Red Hat

Конфигурация Red Hat 7.4+ GRUB

Используемый по умолчанию файл конфигурации /etc/default/grub для этих версий настроен правильно.

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL="serial console"
GRUB_SERIAL_COMMAND="serial"
GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0 earlyprintk=ttyS0"
GRUB_DISABLE_RECOVERY="true"

Включите клавишу SysRq:

sysctl -w kernel.sysrq=1;echo kernel.sysrq = 1 >> /etc/sysctl.conf;sysctl -a | grep -i sysrq

Конфигурация Red Hat 7.2 и 7.3 GRUB

Необходимо внести изменения в файл /etc/default/grub. Конфигурация по умолчанию выглядит, как показано в следующем примере:

GRUB_TIMEOUT=1
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0 earlyprintk=ttyS0"
GRUB_DISABLE_RECOVERY="true"

Измените следующие строки в файле /etc/default/grub:

GRUB_TIMEOUT=1 

to

GRUB_TIMEOUT=5
GRUB_TERMINAL_OUTPUT="console"

to

GRUB_TERMINAL="serial console"

и добавьте следующую строку:

GRUB_SERIAL_COMMAND="serial –speed=115200 –unit=0 –word=8 –parity=no –stop=1″

Теперь файл /etc/default/grub должен выглядеть примерно так:

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL="serial console"
GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0 earlyprintk=ttyS0"
GRUB_DISABLE_RECOVERY="true"

Завершите и обновите конфигурацию GRUB с помощью следующей команды:

grub2-mkconfig -o /boot/grub2/grub.cfg

Задайте параметр ядра SysRq:

sysctl -w kernel.sysrq = 1;echo kernel.sysrq = 1 >> /etc/sysctl.conf;sysctl -a | grep -i sysrq

Можно также настроить GRUB и SysRq с помощью одной строки либо в оболочке, либо с помощью операции "Выполнить команду". Создайте резервные копии файлов перед выполнением следующей команды:

cp /etc/default/grub /etc/default/grub.bak; sed -i 's/GRUB_TIMEOUT=1/GRUB_TIMEOUT=5/g' /etc/default/grub; sed -i 's/GRUB_TERMINAL_OUTPUT="console"/GRUB_TERMINAL="serial console"/g' /etc/default/grub; echo "GRUB_SERIAL_COMMAND=\"serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1\"" >> /etc/default/grub;grub2-mkconfig -o /boot/grub2/grub.cfg;sysctl -w kernel.sysrq=1;echo kernel.sysrq = 1 /etc/sysctl.conf;sysctl -a | grep -i sysrq

Конфигурация GRUB Red Hat 6.x

Необходимо внести изменения в файл /boot/grub/grub.conf. Значение timeout определяет, как долго отображается меню GRUB.

#boot=/dev/vda
default=0
timeout=15
splashimage=(hd0,0)/grub/splash.xpm.gz
#hiddenmenu
serial --unit=0 --speed=9600
terminal serial
terminal --timeout=5 serial console

Последняя строка terminal –-timeout=5 serial console увеличивает время ожидания GRUB, добавляя запрос Press any key to continue, отображаемый в течение 5 секунд.

Снимок экрана: консоль с выходными данными.

Меню GRUB должно отображаться на экране для настроенного времени ожидания=15 без необходимости нажать клавишу ESC. Не забудьте щелкнуть консоль в браузере, чтобы сделать меню активным и выбрать необходимое ядро.

Снимок экрана: консоль с двумя параметрами Linux.

SuSE

SLES 12 SP1

Либо используйте загрузчик YaST в соответствии с официальной документацией.

Либо добавьте или измените в файле /etc/default/grub следующие параметры:

GRUB_TERMINAL=serial
GRUB_TIMEOUT=5
GRUB_SERIAL_COMMAND="serial --unit=0 --speed=9600 --parity=no"

```console
Verify that ttys0 is used in the GRUB_CMDLINE_LINUX or GRUB_CMDLINE_LINUX_DEFAULT

```console
GRUB_CMDLINE_LINUX_DEFAULT="console=ttyS0,9600n"

Повторно создайте файл grub.cfg:

grub2-mkconfig -o /boot/grub2/grub.cfg

SLES 11 SP4 или более поздней версии

Серийная консоль появляется и отображает сообщения о загрузке, но не выводит запрос login:.

Откройте сеанс SSH на виртуальной машине и обновите файл /etc/inittab, раскомментировав следующую строку:

#S0:12345:respawn:/sbin/agetty -L 9600 ttyS0 vt102

Затем выполните следующую команду:

telinit q

Чтобы включить GRUB, внесите следующие изменения в файл /boot/grub/menu.lst:

timeout 5
serial --unit=0 --speed=9600 --parity=no
terminal --timeout=5 serial console

root (hd0,0)
kernel /boot/vmlinuz-3.0.101-108.74-default root=/dev/disk/by-uuid/ab6b62bb--
1a8c-45eb-96b1-1fbc535b9265 disk=/dev/sda  USE_BY_UUID_DEVICE_NAMES=1 earlyprinttk=ttyS0 console=ttyS0 showopts vga=0x314

При такой конфигурации сообщение Press any key to continue будет отображаться в консоли в течение 5 секунд.

Затем в течение дополнительных 5 секунд будет отображаться меню GRUB. Нажав клавишу СТРЕЛКА ВНИЗ, вы прервете счетчик и сможете выбрать ядро, которое нужно загрузить. Можно также добавить ключевое слово single, чтобы включить однопользовательский режим, для которого требуется установить пароль для доступа с правами root.

Если добавить команду init=/bin/bash, ядро загрузится, однако программа init будет заменена оболочкой bash.

Вы получите доступ к оболочке без ввода пароля. Затем можно перейти к обновлению пароля для учетных записей Linux или внесению других изменений в конфигурацию.

Перевод ядра в режим командной строки bash

Наличие доступа к GRUB позволяет прерывать процесс инициализации. Такая возможность может быть полезна для многих процедур восстановления. Если у вас нет пароля для доступа с правами root, который требуется для однопользовательского режима, можно загрузить ядро, заменив программу init командной строкой bash. Для этого необходимо добавить команду init=/bin/bash в строку загрузки ядра.

Снимок экрана: консоль с обновленной загрузочной строкой.

Переподключите файловую систему / (root) с правами на чтение и запись (RW) с помощью следующей команды:

mount -o remount,rw /

Снимок экрана: консоль с действием повторного подключения.

Теперь можно изменить пароль для доступа с правами root и внести множество других изменений в конфигурацию Linux.

Снимок экрана: консоль, в которой можно изменить корневой пароль и другую конфигурацию.

Перезапустите виртуальную машину с помощью следующей команды:

/sbin/reboot -f

Однопользовательский режим

Вам также может потребоваться доступ к виртуальной машине в однопользовательском или аварийном режиме. Выберите ядро, которое вы хотите загрузить или прервать, с помощью клавиш со стрелками. Введите нужный режим, добавив ключевое слово single или 1 в строку загрузки ядра. В системах RHEL можно также добавить rd.break.

Дополнительные сведения о доступе к однопользовательскому режиму см. в этом документе

Снимок экрана: запись *Ubuntu в загрузке выбранного экрана ОС в GRUB.

Следующие шаги

Дополнительные сведения о Серийной консоли Azure

Свяжитесь с нами для получения помощи

Если у вас есть вопросы или вам нужна помощь, создайте запрос в службу поддержки или обратитесь за поддержкой сообщества Azure. Вы также можете отправить отзыв о продукте в сообщество отзывов Azure.