Saludos a todos los fieles seguidores del Blog SWL-X. Esta vez estaremos hablando 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 por 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 decidía 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 a nivel de software.

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

Maikel, por favor, de una buena vez, acaba de decirnos para que sirve la bendita tecla en el kernel Linux

jaja, Ok, vamos a ello

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 hardware, 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 está 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.

Resumen del significado de todos los comandos

Algunos comandos son dependientes de la arquitectura, no esperes que todos tengan un significado para ti, bueno, en general no esperes mucho de la vida :D

‘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 hardware 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.





Acerca del Autor
Maikel Llamaret HerediaMaikel Llamaret Heredia: Creador y actual Mantenedor del Proyecto SWL-X. Desarrollador y diseñador Web. Cofundador de Web & Media Integrated Solutions. Con más de 10 años de experiencia en la administración de sistemas GNU/Linux. Actualmente uno de los administradores de la Web del Grupo de Usuarios de Tecnologías Libres en Cuba.

Blog Comments powered by Disqus.

Entrada Anterior Siguiente Entrada