14 de diciembre de 2015

Al actualizar a Debian Jessie desde Wheezy grub dañado

Al actualizar Debian a Jessie desde wheezy aparentemente todo iba normal hasta que se reinicia. El grub falló quedando la pantalla en blanco sin video y dependiendo del monitor que se conectara mandaba un error distinto: "VGA signal out of range" o "No signal supported (o algo así)".

Se arrancó con un livecd de Knoppix y se descomentó la variable GRUB_TERMINAL de "/etc/default/grub" y definiendo como valor "console" tal como lo indica la documentación oficial.       
GRUB_TERMINAL=console
Después de reiniciar seguía sin funcionar el grub pero ahora el grub mostraba un promp con el siguiente texto:
    GNU GRUB version 1.98+20100804-14

Minimal BASH like line editing is supported. For the first word, TAB
lists possible command completions. anywhere else TAB lists possible
device or file completions.

grub> _
Para lograr arrancar con Debian se ejecutó lo siguiente:
insmod normal
set prefix="(hd0,msdos7)/boot/grub"
set root=(hd0,msdos7)
linux /boot/vmlinuz-3.16.0-4-686-pae root=/dev/sda7 ro
initrd /boot/initrd.img-3.16.0-4-686-pae
boot
hd0 es el disco duro principal donde está instalado grub
msdos es el tipo de tabla de particiones
El 7 es el número de partición donde está instalado grub
sda7 es la partición raiz

Al arrancar debian se instala grub-pc:
# aptitude install grub-pc
Después de instalado grub-pc nos muestra un asistente con diversas opciones entre ellas la de instalar grub en el MBR o en la partición de linux. En este caso se instaló en el MBR del disco duro. Si se cancela el asistente y no se instala, se puede instalar ejecutando la siguiente orden:
# dpkg --configure grub-pc
O si se desea modificar el lugar donde se instaló grub se puede reconfigurar con:
# dpkg-reconfigure grub-pc
Luego se modifican algunas opciones de grub editando el archivo "/etc/default/grub":
# nano /etc/default/grub
Se modifican las siguientes lineas:
GRUB_DEFAULT=0
GRUB_TIMEOUT=false
GRUB_DEFAULT indica con que Sistema o Kernel se arrancará.
GRUB_TIMEOUT indica el tiempo que mostrará la lista de sistemas antes de arrancar con el sistema configurado por default. En este caso, se configura como "false" para que no arranque con ningún sistema y siempre tener que seleccionar uno.

Luego se ejecuta la siguiente orden para actualizar el archivo de configuración de grub "/boot/grub/grub.cfg"
# update-grub
Una vez actualizado, el archivo de configuración "/boot/grub/grub.cfg" reflejará los cambios en las siguientes variables:
set default="0"
set timeout=false

Fuente: