GNU GRUB (GNU GRand Unified Bootloader) es un gestor de arranque múltiple, desarrollado por el proyecto GNU que se usa comúnmente para iniciar uno, dos o más sistemas operativos instalados en un mismo equipo.
Se usa principalmente en sistemas operativos GNU/Linux. El sistema operativo Solaris ha usado GRUB como gestor de arranque en sistemas x86 desde la revisión 10 1/06.
(Fuente Wikipedia)
En alguna ocasión, casi siempre relacionado con instalaciones algo fuera de lo común (RAIDs, multiboot, etc) al acabar de instalar nuestro Ubuntu, reinicias la máquina y ZAS! nos sale la pantalla de grub rescue. Después de unos minutos de reflexión en el que nos preguntamos que habremos hecho mal, nos decidimos a arreglar el desaguisado. Para ello, tendremos que usar la shell de grub, buscar nuestro boot y decirle que arranque de ahí.
Las indicaciones que os haré se han de adaptar muy bien a vuestra configuración particular (numero de discos duros, particiones, etc) ya que sino no os funcionará (no estropeareis en principio nada, simplemente no funcionará).
En mi ejemplo tendré: 1 disco duro con 4 particiones: dos particiones con NTFS, en otra Linux-swap y en otra ext4.
Lo primero que haremos es inspeccionar un poco que tenemos. Eso lo haremos con el comando ls :
ls
(hd0) (hd0,msdos5) (hd0,msdos4) (hd0,msdos2) (hd0,msdos1)
Bien, ahora nuestra misión es saber en que partición está nuestro /boot . Para ello va bien entender que nos ha devuelto el comando ls. En el ejemplo, vemos que sale reflejado hd0. Bien, eso en el "mundo grub" sería equivalente a decir en lo que estamos acostumbrados (Identificación SCSI address-wise) /dev/sda. Para que nos hagamos la idea:
hd0 -> sda
hd1 -> sdb
hd2 -> sdc
Luego tenemos las particiones. Esas vienen descritas por un numero al lado de la etiqueta msdos. Pero podemos dirigirnos a ellas sin la etiqueta. (hd0,msdos4) equivaldria en Identificación SCSI address-wise a /dev/sda4
Así que si traducimos la salida del ls anterior a Identificación SCSI address-wise tendremos que :
/dev/sda
/dev/sda5
/dev/sda4
/dev/sda2
/dev/sda1
Como comenté más arriba, veo que tengo un disco y 4 particiones.
Otra tabla de equivalencias que nos puede ser útil es esta (obviar el msdos):
(hd0,msdos1) -> (hd0,1)
(hd0,msdos2) -> (hd0,2)
(hd0,msdos4) -> (hd0,4)
(hd0,msdos5) -> (hd0,4)
Ahora bien... ¿en donde tengo ext4 con mi /boot? . Hemos de buscarlo. Para ello seguiremos usando el comando ls buscando en cada particion. Al final la encontraremos:
Como vemos en la imagen, al poner ls (hd0, msdos4)/ vemos la estructura de directorias típicas de Linux. ¡Eureka! . Ahora ya nos podemos poner a reestablecer nuestro grub:
set root=(hd0,4)
set prefix=/usr/lib/grub/i386-pc/
insmod linux
linux /boot/vmlinuz-3.2.0-23-generic root=/dev/sda4
initrd /boot/initrd.img-3.2.0-23-generic
y finalmente:
boot
Si todo ha ido bien, nuestro Linux arrancará. Digamos que lo que hemos hecho hasta ahora no ha sido arreglarlo, sino lo que hemos hecho es hacer a mano la faena del grub.
Una vez arrancado nuestro Linux, deberemos ir a la linea de comandos y como root escribir:
grub-install /dev/sda
Con esto se nos reparará nuestro grub.