martes, 5 de febrero de 2013

A vueltas con el Grub

Ya dije en alguna ocasión que cuando no puedes entrar a tu sistema Linux (por ejemplo, cuando has reinstalado un Windows y su MBR ha 'machacado' tu grub, donde podías elegir el arranque dual), lo mejor era poder entrar en tu Linux y reinstalar el grub. Hablaba de ello particularmente aquí
Y para eso la forma más sencilla (al menos, para mi) era arrancar el ordenador con un CD de inicio del Supergrub2 (no confundir con el 'Supergrub', a secas, que solo vale para el 'grub1', o grub legacy) y, desde ahí, arrancar mi distro (recuerda: con 'detect any OS...') y hacer el clásico
sudo update-grub

que te dice los sistemas operativos que ha reconocido en tu disco. Y, a continuación...
sudo grub-install /dev/sda
(o viceversa, y entendiendo, claro está, que /dev/sda es como tu Debian reconoce a tu disco duro)


El problema es que nunca habia conseguido meter el Supergrub2 en un pendrive y que funcionase, para poder arrancar con él mi distro... así que siempre tenía un CD del Supergrub2 en mi maletín.
Pero ayer reinstalé un windows en un mini-portatil de esos de 10,5” (un Asus Eee PC1000)... que no tiene lector de Cds. Y antes de ponerme a pedir prestada una lectora externa, me puse a investigar... y encontré dos soluciones. 

La primera es...
Hacer que el Supergrub2 pudiese funcionar desde un pendrive. 
Ya había probado con UnetBootin, y con MultiSystem, sin éxito. Hasta que se me ocurrió usar, por consola, el comando dd if=... of=...
Así que me bajé la ISO del Supergrub2 (por ejemplo de aquí Por cierto que son muy pocas megas y siempre pensé que era un dolor gastar un CD en esto) y como tenía tirado en el fondo de un cajón un viejo pendrive (¡de los primeros, de 40 megas de capacidad, por supuesto USB 1.0...!) me dije: justo lo que necesito, a ver si lo consigo...
Y me puse a ello, con 
dd if=super_grub2_disk_hybrid_2.00s1-beta1.iso of=/dev/sdb bs=1M
y perfecto, me funciona muy bien en mi Debian y, arrancado Debian, ya podía reinstalar el GRUB como lo que indicaba al principio.
(Pero debo decir que en un Manjaro (una distro derivada de ArchLinux, que estoy probando) no funcionó bien. Yo lo achaco a que tiene el kernel 3.7... o a que todavía está en desarrollo. Habrá que estar al tanto).
Así que, como no resolvía del todo mi caso, en mi mini-portátil Asus Eee PC1000, apliqué otra via: la de...

Reinstalar Grub2 a partir de un LiveCD
Es, también (relativamente) sencilla: vale el LiveCD de cualquier distro, siempre que use Grub2. Como el LiveCD de Debian se ofrece en distinta ISO que el 'oficial' (es el proyecto 'Debian hybrid'), puedes usar uno de (por ejemplo) Ubuntu, que tiene el Grub2 desde la versión 9.10 o superior
Lo primero que debemos hacer es arrancar el live-cd y, si no sabemos en qué partición está el root (/) del Linux que tenemos instalado, abrimos una terminal con sudo fdisk -l y la identificamos. Será del tipo /dev/sdXY, por ejemplo /dev/sda3)
  • Primero montamos, en la carpeta /mnt, la partición ('/dev/sdXY') donde tenemos instalada nuestra distro (otros crean antes una subcarpeta /mnt/distro, para meterla ahí, pero no es necesario), con 
        sudo mount /dev/sdXY /mnt
  • Luego montamos el resto de los dispositivos: 
        sudo mount --bind /dev /mnt/dev
  • Ahora ejecutamos el comando "chroot" para acceder como root al sistema de archivos de nuestra distro. 
        sudo chroot /mnt
  • Y por último, ya desde el prompt de root (#) cargamos GRUB en el MBR con este comando:  
        grub-install /dev/sda                                                                            
         (entendiendo que /dev/sda es el disco duro principal. Si no, el /dev/sdX que sea)
  • Reiniciamos y, en principio, nos volverá a aparecer el grub, donde podremos elegir con qué sistema arrancar.
Y un comentario final. Si eres de los que les gusta tener "/boot" en una partición independiente de la root (/), tras montar el sistema de archivos en /mnt, debes montar también la partición boot con 
sudo mount /dev/sdXY /mnt/boot
(donde /dev/sdXY es la partición donde se encuentra el directorio "boot" )
Claro que si eres de los que les gusta tener estas particiones separadas... posiblemente sepas mucho de Linux y no necesites estos consejos para nada...

NOTA: tres años más tarde publiqué esta otra entrada, donde parece todo más sencillo. Pero, como digo, este es un método que nunca he probado, siempre uso el SuperGrub2

1 comentario: