Apartamento En Familia

Apartamento En Familia
Apartamento de playa para vacaciones. http://www.apartamentoenfamilia.es. Número registro HUTT-005768

miércoles, 12 de marzo de 2014

Arreglando el arranque mediante grub rescue



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.

That u don't know what you've got 'til it's gone