Publi

REISUB, ¿qué es? ¿para qué sirve? ¿cómo hacerlo de forma remota o en script? y más llamadas a Alt+Sysrq

yJl7OB3sSpOdEIpHhZhd_DSC_1929_1_rEn muchos sitios, podemos ver esta palabra clave, para muchos RESUIB para otros RESIUB y normalmente REISUB. Y sirve para reiniciar el sistema Linux de forma segura después de que el sistema se congele; de la siguiente forma: Alt+Imprimir Pantalla + R,E,I,S,U,B (no hace falta soltar las teclas Alt + Imprimir pantalla). La tecla Imprimir pantalla podemos encontrarla como SysReq (System Request) o PetSis (Petición al sistema). Cada letra representa una acción del kernel:

  • R (Devuelve el control al teclado unRaw)
  • E (Termina todos los procesos tErm)
  • I (Mata los procesos que queden vivos full kIll)
  • S (Sincroniza los discos Sync)
  • U (Monta todos los sistemas de archivos como sólo lectura Umount)
  • B (Reinicia el ordenador Boot)

Es muy recomendable dejar un poco de tiempo entre pulsación y pulsación, uno o dos segundos, ya que cada acción no es inmediata, puede que haya muchos procesos, muchos dispositivos, que haya información que volcar en ellos, etc; y todo no sea inmediato. Sobre todo, es muy importante el sincronizado de discos y montarlos como sólo lectura.

Aunque en realidad todo es importante, por ejemplo E, para terminar los procesos, si estamos corriendo algún proceso importante cuyo estado deba ser salvado (muchos programas salvan su estado al cerrarse), debemos terminarlo correctamente (el sistema puede estar aparentemente colgado, pero algunos procesos a nivel interno pueden seguir funcionando), luego, con I, por ejemplo, queremos evitar que haya procesos que quieran modificar archivos, o incluso procesos que quieran impedir que aparquemos los discos; S para volcar a disco toda la información que no haya sido guardada todavía y esté en buffers de datos repartidos por el sistema; U, para que nadie pueda escribir en el disco, así evitamos incoherencias en disco de última hora antes de reiniciar el sistema.

