Reboot forçado com o sysrq - "Magic SysRq Key"
Autor: Rodrigo Floriano | Publicado: 2013-07-22T10:18:00-03:00

Recentemente, tive uma seguinte situação, eu estava conectado em um servidor linux remotamente (ssh) e precisava realizar um reboot nessa máquina, no método normal executei os comandos ~# init 6 e ~# reboot e nada da máquina reiniciar e o servidor não tinha nenhuma reação.

Lembrei de algo que um dia um amigo do linux havia me ensinado a respeito de sysrq, no meu caso eu tinha acesso ssh ao servidor, conseguia executar comandos e navegar pelos diretórios, porém sem chance de reiniciar a máquina pelo sistema.

Vasculhando minhas anotações e minhas memórias lembrei dos comandos necessários para realizar o reboot da máquia mandando a instrução diretamente para o Kernel, de uma forma bem simples.

Segue abaixo:

Primeiramente precisamos ativar o recurso sysrq no kernel para que ele entenda a instrução que enviaremos:

~# echo 1 &gt; /proc/sys/kernel/sysrq&nbsp;

Após o recurso ativo, enviamos um "b" para dentro do /proc com isso kernel entende que deve realizar um reboot, e instantaneamente a máquina é reiniciada (lembrando que esse recurso deverá ser utilizado somente em caso de necessidade).

~# echo b &gt; /proc/sysrq-trigger

Abaixo segue a lista de instruções possíveis de se enviar para /proc/sysrq-trigger com suas respectivas funcionalidades e efeitos: ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~'b' - Reinicia imediatamente sem sync e sem desmontar os discos.'c' - irá realizar uma pane no sistema por um desreferenciava ponteiro NULL.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A crashdump serão tomadas se configurado.'d' - Mostra todos os bloqueios que são mantidos.'e' - Enviar SIGTERM a todos os processos, exceto para o init.'f' - Vai chamar oom_kill para matar um processo devorador de memória.'g' - Usado por kgdb (kernel debugger)'h' - irá apresentar uma ajuda (na verdade, qualquer outra tecla que não constem&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; aqui irá apresentar uma ajuda. mas 'h' é fácil de lembrar :-)'i' - Enviar SIGKILL a todos os processos, exceto para o init.'j' - à força "Just descongelar" - sistemas de arquivos congelado pelo ioctl FIFREEZE.'k' - Segura Chave de Acesso (SAK) Mata todos os programas da atual virtuais&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console. NOTA: Ver comentários importantes a seguir na seção SAK.'l' - Mostra um rastreamento de pilha para todas as CPUs ativo.'m' - despeja informações atual da memória para o console.'n' - Usado para fazer tarefas RT nice-able'o' - Vai fechar seu sistema off (se configurado e suportado).'p' - vai despejar os registradores e flags atuais para o seu console.'q' - vai despejar por listas de CPU de todos os hrtimers armados (mas não é regular&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timer_list timers) e informações detalhadas sobre todos os&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dispositivos clockevent.'r' - Desliga modo bruto teclado e define-a xlate.'s' - Vai tentar sincronizar todos os sistemas de arquivos montados.'t' - vai despejar uma lista de tarefas atuais e suas informações para o seu&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.'u' - Vai tentar remontar todos os sistemas de arquivos montados somente leitura.'v' - à força restaura console framebuffer'v' - Provoca ETM tampão de despejo [específico ARM]'w' - Despeja tarefas que estão em estado ininterrupta (bloqueado).'x' - Usado pela relação xmon em plataformas PPC / powerpc.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Mostrar PMU mundial Registra em sparc64.'y' - Mostra CPU mundial Registra [SPARC-64 específico]'z' - Dump o buffer ftrace'0 '- '9' - Define o nível de log do console, o controle que as mensagens do kernel envia&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; serão impressos para o seu console. ('0 ', Por exemplo, faria&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -lo para que apenas as mensagens de emergência, como PANICs ou OOPSes sejam faria&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; torná-lo para o seu console.)

Obs.: Fiz a tradução dos comandos acima pelo google, portanto dúvidas consulte os links abaixo que tem as documentações originais em inglês.

Para maiores informações do Sysrq veja:&nbsp;

http://www.linuxhowtos.org/Tips%20and%20Tricks/sysrq.htm
http://pt.wikipedia.org/wiki/SysRq
http://www.centos.org/docs/5/html/5.1/Deployment_Guide/s2-proc-sysrq-trigger.html
https://www.kernel.org/doc/Documentation/sysrq.txt