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

Доступ к последовательной консоли и GRUB в большинстве случаев позволит увеличить время восстановления виртуальной машины IaaS Linux. GRUB предлагает варианты восстановления, которые в противном случае потребуют больше времени для восстановления виртуальной машины.

Причин для восстановления виртуальной машины много, и их можно отнести к таким сценариям, как:

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

Многие другие сценарии, подробно описанные здесь

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

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

Совет

Убедитесь, что вы создаете резервные копии файлов перед внесением изменений

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

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

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

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

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

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

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

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

Снимок экрана: состояние агента на странице Свойства в портал Azure.

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

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

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

Видео о переключении диска

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

Проблемы

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

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

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

Ключ sysrq включен в некоторых более новых дистрибутивах Linux по умолчанию, хотя в других он может быть настроен для приема значений только для определенных функций 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

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

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

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

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

Как показано ниже:

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

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

Снимок экрана: параметр Send SysRq Command (Отправить команду SysRq) под значком клавиатуры на панели кнопок.

Выберите Перезагрузка и отправка команды SysRq

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

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

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

Конфигурация Ubuntu GRUB

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

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

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

GRUB_TIMEOUT=5
GRUB_TIMEOUT_STYLE=menu

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

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

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

#GRUB_HIDDEN_TIMEOUT=0
#GRUB_HIDDEN_TIMEOUT_QUIET=true

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

GRUB_TIMEOUT_STYLE=countdown

Ubuntu 12.04

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

Чтобы получить имя входа в версии 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

    sudo start ttyS0
    

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

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

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

Прерывание процесса ЗАГРУЗКИ и доступ к меню GRUB

Выберите Дополнительные параметры для 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-x , чтобы запустить и загрузить ядро. Если все пойдет хорошо, вы увидите дополнительные параметры, которые могут помочь в выполнении других параметров восстановления.

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

Конфигурация RED Hat GRUB

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

Конфигурация по умолчанию /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

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

Файл для изменения : /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

Последняя строка терминала --timeout=5 последовательной консоли еще больше увеличит время ожидания GRUB путем добавления запроса в 5 секунд, отображающего нажатие любой клавиши, чтобы продолжить.

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

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

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

Suse

SLES 12 с пакетом обновления 1 (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 с пакетом обновления 4 (SP4)

Появится последовательная консоль и отображаются сообщения о загрузке, но не отображается запрос для входа:

Откройте сеанс 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

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

После этого меню GRUB будет отображаться еще на 5 секунд. Нажав стрелку вниз, вы прервете счетчик и выберите ядро, которое нужно загрузить, либо добавить ключевое слово одиночный для однопользовательского режима, в котором требуется задать корневой пароль.

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

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

Принудительное использование ядра в командной строке Bash

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

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

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

mount -o remount,rw /

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

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

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

Перезапустите виртуальную машину с помощью

/sbin/reboot -f

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

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

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

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

Дальнейшие действия

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

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

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