¿Qué es la tecla SysRQ?
En algunos teclados podemos encontrar «SysRQ» en la misma tecla que usamos para imprimir pantalla. SysRQ es una tecla mágica (se la conoce como «Magic Key» que permite llevar a cabo una serie de acciones por parte de administradores del sistema. Hoy en día, con la popularización de los entornos de escritorio, ha caído en desuso, pero hoy me ha llamado la atención que ya casi ningún teclado trae SysRQ en la tecla de Imprimir pantalla.
Activar la funcionalidad SysRQ
En una distribución actual es más que probable que la tecla SysRQ venga desactivada. Para activarla, editaremos el archivo /etc/sysctl.conf
Añadimos al final del todo esta línea
kernel.sysrq=1
A continuación podemos cargar este nuevo ajuste usando sysctl -p como root.
Si no queremos hacer el cambio permanente, podemos simplemente fijarlo temporalmente usando
sysctl -w kernel.sysrq=1
Podemos verificar el estado de las variables con sysctl -a
¿Qué se puede hacer con la tecla SysRQ?
Podemos hacer acciones bastante extremas, pero útiles en caso de desastre o problemas con un equipo. Para invocar la Magic SysRQ Key, debemos usar la combinación Alt + SysRQ + letra. La letra puede ser una de las siguientes opciones:
- b – Reiniciará el equipo de forma insegura. Sin sincronizar los buffers de disco ni desmontar las particiones que hubiese montadas. Es probable que cause pérdida o corrupción de datos.
- c – Forzará un crash en el equipo volcando a disco la memoria del sistema.
- d – Mostrará los locks del sistema (usados para control de concurrencia, por ejemplo)
- e – Envía una señal SIGTERM a todos los procesos salvo a init. Matará todos los procesos en ejecución.
- f – Invocará un OOM Kill, para resolver en algunos casos situaciones de falta de memoria en el sistema.
- g – Entrar en modo debug de consola, usando framebuffer
- h – Mostrará ayuda sobre el uso de SysRQ
- j – Fuerza una congelación de los filesystems, mediante el uso de FIFREEZE
- k – Mata todos los procesos de la consola que se esté usando, incluidos de X.
- l – Muestra un stack backtrace de todas las CPUs activas en el sistema (puede haber cpus inactivas o deshabilitadas manualmente)
- m – Muestra información de la memoria.
- n – Resetea a sus valores por defecto los valores de niceness de todos los procesos que hayan pasado a prioridad alta y real time (puede aliviar problemas de contención de recursos)
- o – Apagará completamente nuestro equipo, sin dejarlo en modo latente como haría halt.
- p – Muestra los registros y flags.
- q – Muestra todos los timers y clock sources activos.
- r – Cambia el modo de teclado de RAW a XLATE
- s – Sincronizará los buffers de disco
- t – Muestra una lista de tareas
- u – Intentará cambiar el modo de montaje de las particiones a solo lectura.
- v – Fuerza un reset de la consola framebuffer
- w – Muestra un listado de tareas bloqueadas
- Espacio – Muestra las teclas mágicas SysRQ disponibles en ese equipo
Uso práctico de SysRQ
El mejor uso que se le puede dar es guardar todos los datos a disco cuando no tenemos ya control del equipo. Esta acción puede ayudar a salvar a disco algunos datos y prevenir una recuperación posterior. Para ello se usa una regla mnemotécnica en inglés:
Reboot Even If System Utterly Broken (Reiniciar incluso si el equipo está terriblemente roto).
Esta regla nos indica que podemos ejecutar SysRQ con las letras R, E, I, S, U, B para:
- R – Recuperar el control del teclado
- E – Terminar todos los procesos, enviando una señal SIGTERM que les permita finalizar de forma pacífica
- I – Enviar una señal SIGKILL a aquellos procesos que no hayan parado con la señal SIGTERM anterior
- S – Sincronizar los buffers a disco
- U – Remontar los filesystems en modo solo lectura.
- B – Reiniciar el equipo
¿Se puede ejecutar SysRQ remotamente?
Aunque esta solución no la he probado personalmente, se puede hacer mediante el uso de un módulo para iptables. Se llama ipt_sysrq.
A pesar de que puede levantar alarmas el hecho de poder reiniciar remotamente un equipo, se puede limitar la funcionalidad de dos formas. La primra, limitando el acceso mediante iptables. No queremos aceptar paquetes de cualquier origen que puedan activar esta funcionalidad. Otro método de control es una contraseña que puede incluirse en el paquete que enviamos para ejecutar SysRQ en el equipo remoto. Tienes la documentación en el enlace de más arriba.
Otra forma que parece más actualizada es usar sysrqd, con repositorio en github. También puede ser controlado mediante contraseña y funciona respondiendo a un telnet en un puerto que nosotros configuremos.