Parece algo difícil de recordar en un momento de desesperación cuando todo falla, ¿no? Para los que hablan inglés, hay dos reglas nemotécnicas:

  • BUSIER (más ocupado), al revés. Aunque a lo mejor se nos traba alguna letra.
  • Raising Elephants Is So Utterly Boring (Criar elefantes es taaaaaan aburrido (no he encontrado otra forma de traducir el “utterly” que suene bien en español).
  • Reboot Even If System Utterly Broken (Reiniciar incluso si el sistema está completamente roto)

Pero si queremos en español, algunos prefieren decir REInicia SUBnormal; con ese afán que tenemos todos de meternos con los demás.

Pero, tenemos muchas más opciones, si queremos podemos ir a un terminal de texto (Por ejemplo Control+Alt+[F1..F8] en la mayoría de distribuciones, podemos controlar cuántas terminales se pueden abrir, pero eso es otro tema, la interfaz gráfica suele estar en la 7, 8 u 11, aunque puedes tenerla en otro lado). En esa terminal pulsas Alt+Imprimir pantalla+H (más abajo lo hacemos con comandos) y encontrarás una ayuda con las acciones que puedes realizar. Ten cuidado, suelen ser opciones de depuración o de emergencia, así que, tú mism@.

Bien, si tenemos acceso físico al ordenador, no hay problema, pero y si estamos enchufados en otra máquina ? Todo está en el fichero especial /proc/sysrq-trigger.

¡¡ REISUB no funciona !!

Puede que no funcione… que haya pasado algo mucho más grave, por ejemplo un fallo de hardware (a mi me pasó con una CPU que sufrió un calentón, o incluso polvo en las conexiones de la RAM), puede que pase algo tan sumamente grave que el sistema no pueda hacer nada y directamente se cuelgue. Aunque los linuxeros siempre decimos que Linux no se cuelga, a veces lo hace, como toda creación humana.

También ha podido suceder un kernel panic, algo así como una pantalla azul de Windows, y puede suceder cuando hay un fallo de hardware (y el sistema ha podido reaccionar), un fallo del kernel (que, aunque mucha gente se toma en serio que no falle, en ocasiones, falla; o puede que haya fallado un módulo, y cualquiera puede hacer un módulo, un driver…), alguna aplicación con privilegios ha tocado donde no debía, en fin, en general son problemas irreparables que impiden que el ordenador siga su curso y tenemos que reiniciar. En ocasiones nos mostrarán en pantalla o en algún log un volcado de memoria o algún mensaje que ayude a un desarrollador o al usuario a saber qué ha pasado. Generalmente el código que gestiona estas pantallas, termina con un bucle infinito y puede que con algún led parpadeando.

Podemos pulsar Alt+Imprimir pantalla+c … ¡ no lo hagas ! ¡ no lo hagas ! porque fuerzas un crash, vamos fuerzas que el sistema se cuelgue. Y, ¿para qué queremos hacer esto? Por ejemplo cuando hayamos metido la pata hasta el más lejano confín y vaya a borrarse todo el disco (si usas un portátil y lo desenchufas, no conseguirás nada, tirarás de batería, y si pulsas el botón de apagado tendrás que hacerlo durante 4segundos, y puede que ese tiempo sea mortal).

También puede ser que el proceso init (el padre de todos los procesos), haya tenido un fallo grave (seguramente ha sido cosa del programador) y el kernel se ha cargado el proceso. De todas formas, esto no he tenido el honor de probarlo nunca.

Obteniendo información de los procesos

Enviando a /proc/sysrq-trigger (como root) la letra correspondiente a la acción del kernel vale. Empezaremos pidiendo ayuda:

root $ echo “h” > /proc/sysrq-trigger

root $ dmesg | tail

…. # Nos dirá muchas cosas, sólo nos interesa la última línea
SysRq : HELP : loglevel0-8 reBoot tErm Full kIll saK showMem Nice powerOff showPc show-all-timers(Q) unRaw Sync showTasks Unmount shoW-blocked-tasks

Vemos cómo el kernel a través de dmesg se comunicará con nosotros. Cada letra mayúscula nos indicará una acción diferente, empezaremos obteniendo información sobre la memoria:

root $ echo “m” > /proc/sysrq-trigger

root $ dmesg | tail -n 35

O información sobre tareas bloqueadas:

root $ echo “w” > /proc/sysrq-trigger

root $ dmesg

Más acciones

Incluso podemos lanzar el OOM killer con la siguiente línea:

root $ echo “f” > /proc/sysrq-trigger

Terminar todos los procesos (igual que comentábamos arriba del todo):

root $ echo “e” > /proc/sysrq-trigger

Cambia el nivel de información de dmesg (del 0 al 8):

root $ echo 5 > /proc/sysrq-trigger

Para enviar un REISUB es algo más elaborado:

root $ nohup bash -c “for key in r e i s u b; do echo \$key > /proc/sysrq-trigger; sleep 4; done”

Aunque tendremos que asegurarnos de que las tareas estén muertas, ya que, nuestra conexión ssh, o nuestro terminal, o incluso bash, se mueren al mandar un E o un I al kernel (dando igual el nohup). Por otra parte, la R la podemos quitar, ya que vale para devolver el control al teclado, y estamos desde un equipo remoto.

Seguridad

Pero tanto por nosotros mismos (debemos de protegernos de meter la pata), como los posibles usuarios del ordenador, tal vez no nos interese que puedan pulsar en teclado alguna combinación de teclas que comprometa al kernel. Para ello, tenemos  /proc/sys/kernel/sysrq o directamente el comando sysctl del cual modificamos la propiedad kernel.sysrq; lo haremos de la siguiente manera:

root $ sysctl kernel.sysrq=0 # Para desactivar Alt+SysRq

root $ sysctl kernel.sysrq=1 # Para activarlo

Se pueden activar algunos comandos sólo, dependiendo del número que se indique. Si el número que ponemos aquí es mayor que uno, consideraremos que el valor es una máscara de bits que activa o desactiva determinadas acciones. Y si sumamos los números que vamos obteniendo, generaremos un valor que contendrá todas las acciones que hemos sumado:

  • 2 – Controlar el nivel de información en pantalla de estas cosas
  • 4 – Control del teclado
  • 8 – Depuración y volcados de memoria
  • 16 – Sincronización de discos
  • 32 – Montaje de discos como sólo lectura
  • 64 – Finalización de procesos: terminar, matar, OOM Kill
  • 128 – Reiniciar o apagar
  • 256 – Priorización de tareas

Actualización 23/11/2012 : Error tipográfico
Actualización 30/01/2016 : He completado un poco el post en general.
Actualización 03/02/2016 : ¡Foto! Buscando fotos de gente ocupada, por lo de BUSIER…

Foto principal: Ana Dzubinska

También podría interesarte...

There are 5 comments left Ir a comentario

  1. Pingback: Bitacoras.com /

  2. Pingback: BlogESfera.com /

  3. Jonathan Sand. /
    Usando Google Chrome Google Chrome 32.0.1700.72 en Windows Windows NT

    Excelente no conocida este truco

    1. Gaspar Fernández / Post Author
      Usando Mozilla Firefox Mozilla Firefox 50.0 en Ubuntu Linux Ubuntu Linux

      ¡ Gracias ! Cuidado, en muchas distribuciones viene desactivado, por eso de que cualquiera con acceso físico al ordenador podría reiniciarlo…

  4. JVare /
    Usando Mozilla Firefox Mozilla Firefox 50.0 en Ubuntu Linux Ubuntu Linux

    En alguna ocasión me ha sucedido. El problema es recordarlo en el momento que se necesita.
    Lo que si he utilizado varias veces es lo de abrir un terminal con Ctr alt F1, porque el modo gráfico se ha quedado completamente congelado, y de esa forma poder reiniciar ordenadamente.

Leave a Reply