Заблаговременное обеспечение доступа к 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 и GRUB означает, что изменение пароля или неправильная конфигурация могут быть исправлены в течение нескольких минут, а не часов. Вы даже можете принудительно загрузить виртуальную машину из альтернативного ядра, если на диске есть несколько ядер в сценарии, когда основное ядро будет повреждено.
Рекомендуемый порядок методов восстановления
Последовательная консоль Azure
Переключение диска можно автоматизировать с помощью следующих средств:
Устаревший метод
Видео о переключении диска
Если у вас нет доступа к 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 на портал 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
Как показано ниже:
После завершения можно попробовать получить доступ к 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:
Создайте файл с именем /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
Попросите выскочки начать getty
sudo start ttyS0
Параметры, необходимые для настройки последовательной консоли для версий Ubuntu, можно найти здесь.
Режим восстановления Ubuntu
Дополнительные параметры восстановления и очистки доступны для Ubuntu через GRUB, однако эти параметры доступны только при соответствующей настройке параметров ядра. Если не настроить этот параметр загрузки ядра, меню восстановления будет отправлено в Диагностика Azure, а не в последовательную консоль Azure. Вы можете получить доступ к меню восстановления Ubuntu, выполнив следующие действия.
Прерывание процесса ЗАГРУЗКИ и доступ к меню GRUB
Выберите Дополнительные параметры для 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. Обязательно щелкните консоль в браузере, чтобы активировать меню, и выберите необходимое ядро.
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.
Перезапустите виртуальную машину с помощью
/sbin/reboot -f
Однопользовательский режим
Кроме того, может потребоваться доступ к виртуальной машине в однопользовательском или аварийном режиме. Выберите ядро, которое нужно загрузить или прервать, с помощью клавиш со стрелками. Перейдите в нужный режим, добавив ключевое слово один или 1 в строку загрузки ядра. В системах RHEL также можно добавить rd.break.
Дополнительные сведения о том, как получить доступ к однопользовательским режиму, см. в этом документе.
Дальнейшие действия
Дополнительные сведения о последовательной консоли Azure
Свяжитесь с нами для получения помощи
Если у вас есть вопросы или вам нужна помощь, создайте запрос в службу поддержки или обратитесь за поддержкой сообщества Azure. Вы также можете отправить отзыв о продукте в сообщество отзывов Azure.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по