martedì 28 ottobre 2008

Linux Kernel Magic SysRq chiavi “Magiche” per il Crash Recovery

• Cosa sono i ” magic key sysqr” ?
Si possono definire come una combinazione “Magica” di tasti che permette di interagire direttamente con il kernel oltrepassando qualsiasi operazione stia compiendo, sempre che lo stesso non sia in blocco. Di solito vengono usati soprattutto per il debugging!

• A cosa mi possono servire?
Ad avere molte informazioni e come vedremo ad usarli a nostro vantaggio in caso di problemi.

• Per cosa posso utilizzarli?
In questo post vedremo come evitare in caso di freeze del server grafico di premere il tasto “reset”, odioso, quanto temibile perché non rispetta la procedura corretta di chiusura servizi , sync dei dischi e reboot.

• Come faccio ad avere questi Magic Key sulla mia LinuxBox?
Facile, se usate un kernel di default dovreste già avere l’opzione inclusa dentro, se lo ricompilate da voi dovrete inserirla.

Per sicurezza dovrete controllare il config del vostro kernel in uso :
$ egrep -i sysrq /boot/config-$(uname -r) CONFIG_MAGIC_SYSRQ=y

Se la risposta è positiva come in questo esempio siete a cavallo !

Per tutti quelli che amano compilarsi un kernel proprio, ricordo che la voce relativa ai ” sysrq key” si trova nella sezione “Kernel hacking” :

Un controllo successivo va fatto sul file ” /proc/sys/kernel/sysrq ” , dove dal numero risultante che otterremo capiremo cosa è abilitato o meno :
Possibili risultati :

0 - Completamente disabilitato
1 - Abilitate tutte le funzioni di sysrq
>1 - in base al numero si abilitano determinate funzioni (segue lista descrizione):
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

Bene eseguiamo il controllo :
$ cat /proc/sys/kernel/sysrq
1

Nel caso invece volessimo disattivare o abilitare determinate opzioni basterà da root eseguire :
# echo "number” >/proc/sys/kernel/sysrq

Dove number può assumere i valori presenti nella tabella o la somma degli stessi nel caso volessimo abilitare più opzioni contemporaneamente.

Perfetto passiamo all’azione, le combinazioni magiche che saremo in grado di usare sono le seguenti :

Alt + Stamp + LETTERA (sostituire con una delle seguenti)

b - Riavvia il sistema senza smontare o fare in syncing dei dischi.
c - Effettua un riavvio di kexec per prendere un crashdump.
d - Mostra tutti i blocchi.
e - Invia a tutti i processi tranne a quelli di init un SIGTERM
f - Uccide il processo più esoso di memoria
g - Usa kgdb su piattaforme ppc e sh
h - Visualizza l’aiuto (veramente l’aiuto viene visualizzato usando tutti i tasti non inseriti nell’elenco, ma usate la h perchè è molto più semplice ricordarlo)
i - Invia a tutti i processi eccetto quelli di init un SIGKILL
k - Secure Access Key (SAK) Uccide tutti i programmi sulla console virtuale corrente.
NOTA: Leggete i commenti importantissimi nella sezione SAK.
m - Visualizza informazioni della memoria .
n - Used to make RT tasks nice-able
o - Eseguie uno Shut Down del sistema (se configurato e supportato).
p - Visualizza i registri e flags correnti.
q - Mostra la lista di tutti i timers avviati.
r - setta la tastiera in XLATE.
s - Esegue un sync di tutti i filesystem montati.
t - Mostra tutti i processi.
u - Rimonta tutti filesystems in sola lettura.
v - Mostra informazioni su processori Voyager SMP.
w - Visualizza tutti i tasks bloccati.
x - Usato dall’interfaccia xmon su piattaforme ppc/powerpc.
0-9 - setta il livello di loging della console, mostrerà i messaggi del kernel sulla console. (0 ad esempio fa in modo di mostrare solo i messaggi di emergenza quali PANICs or OOPSes )

Rifarsi comunque alla documentazione ufficiale in lingua inglese, che trovate installando i sorgenti del kernel e leggendo il file :
Documentation/sysrq.txt

Arrivati a questo punto immaginate di essere nel mezzo di un freeze del Server grafico, tutto bloccato apparentemente, magari riuscite a fare lo switch sulle ttyN, forse non riuscite nemmeno a vedere le scritte etc etc. Bene prima di premere il tasto Reset proviamo a digitare queste combinazioni di tasti :

(vi indico quello che faccio io in questi casi, ma sono ben accetti consigli sul miglior metodo di seguenza da usare)

Cerco di terminare correttamente i processi, tranne quelli di INIT:
Alt + Stamp + e

Dopo qualche secondo ( in media 5/6 in modo da permettere alla combinazione precedente di terminare i processi in modo corretto) Uccido il resto dei processi , sempre tranne quelli di INIT:
Alt + Stamp + i

Faccio un sync dei dischi:
Alt + Stamp + s

Rimonto i filesystems in sola lettura (importantissimo dopo il sync)
Alt + Stamp + u

Riavvio il sistema:
Alt + Stamp + b

Ora divertitevi …

Nessun commento: