Saludos a todos los fieles seguidores de GUTL. Hoy quiero hablarles del corazón de nuestro sistema operativo, el kernel (bueno, si es que tú también utilizas GNU/Linux). En este artículo estaremos aprendiendo como comunicarnos con el kernel Linux desde nuestro teclado, tomando como tecla protagonista a Sysrq (aka PetSis).
Ante todo aclarar que es muy probable que este artículo sea de un nivel un poco avanzadito, así que sería bueno que los lectores tuviesen cuidado en lo que tocan mientras se guían po lo que leerán a continuación.
La tecla Petición de Sistema se encuentra en casi todos los teclados, por lo general lleva la leyenda Impr Pant o Print Screen (Imprimir Pantalla) y en algunos modelos, no en todos, tiene agregada la leyenda PetSis (Petición de sistema) o Sysrq (System request). Bueno, para que se ubiquen mejor, es la famosa tecla con las que hacemos screenshots rápidos, es decir, capturas de nuestro escritorio. Hoy veremos que esta no es la única función de dicha tecla.
Un poco de Historia
La tecla Sysrq fue introducida por IBM en sus PC/AT, en aquel entonces no existía multiprogramación, el sistema operativo no era mas que un monitor residente que iniciaba la ejecución de tareas en bloques de ejecución. Durante esa ejecución era el programa quien tenia control total del microprocesador, las interrupciones generadas eran manejadas por las subrutinas del sistema operativo pero este se limitaba a comunicar los eventos al programa en ejecución, los datos de entrada eran leídos por dicho programa directamente desde el buffer de teclado con operaciones de bajo nivel, si el programa en ejecución desidia ignorar mensajes de control enviados por el usuario (como el conocido Ctrl-C) entonces ya no había posibilidad de comunicarse con el sistema operativo.
Fue entonces cuando se decidió agregar un botón especial para lograr esa comunicación directa con el sistema operativo. El funcionamiento es relativamente simple, cuando se presiona una tecla cualquiera, el teclado genera una interrupción hardware (IRQ1), la bios lee que tecla ha sido presionada y la escribe en el buffer de teclado, sin embargo si se presiona Sysrq el comportamiento hardware es diferente, nada se escribirá en el buffer de teclado, en su lugar se generará una interrupción software. Si el sistema operativo no cuenta con una subrutina que maneje la interrupción nada pasa pero si lo ha echo es la puerta de entrada que los ingenieros de IBM necesitaban para avisar al sistema operativo que algo anda mal, combinando sysrq con alguna otra tecla era posible enviar mensajes directamente al sistema operativo. Actualmente los teclados convencionales incluyen dicha tecla pero ya no con ese fin especifico, actualmente para lograr que esa interrupción especial se genere es necesario combinar Sysrq con alguna otra tecla.
Dejando a un lado la historia, adentrémonos un poco en lo que nos interesa, la relación de esta tecla con el kernel Linux.
La Magic Sysrq Key
Esa es la clasificación que se le da a esta funcionalidad en el kernel linux. Es normal que la función Magic Sysrq se encuentre habilitada por defecto en los kernels precompilados, si no es el caso se debe habilitar CONFIG_MAGIC_SYSRQ durante la compilación.
En un kernel con soporte CONFIG_MAGIC_SYSRQ se puede deshabilitar esta caracteristica estableciendo a cero la variable del kernel sysrq, esto se puede hacer mediante el sistema de archivos virtual /proc/sys/kernel/sysrq o mediante el archivo sysctl.conf agregando la directiva kernel.sysrq = 0.
Como acceder a la Magic Sysrq
Como se mencionó anteriormente, los teclados convencionales ya no incluyen esa funcionalidad en una tecla única, la forma de acceder a la magic sysrq dependerá de la arquitectura:
En X86
Presione conjuntamente ALT-Sysrq-comando
En ciertos teclados no es posible presionar mas de una tecla a la vez, en ese caso lo que se debe hacer es: mientras se mantiene presionado ALT se presiona Sysrq y liberando Sysrq se presiona la tecla comando.
En SPARC
Presione ALT-STOP-comando
En PowerPC
Presione ALT-Print Screen-comando o ALT-F13-comando
En la mayoria de los casos no será necesario presionar ALT
Funcionalidad del Magic Sysrq
La utilización mas frecuente es para recuperarse de “Cuelgues” del sistema. Si el sistema no responde por alguna razón, ya sea fallo de harware, un bug en el kernel (oops), un kernel panic u otro motivo, y la única opción parece ser presionar el botón reset aún se puede intentar cerrar el sistema de una forma medianamente limpia utilizando la Magic Sysrq. La forma mas extendida es escribir REISUB mientras se presiona la combinación de teclas que activan Sysrq.
Los pasos son:
Pasar el teclado de modo RAW a modo XLATE (R)
Esto es necesario cuando se esta corriendo alguna aplicación que se “apropia” del teclado, como es un servidor X o aplicaciones svgalib que acceden a bajo nivel al buffer del teclado. Puede que no obtenga una respuesta inmediata y deba presionar repetidamente R.
Terminar todos los procesos (E)
Envia SIGTERM a todos los procesos exepto a INIT
Matar todos los procesos (I)
Envia SIGKILL a todos los procesos exepto a INIT
En esta instancia el sistema es aún recuperable. Si en lugar de presionar ‘I’ se presiona ‘L’ se envia SIGKILL a todos los procesos incluyendo a INIT, solo task 0 queda en la cola de procesos y el kernel no es capaz de crear nuevos procesos por si mismo. El sistema es inoperativo.
Sincronizar los discos (S)
Escribir en disco todos los datos que pudieran permanecer en los buffers para evitar corrupción y/o perdida de datos. No es inmediato, se habrá completado cuando se muestre un OK y done en pantalla.
Desmontar los sistemas de archivos (U)
Desmonta todos los sistemas de archivos y los vuelve a montar como solo lectura. No es inmediato, se habrá completado cuando se muestre un OK y done en pantalla.
Reiniciar el sistema (B)
Reinicio inmediato del sistema, en esta instancia se puede querer apagar el sistema en lugar de reiniciarlo (presionando O) Esto provoca el corte inmediato el suministro eléctrico a los discos sin asegurar que los cabezales estén en zona de reposo por lo que no es aconsejable hacer esto solo porque si.
Significado de todos los comandos
Algunos comandos son dependientes de la arquitectura, no espere que todos tengan un significado para usted.
‘b’ – Reiniciará inmediatamente el sistema sin sincronizar ni desmontar los discos.
‘c’ – Reinicio mediante kexec, conocido como reinicio rápido, no se hace la llamada al boot loader sino que se vuelve a cargar el kernel.
‘d’ – Muestra los bloqueos por pantalla.
‘e’ – Manda un SIGTERM a todos los procesos, excepto para init.
‘f’ – Fuerza una llamada oom_killer, esto hace que se mate al proceso que la funcion badness considere menos importante con el fin de liberar memoria.
‘h’ – Muesta una ayuda en pantalla.
‘i’ – Manda un SIGKILL a todos los procesos, excepto para init.
‘k’ – Mata todos los programas en la consola virtual actual, útil para limpiar la tty donde corre un servidor x o para acceder de modo seguro si se cree que puede haber algun key logger esperando para copiar nuestro password.
‘l’ – Manda un SIGKILL a todos los procesos, INCLUYENDO init.
‘m’ – Volcará la información actual de la memoria a su consola.
‘o’ – Apagará el sistema (si el harware lo soporta) sin sincronizar ni desmontar los discos
‘p’ – Volcará los registros y banderas actuales a su consola.
‘q’ – Muestra todos los temporizadores en pantalla.
‘r’ – Cambia el teclado del modo raw al modo XLATE.
‘s’ – Intentará sincronizar todos los sistemas de ficheros montados.
‘t’ – Volcará una lista de las tareas en ejecución y su información a su consola.
‘u’ – Intentará montar de nuevo todos los sistemas de archivos montados como solo lectura.
‘w’ – Muestra todas las tareas en estado bloqueado.
’0′-’9′ – Establece el nivel de información en consola, controlando los mensajes del núcleo que se mandarán a la consola, es equivalente a modificar klogd. (’0′, por ejemplo haría que sólo los mensajes de emergencia salieran en su consola.)
¿Funciona siempre Sysrq?
Serán muy raros los casos en que sysrq no responda y generalmente será debido a fallos de hardware, estos pueden ser:
Fallo grave de disco: Si la memoria swap se encuentra en un disco que ha fallado por razones serias, sea falla eléctrica en el dispositivo o daño de la superficie magnética el sistema puede experimentar un cuelgue que no sea recuperable.
Fallo de un banco de memoria: si se trata de fallos menores y en áreas de memoria no criticas (direcciones altas) Sysrq funcionará de todos modos pero si se trata de fallos graves o en áreas de memoria que comprometen al sistema operativo Sysrq puede no funcionar. En cualquier caso el banco de memoria es inutilizable y debe ser descartado.
Kernel panic u oops: Sysrq funcionara en estas situaciones la mayoría de las veces pero no puede garantizar que siempre lo haga.
Otros fallos graves de hardware: fallos de chips integrados, tarjetas PCI, controladoras IDE. Es muy común experimentar bloqueos debido a la falla de elementos electrónicos como capacitores o reguladores de tensión provocados fundamentalmente por un mal mantenimiento del equipo o por exposición a temperaturas extremas.
Fuente: