De repente un servidor se apaga, se enciende la alarma en Nagios, nos preocupamos y al poco rato los mensajes de monit y por Skype una explicación: He visto que teníamos una versión comprometida de OpenSSL para el heartbleed, he actualizado y reiniciado; ¿y por qué has reiniciado?
Puede sonar a tópico pero la mayoría de veces que veo a un administrador de sistemas reiniciando un servidor, estos suelen ser usuarios de escritorio de Windows. Es normal. El sistema operativo Windows desde sus primeras versiones como sistema operativo (NT y 95) obligaba a que después de cada instalación que agregase alguna DLL (archivos de librería) o cambio de configuración en el sistema, pidiese reiniciar.
El usuario de Windows se acostumbró a que cada actualización (incluso en los sistemas que vinieron después como XP, Vista, 7 y 8) requería de un reinicio. ¿Por qué reiniciamos?
¿Por qué se reinicia?
En los sistemas Windows antiguos el reinicio era necesario porque el sistema de administración de memoria y el núcleo del sistema operativo no podía gestionar cambios a nivel de programas residentes. Por fragmentación o simplemente por no dar esa posibilidad, al final se nos obligaba a reiniciar el sistema para el cambio.
La gran revolución en sistemas de micro-núcleo (microkernel o microcore) es que el sistema cuenta con módulos que puede cargar y descargar de la memoria. Puede enlazar funcionalidades del núcleo con estos módulos y desenlazarlas. Una actualización solo requeriría reiniciar si se modificase el núcleo central.
En los sistemas más modernos Windows ya es micro-núcleo al igual que MacOS y BSD. Linux sin embargo es un núcleo monolítico modular. Linux permite las mismas acciones que los micro-núcleos pero sin ser micro-núcleo. Entonces, ¿necesitaríamos reiniciar?
¿Por qué reiniciamos?
La última vez que usé Ubuntu me quedé de piedra al ver que tras una actualización en la que no se incluía ninguna modificación en el paquete del kernel (su núcleo) se pedía reiniciar. ¿Por qué? Simplemente por facilidad. Es decir, si cambian muchas cosas en el sistema, en lugar de ir reiniciando parte por parte, un reinicio completo es mucho más limpio y el sistema se asegura de que todo funciona tal y como debe pero, ¿se necesita? obviamente no.
MacOS por ejemplo nos solicita actualizar de vez en cuando y algunas veces indica que se requiere un reinicio, pero no siempre. Algunas veces el hecho de actualizar la interfaz gráfica (el servidor X) muchos sistemas prefieren reiniciar. En Linux bastaría con reiniciar este servidor y nada más.
En un ambiente de informática de consumo es normal que el sistema se reinicie, porque para el fabricante es más fácil diseñar los cambios a realizar pensando en un reincio completo que en la restauración de cada elemento por separado.
En servidores, ¿reiniciamos?
En un servidor GNU/Linux, por ejemplo, no se requeriría reincio a menos que se actualizase el kernel. Esto es porque no hay elementos que dependan de otros. Es más, en el caso de ejemplo de la actualización de la librería de OpenSSL, esta librería se usa a nivel de aplicación. Servidores como Apache y NGinx la emplean así que sería tan fácil como actualizar esa librería, el servidor web y reiniciar el servidor web. Nada más. Esto no tiene que afectar a otros sistemas en ejecución dentro del mismo servidor que no estén afectados por la actualización.
Entonces, ¿reiniciamos o no?
Reinciar es una herramienta muy típica en informática para cuando algo no funciona. Es el último recurso para mucha gente de intentar volver a un estado inicial y libre de degradación o fallos extraños. Pero no siempre funciona. Antes de reiniciar:
- comprueba qué es lo que no funciona, lo que se debe actualizar o los cambios que se han realizado,
- entiende qué sucede, por qué necesitas reiniciar, qué solventarás exactamente y
- reinicia si y solo si comprendes y entiendes que es necesario.
¿Necesitas reiniciar?