Para quem não conhece o SysRq(System Request) é uma tecla que você encontra na maioria dos teclados próximo ao Insert e a tecla Home, muitas vezes dividindo espaço com a tecla PrintScreen.
Toda historia e o porque você pode ver aqui no Wikipedia.
O que quero comentar é o uso que essa tecla permite ou permitia pelo menos nos dias de hoje, para algumas ações no console do Linux, SysRq com Alt e um caractere e uma função é executada.
Por exemplo Alt + SysRq + s irá dar um sync em todos file systems montados.
Uma relação dos caracteres, funções e mais informações pode ser visto neste link.
Porém, conseguimos usar este recurso do SysRq escrevendo direto no /proc referente a ele, para isso e para garantir exito devemos habilitar o sysrq, para isso executaremos o seguinte comando.
root@vm1 # echo 1 > /proc/sys/kernel/sysrq
Maravilha, agora temos certeza que o kernel esta apto a atender ao SysRq, alguns caracteres e funções interessantes e importantes conhecermos é:
Reboot (b) Umount (u) Sync (s) Poweroff (o)
Agora vem a parte legal, o porque de tudo isso e sobre SysRq. Tem tudo haver com o post Linux – Usando o forcefsck, porque imagina o cenário onde o Linux já remontou com read-only, o sistema esta com file system “sujo” e você precisa criar o /forcefsck para realizar fsck, porém o sistema esta como read-only!
Então você irá reiniciar o Linux, e assim que voltar irá criar o /forcefsck e reiniciar novamente, o problema é que já tive casos que comandos como reboot, shutdown, halt, poweroff estavam dando erro.
bash: /sbin/reboot: Input/output error bash: /sbin/shutdown: Input/output error
É ae que nessa hora entra a “sacadinha” do SysRq e irá salvar você, onde escrevendo o caractere no /proc/sysrq-trigger ele irá executar a função correspondente ao caractere. É bom atentar que o caractere ‘b‘ é um reboot imediato ao sistema, sem ao menos dar sync muito menos desmontar as partições, então sempre que possível execute pelo menos um sync, caso o programa não funcionar, envie o caractere ‘s‘ para o /proc/sysrq-trigger.
# Sync de todas partições montadas root@vm1 # echo s > /proc/sysrq-trigger # Reboot imediato sem desmontar partições muito menos dar sync root@vm1 # echo b > /proc/sysrq-trigger
Com isso o Linux irá rebootar, no retorno do sistema você pode criar o /forcefsck e reiniciar novamente, isso é valido para Linux workstation, servers e até versões embarcadas..
Você pode acompanhar tudo o que for utilizar acessando o /var/log/syslog, comandos como ‘s‘ [sync] e ‘t‘ [lista e informação das tarefas correntes], tudo isso pode ser visualizado no /var/log/syslog.
Bônus
Agora um bônus e uma verdadeira saída de mestre, foi quando precisei fazer isso e estava tão critico que o echo, cat e vários outros comandos também estavam com problemas, e não tinha muito recurso disponível e entre os comandos disponíveis estava o dd.
Então segue a maneira que consegui reiniciar. O que foi engraçado é que o echo funcionava, o problema estava quando tentava direcionar para escrever no /proc/sysrq-trigger com ‘>’.
A solução:
root@vm1 # echo s | dd of=/proc/sysrq-trigger root@vm1 # echo b | dd of=/proc/sysrq-trigger
Espero que tenham gostado ;)
Até a próxima!
Referências
http://pt.wikipedia.org/wiki/SysRq
http://www.linuxhowtos.org/Tips%20and%20Tricks/sysrq.htm
https://www.kernel.org/doc/Documentation/sysrq.txt
Linux – Reiniciar Linux com SysRq by Cleiton Bueno is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.