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


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

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

Замечание

Новое! Попробуйте использовать поддержку виртуальной машины для ускорения диагностики

Рекомендуется запустить Ассистент виртуальных машин для Windows или Ассистент виртуальных машин для Linux. Эти средства диагностики на основе скриптов помогают выявить распространенные проблемы, влияющие на гостевой агент виртуальной машины Azure и общую работоспособность виртуальных машин.

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

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

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

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

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

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

Совет

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

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

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

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

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

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

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

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

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

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

Обеспечение доступа к Серийной консоли 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.

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

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

sudo sysctl -w kernel.sysrq=1

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

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

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

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

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

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

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

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

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

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

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

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

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

По умолчанию вы должны иметь доступ к GRUB, удерживая клавишу ESC во время загрузки виртуальной машины, если меню GRUB не отображается, вы можете принудительно и сохранить меню 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

Убедитесь, что консоль [email protected] включена, чтобы systemd предоставила запрос на вход на этой консоли.

sudo systemctl enable [email protected]
sudo systemctl start [email protected]

Режим восстановления 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 8.6+ GRUB

Конфигурация по умолчанию /etc/default/grub в этих версиях настроена надлежащим образом.

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

GRUB_TIMEOUT_STYLE=countdown
GRUB_TERMINAL="serial console"
GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"

Убедитесь, что консоль [email protected] включена, чтобы systemd предоставила запрос на вход на этой консоли.

sudo systemctl enable [email protected]
sudo systemctl start [email protected]

SuSE

SUSE Linux Enterprise Server 15 sp5

Конфигурация по умолчанию /etc/default/grub в этих версиях настроена надлежащим образом.

GRUB_DEFAULT=0
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=1
GRUB_CMDLINE_LINUX_DEFAULT="console=ttyS0 net.ifnames=0 dis_ucode_ldr earlyprintk=ttyS0 multipath=off nvme_core.io_timeout=240 rootdelay=300 scsi_mod.use_blk_mq=1 USE_BY_UUID_DEVICE_NAMES=1 systemd.unified_cgroup_hierarchy=1"
GRUB_CMDLINE_LINUX=""


GRUB_DISTRIBUTOR="SLES15-SP5"
GRUB_GFXMODE=auto
GRUB_TERMINAL_INPUT="serial"
GRUB_TERMINAL_OUTPUT="serial"
GRUB_TIMEOUT_STYLE=countdow

Убедитесь, что консоль [email protected] включена, чтобы systemd предоставила запрос на вход на этой консоли.

sudo systemctl enable [email protected]
sudo systemctl start [email protected]

SLES 12 SP1

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

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

GRUB_CMDLINE_LINUX_DEFAULT="console=ttyS0 net.ifnames=0 dis_ucode_ldr earlyprintk=ttyS0 multipath=off nvme_core.io_timeout=240 rootdelay=300 scsi_mod.use_blk_mq=1 USE_BY_UUID_DEVICE_NAMES=1 systemd.unified_cgroup_hierarchy=1"
GRUB_TERMINAL_INPUT="serial"
GRUB_TERMINAL_OUTPUT="serial"
GRUB_TIMEOUT=10
GRUB_TIMEOUT_STYLE=countdown

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

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

Убедитесь, что консоль [email protected] включена, чтобы systemd предоставила запрос на вход на этой консоли.

sudo systemctl enable [email protected]
sudo systemctl start [email protected]

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

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

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

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

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

Наличие доступа к GRUB позволяет прерывать процесс инициализации. Такая возможность может быть полезна для многих процедур восстановления. Если у вас нет корневого пароля и для входа в однопользовательский режим требуется, чтобы у вас был корневой пароль, можно загрузить ядро, заменив программу 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.