viernes, 17 de enero de 2020

Actualizar Grub en Ubuntu

Hoy vengo a contar un problema que hemos tenido en una aula en la que los equipos tienen instalado Ubuntu 18.04.
De repente y sin venir a cuento dos equipos se han quedado colgados y al reiniciar el equipo han arrancado con una resolución muy baja, probablemente VGA (640x480). Lo cual hacía el equipo inmanejable.


Para averiguar que había pasado ejecutamos el comando dmesg, que permite ver todos los mensajes que el sistema produce en el arranque. Así pudimos comprobar que estaba arrancando una versión del kernel antigua.
Para comprobar con cual versión de kernel ha iniciado tu sistema ejecuta:
dmesg | grep vmlinuz
Nos salió la versión 5.3.0-26 , cuando la versión que tenemos es la 5.0.0-37.
Nota: Una forma mas sencilla es el comando uname -a

¿Por qué ha pasado esto?
Pues ni idea, misterios de los sistemas informáticos. No se han actualizado los equipos ni nada parecido. Seguiré observando el comportamiento de los mismos para averiguar qué ha ocurrido.


Actualización: Ya sé que ha pasado. Resulta que Ubuntu tiene las actualizaciones automáticas y eso incluye el kernel o núcleo. Es este núcleo el que revienta la configuración gráfica. También se carga el Virtualbox.

Ahora la cuestión es ¿cómo arreglarlo?

En principio vamos a arrancar el equipo con el núcleo correcto para lo cual basta con seleccionarlo en el menú de arranque. El problema es que Ubuntu lo oculta, le pone un tiempo de espera de 0 segundos y no puedes seleccionar nada.

Toca editar el archivo de configuración del gestor de arranque (Grub2) desde la terminal (pulsando Ctrl+Alt+T).
Para ello ejecutamos:
sudo nano /etc/default/grub
después editamos el archivo y modificamos esta línea, las demás las dejamos como están.
(Nota: en rojo las modificaciones)
GRUB_TIMEOUT=8 
#GRUB_TIMEOUT_STYLE=hidden
Hemos puesto 8 segundos y comentado (#) la línea que ocultaba el menú. Guardamos y salimos de nano (Ctrl+o y Ctl+x)
Ahora hay que actualizar el gestor de arranque, para ello ejecutamos:
sudo update-grub2
Y reiniciamos el equipo
Ahora al arrancar vemos un menú similar a este:

Iniciar Ubuntu 5.0.0-26
Opciones Avanzadas
Memtest
...

Si seleccionas Opciones Avanzadas verás otro sub menú con todos los kernels que tengas instalados. 
- Opciones Avanzadas
   - Ubuntu 5.0.0-26
   - Ubuntu 5.0.0-26 safe
   - Ubuntu 5.0.0-37
   - Ubuntu 5.0.0-37 safe...
Elegimos el Ubuntu 5.0.0-37 (en nuestro caso).
Y el equipo inicia normalmente, con la configuración correcta tal y como estaba antes de estropearse.

Ya estaría solucionado


Pero si lo que queremos es que arranque por defecto el kernel correcto hay que volver a configurar el gestor de arranque y elegir la opción Ubuntu 5.0.0-37 como opción por defecto.
El problema reside en como poner una opción del sub menú, para ello vemos la sintaxis del GRUB_DEFAULT
En nuestro caso tenemos este menú:

Iniciar Ubuntu 5.0.0-26
Opciones Avanzadas
   - Ubuntu 5.0.0-26
   - Ubuntu 5.0.0-26 safe
   - Ubuntu 5.0.0-37
   - Ubuntu 5.0.0-37 safe
   ...
Memtest
...
hay que elegir la opción Opciones Avanzadas (que es la opción 1, empiezan en 0) y después la opción Ubuntu 5.0.0-37 (que es la opción 2 del sub menú)
Así tendemos que poner esta línea en el archivo  /etc/default/grub :
GRUB_DEFAULT="1>2"
Todo con los comandos anteriores:
sudo nano /etc/default/grub
y
sudo update-grub2

Y ahora al reiniciar el equipo automáticamente arrancará la opción con el kernel correcto.

Si queréis poneros en contacto conmigo @mosqueteroweb