As vezes nos encontramos em situações onde é preciso reiniciar o S.O após algum problema e na maioria das vezes não temos acesso físico a máquina. Para melhorar a situação os comandos shutdown, halt e reboot não funcionam nem pedindo pelo amor de Deus… ehehehe. Semana passada eu me encontrei nesta situação após um problema com o sistema de arquivos, depois de tentar de tudo, só me restou forçar um reboot usando sysreq.
O que é sysreq?
É um conjunto de teclas “mágicas” que quando você pressionar o kernel irá responder imediatamente.
Habilitando o sysreq
O kernel deve ser compilado com a opção CONFIG_MAGIC_SYSRQ ativada (a maioria das distribuições vem com esta opção ativada). Para habitarmos com todas as funcionalidades digite:
echo 1 > /proc/sys/kernel/sysrq
Veja a tabela de opções (em inglês):
0 – disable sysrq completely
1 – enable all functions of sysrq
2 – enable control of console logging level
4 – enable control of keyboard (SAK, unraw)
8 – enable debugging dumps of processes etc.
16 – enable sync command
32 – enable remount read-only
64 – enable signalling of processes (term, kill, oom-kill)
128 – allow reboot/poweroff
256 – allow nicing of all RT tasks
Forçando um shutdown/reboot
Depois de habilitado para usarmos é simples, pressione Alt + Sys Rq + “tecla de comando” ou defindo a “tecla de comando” no arquivo /proc/sysrq-trigger.
Forçando shutdown:
echo o > /proc/sysrq-trigger
Forçando reboot:
echo b > /proc/sysrq-trigger
Este comando irá rebootar o sistema imediatamente sem sincronizar ou desmontar o disco.
Tabela de comandos (em inglês):
’b’ Will immediately reboot the system without syncing or unmounting your disks.
’c’ Will perform a kexec reboot in order to take a crashdump.
’d’ Shows all locks that are held.
’e’ Send a SIGTERM to all processes, except for init.
’f’ Will call oom_kill to kill a memory hog process.
’g’ Used by kgdb on ppc and sh platforms.
’h’ Will display help (actually any other key than those listed here will display help. but ’h’ is easy to remember : )
’i’ Send a SIGKILL to all processes, except for init.
’k’ Secure Access Key (SAK) Kills all programs on the current virtual console. NOTE: See important comments below in SAK section.
’m’ Will dump current memory info to your console.
’n’ Used to make RT tasks nice able
’o’ Will shut your system off (if configured and supported).
’p’ Will dump the current registers and flags to your console.
’q’ Will dump a list of all running timers.
’r’ Turns off keyboard raw mode and sets it to XLATE.
’s’ Will attempt to sync all mounted filesystems.
’t’ Will dump a list of current tasks and their information to your console.
’u’ Will attempt to remount all mounted filesystems read only.
’v’ Dumps Voyager SMP processor info to your console.
’w’ Dumps tasks that are in uninterruptable (blocked) state.
’x’ Used by xmon interface on ppc/powerpc platforms.
’0’ ’9’ Sets the console log level, controlling which kernel messages will be printed to your console. (’0’, for example would make it so that only emergency messages like PANICs or OOPSes would make it to your console.)