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

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

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

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

Как только последовательность SysRq будет запущена, конфигурация ядра будет контролировать реакцию системы. Сведения о включении и отключении SysRq см. в текстовом | руководстве по администратору SysRq.

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

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

При выборе команды Send SysRq Command (Отправить команду SysRq) откроется диалоговое окно, которое предоставит общие параметры SysRq или примет последовательность команд SysRq, введенных в диалоговое окно. Это позволяет сериям 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:

Команда Function
b Немедленно инициирует перезагрузку системы без синхронизации или отключение дисков.
c Выполняет сбой системы с помощью разыменования пустого указателя. Если настроено, будет создан аварийный дамп.
d Показывает все удерживаемые блокировки.
e Отправляет SIGTERM всем процессам, за исключением init.
f Вызывает завершение зависшего процесса, чтобы устранить нехватку памяти, но не переживайте, если процесс не завершается.
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 Принудительно восстанавливает консоль framebuffer.
v Вызывает дамп буфера ETM [относящийся к ARM].
w Создает дамп задач, которые находятся в непрерываемом (заблокированном) состоянии.
x Используется интерфейсом xmon на платформах ppc/powerpc. Отображает глобальные регистры PMU в sparc64. Создает дамп всех записей TLB в MIPS.
y Отображает глобальные регистры ЦП [относящиеся к SPARC-64].
z Создает дамп буфера ftrace.
0-9 Устанавливает уровень журналирования консоли, контролирующий, какие сообщения ядра будут отображаться в консоли. (0, например, сделает так, чтобы только сообщения о чрезвычайной ситуации, такие как PANIC или OOPS, могли попасть в вашу консоль.)

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

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

Ubuntu

Red Hat

SUSE

CoreOS

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

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

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

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

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

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

  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/*. Документацию по немаскируемому прерыванию для конкретного дистрибутива и шаги по настройке Linux для создания аварийного дампа при получении немаскируемого прерывания см. по ссылкам ниже.

Ubuntu

Red Hat

SUSE

CoreOS

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

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

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