Use 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 operacional Linux, que pode desencadear um conjunto de ações pré-definidas. Esses comandos geralmente são usados quando a solução de problemas ou recuperação da máquina virtual não pode ser executada por meio da administração tradicional (por exemplo, se a VM não estiver respondendo). O uso do recurso SysRq do console serial do Azure simulará o pressionamento da tecla SysRq e os caracteres inseridos em um teclado físico.

Assim que a sequência SysRq for entregue, a configuração do kernel controlará como o sistema responde. Para obter informações sobre como ativar e desativar o SysRq, consulte o Guia de administração do SysRqtexto | markdown.

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

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

Escolher "Enviar comando SysRq" abrirá uma caixa de diálogo, que fornecerá opções comuns de 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 Send SysRq Command to Guest quando a opção de entrada de chave é selecionada e REISUB é inserido 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 kernel panic).

Habilitar SysRq

Conforme descrito no Guia de administração do SysRq acima, o SysRq pode ser configurado de forma que todos, nenhum ou apenas alguns comandos estejam disponíveis. Você pode ativar todos os comandos SysRq usando a etapa abaixo, mas 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 esta linha a /etc/sysctl.conf
    kernel.sysrq = 1
  2. Reiniciando ou atualizando o sysctl executando
    sysctl -p

Teclas de comando

Do Guia de administração do SysRq acima:

Comando Função
b Irá reiniciar imediatamente o sistema sem sincronizar ou desmontar seus discos.
c Irá executar uma falha do sistema por um desreferenciamento de ponteiro NULL. Um despejo de memória será feito se 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 devorador de memória, mas não entre em pânico se nada puder ser morto.
g Usado pelo kgdb (depurador do kernel)
h Exibirá ajuda (qualquer outra chave além das listadas aqui também exibirá ajuda, mas h é fácil de lembrar :-)
i Envie um SIGKILL para todos os processos, exceto para init.
j Forçosamente "Apenas descongele" - sistemas de arquivos congelados pelo FIFREEZE ioctl.
k Secure Access Key (SAK) Mata todos os programas no console virtual atual. NOTA: Veja os comentários importantes abaixo na seção SAK.
l Mostra um backtrace de pilha para todas as CPUs ativas.
m Irá despejar as informações de memória atuais em seu console.
n Usado para tornar as tarefas de RT agradáveis
o Irá desligar seu sistema (se configurado e suportado).
p Irá despejar os registros e sinalizadores atuais em seu console.
q Descarregará listas por CPU de todos os cronômetros armados (mas NÃO cronômetros timer_list regulares) e informações detalhadas sobre todos os dispositivos clockevent.
r Desativa o modo bruto do teclado e o define como XLATE.
s Tentará sincronizar todos os sistemas de arquivos montados.
t Irá despejar uma lista de tarefas atuais e suas informações em seu console.
u Tentará remontar todos os sistemas de arquivos montados somente para leitura.
v Restaura com força o console framebuffer
v Causa dump do buffer ETM [específico do ARM]
w Despeja tarefas que estão em estado ininterrupto (bloqueado).
x Usado pela interface xmon em plataformas ppc/powerpc. Mostrar registros globais de PMU em sparc64. Despeje todas as entradas TLB no MIPS.
y Mostrar registros globais de CPU [específico SPARC-64]
z Despejar o buffer ftrace
0-9 Define o nível de log do console, controlando quais mensagens do kernel serão impressas em seu console. (0, por exemplo, faria com que apenas mensagens de emergência como PANICs ou OOPses chegassem ao seu console.)

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

Para obter a documentação específica da distribuição no SysRq e as etapas para configurar o Linux para criar um despejo de memória ao receber um comando "Crash" do SysRq, consulte os links abaixo:

Ubuntu

Red Hat

SUSE

CoreOS

Interrupção Não Mascarável (NMI)

Uma interrupção não mascarável (NMI) é projetada para criar um sinal que o software em uma máquina virtual não irá ignorar. Historicamente, os NMIs têm sido usados para monitorar problemas de hardware em sistemas que exigiam tempos de resposta específicos. Hoje, os programadores e administradores de sistema costumam usar 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. Assim 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 travar e criar um despejo de memória, o sistema operacional recebe um NMI.

Captura de tela do console serial. O ícone do teclado é realçado e seu menu é visível. Esse menu contém um item Enviar interrupção não mascarável.

Ativar NMI

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

  1. Adicionando esta linha a /etc/sysctl.conf
    kernel.panic_on_unrecovered_nmi=1
  2. Reiniciando ou atualizando o sysctl executando
    sysctl -p

Para obter mais informações sobre as configurações do kernel do Linux, incluindo unknown_nmi_panic, panic_on_io_nmi e panic_on_unrecovered_nmi, consulte: Documentação para /proc/sys/kernel/*. Para documentação específica de distribuição sobre NMI e etapas para configurar o Linux para criar um despejo de memória ao receber um NMI, consulte os links abaixo:

Ubuntu

Red Hat

SUSE

CoreOS

Próximas etapas

Entre em contato conosco para obter ajuda

Se você tiver dúvidas ou precisar de ajuda, crie uma solicitação de suporte ou peça ajuda à comunidade de suporte do Azure. Você também pode enviar comentários sobre o produto para a comunidade de comentários do Azure.