Cuándo se cuelga el ordenador intentamos matar procesos, cerrar la sesión, aporrear el teclado y soltar diversos improperios (en especial cuándo perdemos trabajo que no habíamos guardado). Una vez nos calmamos y vemos que no estabilizamos el sistema recurrimos a reiniciar el equipo.

A continuación varias formas de reiniciar el equipo y terminar con la agonía del pobre sistema colgado.

Reiniciar con el comando reboot

En caso de que el tty responda y después de haber probado todo lo que se nos ha pasado por la cabeza si finalmente decidimos reiniciar, lo más lógico, teniendo en cuenta que no esta totalmente colgado el sistema sería hacerlo con el comando shutdown o reboot.

Con reboot:

[root@equipo ~]# reboot

Con shutdown:

[root@equipo ~]# shutdown -r now

Reiniciar con la combinación de teclas REISUB

En ocasiones el sistema esta tan colgado que no podemos ni acceder a una tty. En ese caso lo mejor es intentar reiniciar con las Maic SysRq Keys. Antes de hablar de la tan conocida combinación de teclas voy a explicar que son las Magic SysRq Keys.

Las Magic SysRq Keys

Las Magic SysRq Keys son combinaciones de teclas que permiten ejecutar código de bajo nivel independientemente del estado del sistema. El uso habitual de estas teclas es intentar recuperar el sistema en caso de que se cuelgue o reiniciar el equipo sin corromper el sistema de archivos.

En linux, el kernel tiene que estar compilado con la opción para usar las Magic SysRq Keys. Si el kernel no se compiló con esa opción lo que voy a explicar a continuación no funcionará y primero tendrás que compilar el kernel con dicha opción. Por lo general las distribuciones más comunes tienen el kernel con esta opción habilitada.

Además de tener un kernel compilado para soportar las Magic Sysrq Keys (Sysrq a partir de ahora) también tenemos que habilitarlas. Para saber si lo tenemos o no habilitado miramos el fichero '/proc/sys/kernel/sysrq'.

[root@equipo ~]# cat /proc/sys/kernel/sysrq
0

En el caso anterior vemos que el archivo contiene un 0, eso significa que no están habilitadas las teclas SysRq. Para habilitarlas cambiamos el 0 por un 1 con un editor como nano o vi o usamos el comando echo guardando la salida del comando en el archivo.

[root@equipo ~]# echo 1 > /proc/sys/kernel/sysrq
[root@equipo ~]# cat /proc/sys/kernel/sysrq
1

Ahora ya tenemos habilitadas las teclas SysRq, pero esta nueva configuración sólo es válida hasta que el ordenador se apague, en el momento que apaguemos o reiniciemos el ordenador habremos perdido la configuración y quedará como la teníamos al principio.

Si queremos que el uso de las SysRq estén habilitadas por defecto debemos editar el archivo '/etc/sysctl.conf' y buscar la linea que pone 'kernel.sysrq = 0' y cambiarla por 'kernel.sysrq = 1'. Es posible que la linea no exista, en ese caso la agregamos.

[root@equipo ~]# cat /etc/sysctl.conf |grep sysrq
[root@equipo ~]# echo "kernel.sysrq = 1" >> /etc/sysctl.conf
[root@equipo ~]# cat /etc/sysctl.conf |grep sysrq
kernel.sysrq = 1

En el ejemplo primero comprueba si existe la linea usando cat y una tubería a grep. Como no devuelve nada la linea no existe y la añadimos al final del archivo con echo. Por último comprueba que la linea ya existe.

Usando las Magic SysRq Keys: REISUB

Ahora que ya sabemos configurar el sistema para utilizar estas teclas vamos a utilizarlas para reiniciar el ordenador.

Para usar las SysRq mantenemos pulsadas las teclas Alt + SysRq (Imprimir pantalla / Pet Sis) y mientras tecleamos REISUB. Según vamos pulsando las teclas ésto es lo que el sistema va haciendo:

R -> Cambiamos el teclado de modo RAW a modo XLATE (para entornos gráficos, devuelve el control)
E -> Manda la señal SIGTERM a todos los procesos.
I -> Manda la señal SIGKILL a todos los procesos.
S -> Vacía los buffers de todos los sistemas de ficheros montados
U -> Desmonta todos los sistemas de ficheros
B -> Reinicia el equipo

Si en vez de reiniciar queremos apagar teclearemos RISUO.

Como las teclas Alt y SysRq están un poco lejos unas de otras yo utilizo el meñique de la mano izquierda para pulsar la tecla Alt y el anular de la mano derecha para SysRq. De esta forma puedo acceder a prácticamente todas las letras del teclado con la mano izquierda.

Con esta combinación ya veis que se consigue un reinicio más o menos limpio y hay menos posibilidades de corromper el sistema de archivos, evitándonos los problemas que eso conlleva.

Magic SysRq Keys de forma remota

Las teclas SysRq también se pueden usar de forma remota pero de manera diferente. Como habréis deducido si usáramos las combinaciones de teclas en un ordenador cliente que esta conectado por ssh a un servidor pretendiendo que REISUB afecte al servidor veríamos que en cuanto pulsáramos la E se nos cerrarían todos los procesos y puede que incluso el entorno gráfico.

La manera correcta de usar las SysRq en un equipo al que estamos conectados de forma remota por ssh (por ejemplo) es enviando letras al fichero '/proc/sysrq-trigger'. Para reiniciar directamente sería:

[root@equipo ~]# echo b > /proc/sysrq-trigger

Debemos tener en cuenta que no podemos utilizar todas las letras, si mandamos una "E" por ejemplo estaríamos cerrando todos los procesos, eso incluye el servidor ssh al que estamos conectado por lo que perderíamos la conexión con el servidor entero y no lograríamos conectar de nuevo (depende también de como esté configurado el servidor).

Reiniciar con el botón del ordenador

Si después de todo lo expuesto en las diversas entradas que he ido publicando y si con la combinación de teclas REISUB no logramos reiniciar, tendremos que reiniciar con el botón de reinicio de la caja del ordenador. Ésta es la última opción que deberíamos realizar, la mayoría de las veces no es necesario llegar a este extremo (pese a que algunos usuarios es la primera y única opción que realizan).

A modo de curiosidad decir que las veces que tuve que reiniciar el ordenado a la fuerza (con le boton de reset) las luces del teclado no respondían. Yo pulsaba Bloq. Mayús. o Bloq. Num. y las luces del teclado permanecían quietas.

Unas últimas palabras para terminar

Durante estas entradas de "Linux colgado" me he centrado en el cuelgue del sistema por procesos que se quedan "pillados". Por supuesto el motivo por el cual el sistema se cuelga no es únicamente un proceso que nos consume la memoria o el tiempo de CPU, también puede ser un fallo en el hardware del equipo, un sobrecalentamiento o experimentos empíricos a base de ensayo y error con el ordenador...

En cualquier caso espero que esta información os sea útil y os evite reiniciar el ordenador en la medida de lo posible.

Enlaces:
Más información sobre las Magic SysRq Keys