Compartilhar via


Use o console serial do Azure para chamadas SysRq e NMI

Aplica-se a: ✔️ VMs (Máquinas Virtuais) do Linux

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 a recuperação de máquinas virtuais 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 simula o pressionamento da tecla SysRq, bem como a entrada de caracteres em um teclado físico.

Depois que a sequência SysRq é entregue, a configuração do kernel controla como o sistema responde. Para obter informações sobre como habilitar e desabilitar o SysRq, consulte a marcação de textodo 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 a seguir.

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" abre uma caixa de diálogo, que fornece opções comuns do SysRq ou aceita uma sequência de comandos SysRq inseridos na caixa de diálogo. Este "Comando Enviar SysRq permite que uma 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 inserir chave estiver selecionada e REISUB for inserida no campo a seguir.

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 de Administração do SysRq, o SysRq pode ser configurado de modo que todos, nenhum ou apenas determinados comandos estejam disponíveis. Você pode habilitar todos os comandos do SysRq usando a seguinte etapa, mas ela não sobrevive 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. Reinicializando ou atualizando o sysctl executando
    sysctl -p

Teclas de comando

No Guia de Administração do SysRq:

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 encerrar um processo que consome muita memória, mas não entre em pânico se nada puder ser finalizado.
g Usado pelo kgdb (depurador do kernel)
h Exibirá ajuda (qualquer outra chave que não as 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. OBSERVAÇÃO: Consulte comentários importantes na seção SAK a seguir.
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 de kernel são impressas no 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 quando receber um comando "Crash" do SysRq, consulte os seguintes links:

Ubuntu

Red Hat

SUSE

CoreOS

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

Uma NMI (interrupção não mascarada) cria um sinal que o software em uma máquina virtual não ignora. Historicamente, as NMIs são usadas para monitorar problemas de hardware em sistemas que exigiam tempos de resposta específicos. Hoje, programadores e administradores de 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 de teclado na barra de comandos a seguir. Depois que o NMI é entregue, a configuração da máquina virtual controla 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 dão suporte ao sysctl para configurar parâmetros de kernel, você pode habilitar um pânico ao receber essa NMI usando os seguintes comandos:

  1. Adicionando 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 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 obter a documentação específica da distribuição no NMI e as etapas para configurar o Linux para criar um despejo de memória quando receber um NMI, consulte os seguintes links:

Ubuntu

Red Hat

SUSE

CoreOS

Próximas etapas