Lorsque vous n’avez plus la main sur la machine et que tout à l’aire « freezé » plutôt que de faire un hard-reset il est possible de passer directement au noyau les commandes permetant de faire un reboot « propre » compte tenu de la situation.
Sources :
- wiki Archlinux
- wikipedia fr
- wikipedia en
- documentation officiel du noyau Linux
- Éteindre un système linux planté
activation
Pour ce faire vous devez préalablement avoir activé les magic SysRq keys via sysctl.
Pour la session courante :
root@laptop # sysctl -w kernel.sysrq=1
Pour le prochain démarrage, via le fichier /etc/sysctl.d/99-sysrq.conf
:
kernel.sysrq = 1
Utiliser la commande suivante Pour vérifier que les magic SysRq keys sont actives, la signification des différentes valeurs est décrite dans la documentation officiel du noyau Linux :
max@laptop % sysctl kernel.sysrq
reboot
Lorsque la machine est « freezé », pour redémarrer « proprement » le système utiliser la combinaison de touches suivante :
Alt+SysRq+r
récupère le clavierAlt+SysRq+e
envoie le signal SIGTERM à tous les processus pour leur permettre de se terminer « normalement »Alt+SysRq+i
envoie le signal SIGKILL à tous les processus pour « tuer » ceux qui n’ont pas réussi se terminer avec le SIGTERMAlt+SysRq+s
fait un sync des données sur le disqueAlt+SysRq+u
démonte tous les systèmes de fichiers et les remonte en read-onlyAlt+SysRq+b
redémarre
SysRq
correspond à la touche PrtScrn
soit « Impression Écran ».
Il est possible qu’il faille utiliser la touche fn
pour accèder à SysRq
.
Attention, quelque soit votre layout il faut considéré que vous êtes en qwerty.
Par exemple sur un clavier bépo typematrix Alt+SysRq+r
devient fn+Alt+prt.sc+o
et REISUB devient OPDUVK.
Moyen mnémotechnique pour se rappeler de la suite de touches :
- Revenir En Islande Sur Un Bateau
- Reboot Even If System Utterly Broken
- REISUB
- BUSIER à l’envers
Pour le bépo j’ai trouvé « On Peut Démarrer Un Vieux Koukou » (c’est con que coucou s’écrive avec un C… ça sonnait plutôt bien)
Avec systemd, il est possible que le « display manager » (gdm, kdm…) soit redémarré directement après Alt+SysRq+e
.
Cela est du à la clause Restart=always
dans le fichier de configuration systemd du service correspondant.
via ssh (/proc)
Il est possible de déclencher ces évènement (sysrq) sur un server distant. Il faut cependant déjà être connecté en ssh dessus (encore heureux…).
Par exemple, avoir la liste des processus bloqué en « uninterruptible sleep » (généralement IO, état D dans ps
) :
root@laptop # echo w > /proc/sysrq-trigger
root@laptop # dmesg
…
[32227.618675] sysrq: SysRq : Show Blocked State
[32227.618685] task PC stack pid father
[32227.619300] systemd-udevd D 0 17760 306 0x00000100
[32227.619310] Call Trace:
[32227.619328] __schedule+0x22f/0x700
…
Pour restart une machine distante qui ne répond plus :
root@server # echo s > /proc/sysrq-trigger
root@server # echo u > /proc/sysrq-trigger
root@server # echo b > /proc/sysrq-trigger
En ssh, r
(récupère le clavier) ne sert à rien et e
et i
(sigterm & sigkill) couperait le service ssh et on serait comme des con… il ne faut donc pas les utiliser.
Il n’est pas possible de passé plusieurs commande d’un coup, on ne peut pas faire echo 'reisub' > /proc/sysrq-trigger
.