Usar o Console Serial do Azure para chamadas SysRq e NMI

Solicitação do Sistema (SysRq)

Um SysRq é uma sequência de chaves compreendidas pelo kernel do sistema de operação Linux, que pode disparar um conjunto de ações pré-definidas. Esses comandos geralmente são usados quando a solução de problemas ou recuperação de máquina virtual não pode ser executada por meio da administração tradicional (por exemplo, se a VM não estiver respondendo). Usar o recurso SysRq do Azure Serial Console imitará a pressionamento da tecla SysRq e os caracteres inseridos em um teclado físico.

Depois que a sequência SysRq for entregue, a configuração do kernel controlará como o sistema responde. Para obter informações sobre a habilitação e desabilitação do SysRq, consulte a marca de texto do Guia de Administração do SysRq | .

O Console Serial do Azure pode ser usado para enviar um SysRq para uma máquina virtual do Azure usando o ícone do teclado na barra de comandos mostrada abaixo.

Captura de tela do Console serial do Azure. O ícone do teclado é realçado e seu menu fica visível. Esse menu contém um item de comando Enviar SysRq.

Escolher "Enviar Comando SysRq" abrirá uma caixa de diálogo, que fornecerá opções comuns do SysRq ou aceitará uma sequência de comandos SysRq inseridos na caixa de diálogo. Isso permite que séries de SysRq executem uma operação de alto nível, como uma reinicialização segura usando: REISUB.

Captura de tela da caixa de diálogo Enviar Comando SysRq para Convidado quando a opção de tecla de entrada é selecionada e REISUB é entrada no campo abaixo.

O comando SysRq não pode ser usado em máquinas virtuais que estão paradas ou cujo kernel está em um estado não responsivo. (por exemplo, um pânico do kernel).

Habilitar SysRq

Conforme descrito no Guia de Administração do SysRq acima, o SysRq pode ser configurado de forma que todos, nenhum ou apenas determinados comandos estão disponíveis. Você pode habilitar todos os comandos SysRq usando a etapa abaixo, mas ele não sobreviverá a uma reinicialização:

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

Para tornar a configuração SysReq persistente, você pode fazer o seguinte para habilitar todos os comandos SysRq

  1. Adicionando essa linha a /etc/sysctl.conf
    kernel.sysrq = 1
  2. Reinicializando ou atualizando sysctl executando
    sysctl -p

Teclas de comando

No Guia de administração do SysRq acima:

Comando Função
b Reiniciará imediatamente o sistema sem sincronizar ou desmontar seus discos.
c Executará uma falha do sistema por uma desreferência de ponteiro NULL. Um crashdump será feito se estiver configurado.
d Mostra todos os bloqueios mantidos.
e Envie um SIGTERM para todos os processos, exceto para init.
f Chamará o oom killer para matar um processo de hog de memória, mas não entre em pânico se nada puder ser morto.
g Usado por kgdb (depurador de kernel)
h Exibirá ajuda (qualquer outra chave que não as listadas aqui também exibirá ajuda, h mas é fácil lembrar :-)
i Envie um SIGKILL para todos os processos, exceto para init.
j Forcibly "Just thaw it" - filesystems frozen by the FIFREEZE ioctl.
k Chave de Acesso Seguro (SAK) Elimina todos os programas no console virtual atual. OBSERVAÇÃO: Consulte comentários importantes abaixo na seção SAK.
l Mostra um backtrace de pilha para todas as CPUs ativas.
m Despejará informações de memória atuais no console.
n Usado para tornar as tarefas RT mais bem-capazes
o Desligará seu sistema (se configurado e com suporte).
p Despeja os registros e sinalizadores atuais no console.
q Despeja as listas por CPU de todos os hrtimers (mas não temporizadores timer_list regulares) e informações detalhadas sobre todos os dispositivos de clockevent.
r Desliga o modo bruto do teclado e o define como XLATE.
s Tentará sincronizar todos os sistemas de arquivos montados.
t Despeja uma lista de tarefas atuais e suas informações para o console.
u Tentará reajustar todos os sistemas de arquivos montados somente leitura.
v Restaura com força o console framebuffer
v Causa despejo de buffer ETM [ARM específico]
w Despeja tarefas que estão em estado ininterrupta (bloqueado).
x Usado pela interface xmon em plataformas ppc/powerpc. Mostrar registros de PMU globais em sparc64. Despejo de todas as entradas TLB no MIPS.
y Mostrar registros globais de CPU [SPARC-64 específico]
z Despejar o buffer de ftrace
0-9 Define o nível de log do console, controlando quais mensagens de kernel serão impressas no console. (0, por exemplo, faria com que apenas mensagens de emergência como PANICs ou OOPSes o faria chegar ao seu console.)

Documentação específica da distribuição

Para a documentação específica de distribuição no SysRq e etapas para configurar o Linux para criar um despejo de falhas quando receber um comando "Crash" do SysRq, consulte os links abaixo:

Ubuntu

Red Hat

SUSE

CoreOS

Interrupção Não Mascarada (NMI)

Uma interrupção não mascarada (NMI) foi projetada para criar um sinal de que o software em uma máquina virtual não ignorará. Historicamente, as NMIs têm sido usadas para monitorar problemas de hardware em sistemas que exigiam tempos de resposta específicos. Atualmente, os programadores e administradores do sistema geralmente usam o NMI como um mecanismo para depurar ou solucionar problemas de sistemas que não estão respondendo.

O Console Serial pode ser usado para enviar um NMI para uma máquina virtual do Azure usando o ícone do teclado na barra de comandos mostrada abaixo. Depois que o NMI for entregue, a configuração da máquina virtual controlará como o sistema responde. Os sistemas operacionais Linux podem ser configurados para falhar e criar um despejo de memória que o sistema operacional recebe um NMI.

Captura de tela do Console Serial. O ícone do teclado é realçado e seu menu fica visível. Esse menu contém um item Enviar Interrupção Não Mascarada.

Habilitar o NMI

Para sistemas Linux que suportam sysctl para configurar parâmetros kernel, você pode habilitar um pânico ao receber esse NMI usando o seguinte:

  1. Adicionando essa linha a /etc/sysctl.conf
    kernel.panic_on_unrecovered_nmi=1
  2. Reinicializando ou atualizando sysctl executando
    sysctl -p

Para obter mais informações sobre configurações de kernel linux, incluindo unknown_nmi_panic, panic_on_io_nmie panic_on_unrecovered_nmi, consulte: Documentação para /proc/sys/kernel/*. Para documentação específica de distribuição no NMI e etapas para configurar o Linux para criar um despejo de falha quando receber um NMI, consulte os links abaixo:

Ubuntu

Red Hat

SUSE

CoreOS

Próximas etapas