Использование последовательной консоли Azure для вызовов SysRq и NMI

Применимо к: ✔️ Linux Виртуальные машины(виртуальные машины)

Сводка

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

Системный запрос (SysRq)

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

После доставки последовательности SysRq конфигурация ядра определяет способ реагирования системы. Сведения о включении и отключении SysRq см. в Руководстве администратора SysRqmarkdown.

Последовательная консоль Azure можно использовать для отправки SysRq на виртуальную машину Azure с помощью значка клавиатуры в следующей строке команд.

Скриншот последовательной консоли Azure. Выделен значок клавиатуры и отображается его меню. Это меню содержит элемент команды Send SysRq.

При выборе команды Send SysRq открывается диалоговое окно, которое предоставляет общие параметры SysRq или принимает последовательность команд SysRq, введенных в диалоговое окно. Эта команда "Send SysRq" позволяет выполнять серию высокоуровневых операций, таких как безопасная перезагрузка: REISUB.

Снимок экрана: диалоговое окно

Команда SysRq не может использоваться на остановленных виртуальных машинах или на таких, ядро которых ​​находится в неотвечающем состоянии Например, паника ядра.

Включение SysRq

Как описано в руководстве администратора SysRq, SysRq можно настроить таким образом, чтобы были доступны все команды, ни одна из команд, или только некоторые команды. Вы можете включить все команды SysRq, выполнив следующий шаг, но он не пережил перезагрузку:

echo "1" >/proc/sys/kernel/sysrq

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

  1. Добавьте эту строку в /etc/sysctl.conf.
    kernel.sysrq = 1
  2. Перезагрузка или обновление sysctl выполнением команды
    sysctl -p

Клавиши команд

Из руководства администратора SysRq:

Команда Функция
b Немедленно перезагрузит систему без синхронизации или размонтирования дисков.
c Выполняет сбой системы с помощью разыменования пустого указателя. Если настроена соответствующая конфигурация, будет создан аварийный дамп.
d Показывает все удерживаемые блокировки.
e Отправьте SIGTERM всем процессам, за исключением init.
f Вызовет OOM-киллер, чтобы завершить процесс, потребляющий много памяти, но не паникуйте, если ничего не получится завершить.
g Используется в kgdb (отладчике ядра).
h Отобразит справку (любая другая клавиша, кроме перечисленных здесь, также отображает справку, но h легко запомнить :-)
i Отправить SIGKILL всем процессам, за исключением init.
j Принудительно: "Просто разморозьте" — файловые системы, остановленные с помощью FIFREEZE ioctl.
k Защищенная клавиша доступа (SAK) завершает все программы в текущей виртуальной консоли. ПРИМЕЧАНИЕ. См. важные комментарии в следующем разделе SAK.
l Отображает обратную трассировку стека для всех активных ЦП.
m Передает текущую информацию о памяти в консоль.
n Используется для упрощения работы с задачами RT.
o Завершает работу системы (если эта клавиша настроена и поддерживается).
p Будет выгружать текущие регистры и флаги на вашу консоль.
q Будет выводить списки всех установленных hrtimers для каждого процессора (но не обычных таймеров из timer_list) и предоставлять подробную информацию обо всех устройствах clockevent.
r Отключает режим RAW клавиатуры и устанавливает для нее параметр XLATE.
s Будет пытаться синхронизировать все подключенные файловые системы.
t Передаст список текущих задач и информацию о них в консоль.
u Будет пытаться повторно примонтировать все подключенные файловые системы в режиме только для чтения.
v Принудительно восстанавливает консоль фреймбуфер.
v Вызывает дамп буфера ETM [для ARM].
w Создает дамп задач, которые находятся в непрерываемом (заблокированном) состоянии.
x Используется интерфейсом xmon на платформах ppc/powerpc. Отображает глобальные регистры PMU в sparc64. Сброс всех записей TLB на MIPS.
y Отображает глобальные регистры ЦП [относящиеся к SPARC-64].
z Очистите буфер ftrace.
0-9 Задает уровень журнала консоли, управляющий тем, какие сообщения ядра выводятся в вашей консоль. (0, например, сделает так, чтобы только сообщения о чрезвычайной ситуации, такие как PANIC или OOPS, могли попасть в вашу консоль.)

Документация для конкретного дистрибутива

Документацию для конкретного дистрибутива в SysRq и шаги по настройке Linux для создания аварийного дампа при получении команды SysRq "Crash" см. в следующих ссылках:

Ubuntu

Red Hat

SUSE

CoreOS

Немаскируемое прерывание (NMI)

Немаскируемое прерывание (NMI) создает сигнал, который программное обеспечение на виртуальной машине не может игнорировать. Исторически nmis используются для мониторинга аппаратных проблем в системах, требующих определенного времени отклика. Сегодня программисты и системные администраторы часто используют NMI в качестве механизма отладки или устранения неполадок систем, которые не отвечают.

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

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

Включение немаскируемого прерывания

Для систем Linux, поддерживающих sysctl для настройки параметров ядра, можно инициировать панику при получении этого NMI с помощью следующих команд:

  1. Добавьте эту строку в /etc/sysctl.conf.
    kernel.panic_on_unrecovered_nmi=1
  2. Перезагрузка или обновление sysctl выполнением команды
    sysctl -p

Дополнительные сведения о конфигурации ядра Linux, включая unknown_nmi_panic, panic_on_io_nmi и panic_on_unrecovered_nmi, см. в разделе документации по /proc/sys/kernel/*. Документацию для конкретного дистрибутива по NMI и действия по настройке Linux для создания аварийного дампа при получении NMI см. в следующих ссылках:

Ubuntu

Red Hat

SUSE

CoreOS

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