Compartilhar via


Usar o Console Serial do Azure para chamadas SysRq e NMI

Aplica-se a: ✔️ VMs do Linux

System Request (SysRq)

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

Depois que a sequência SysRq for entregue, a configuração de kernel irá controlar como o sistema responde. Para obter informações sobre como habilitar e desabilitar o SysRq, consulte a marcação 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 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 de SysRq" abrirá uma caixa de diálogo, que fornecerá opções comuns de SysRq ou aceitará uma sequência de comandos de SysRq inseridos na caixa de diálogo. Isso permite que a série de SysRqs execute 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 é 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 pânico de kernel).

Habilitar SysRq

Conforme descrito no Guia do Administrador do SysRq acima, o SysRq pode ser configurado de modo que todos os comandos, nenhum deles ou apenas determinados comandos estejam disponíveis. Você pode habilitar todos os comandos de SysRq usando a etapa abaixo, mas eles não permanecerão em vigor após uma reinicialização:

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

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

  1. Adicionar esta linha a /etc/sysctl.conf
    kernel.sysrq = 1
  2. Reinicializando ou atualizando o sysctl executando
    sysctl -p

Teclas de Comando

No Guia do Administrador do SysRq acima:

Comando Função
b Reiniciará imediatamente o sistema sem sincronizar ou desmontar os discos.
c Executará uma falha do sistema por meio de uma desreferência de ponteiro NULL. Um despejo de memória será utilizado se configurado.
d Mostra todos os bloqueios mantidos.
e Envie um SIGTERM para todos os processos, exceto para init.
f Chamará o killer oom para encerrar um processo de consumo de memória, mas não acionará o pânico se nada puder ser encerrado.
g Usado por kgdb (depurador de kernel)
h Exibirá a ajuda (qualquer outra chave diferente daquelas listadas aqui também exibirá a ajuda, mas h é fácil de lembrar :-)
i Envie um SIGKILL para todos os processos, exceto para init.
j Forçar "Apenas descongelá-lo" - sistemas de arquivos congelados por FIFREEZE ioctl.
k A Chave de Acesso Seguro (SAK) encerra todos os programas no console do virtual atual. OBSERVAÇÃO: consulte os comentários importantes abaixo na seção SAK.
l Mostra um backtrace de pilha para todas as CPUs ativas.
m Despejará as informações da memória atual no console.
n Usado para facilitar as tarefas de RT
o Desativará o sistema (se configurado e com suporte).
p Despejará os registros e sinalizadores atuais para o console.
q Despejará por listas de CPU de todos os hrtimers armados (mas NÃO temporizadores timer_list regulares) e informações detalhadas sobre todos os dispositivos clockevent.
r Desativa o modo bruto do teclado e define-o como XLATE.
s Tentará sincronizar todos os sistemas de arquivos montados.
t Despejará uma lista de tarefas atuais e suas informações no console.
u Tentará montar novamente todos os sistemas de arquivos somente leitura montados.
v Restaura forçadamente o console framebuffer
v Causa despejo do buffer de ETM [específico de ARM]
w Despeja tarefas que estão em estado ininterrupto (bloqueado).
x Usado pela interface xmon em plataformas ppc/powerpc. Mostre os Registros PMU globais em sparc64. Despeje todas as entradas TLB em MIPS.
y Mostrar Registros de CPU globais [específico de SPARC-64]
z Despejar o buffer ftrace
0-9 Define o nível de log de console, controlando quais mensagens de kernel serão impressas no console. (0, por exemplo, faria isso, para que apenas mensagens de emergência como PANICs ou OOPSes fizessem isso no console.)

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

Para obter a documentação específica de distribuição em SysRq e as etapas para configurar o Linux para criar um despejo de memória no recebimento de um comando "Crash" de 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) foi 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 uma NMI a uma máquina virtual do Azure usando o ícone de teclado na barra de comandos mostrada abaixo. Depois que a NMI for entregue, a configuração de máquina virtual irá controlar como o sistema responde. Os sistemas operacionais Linux poderão ser configurados para parar e criar um despejo de memória quando o sistema operacional receber uma 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.

Habilitar NMI

Para sistemas Linux que dão suporte a sysctl para configurar parâmetros de kernel, você pode habilitar um pânico ao receber essa NMI usando o seguinte:

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

Para obter mais informações sobre configurações de kernel do Linux, incluindo unknown_nmi_panic, panic_on_io_nmi e panic_on_unrecovered_nmi, consulte: Documentação para /proc/sys/kernel/*. Para obter a documentação específica de distribuição em NMI e as etapas para configurar o Linux para criar um despejo de memória no recebimento de uma 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.