9.16.2010

Partedmagic en grub2 (partición /boot dedicada)

Una buena práctica de particionado cuando se tiene varias distros instaladas en nuestro equipo, es la de crear una partición /boot dedicada. Una de las mayores ventajas de esto es que el gestor de arranque (grub legacy, grub2, lilo, etc..) siempre será el mismo, así cada vez que instalamos un nuevo sistema no iremos teniendo un nuevo gestor de arranque cada vez y por ende si se daña el sistema que manejaba el gestor no tendremos que estar haciendo malabares para acceder a los otros sistemas. Lo que haremos es  crear una nueva partición /boot, instalar grub2 en dicha partición y finalmente poner una entrada en el menu del grub2 para acceder a la minidistro linux Parted Magic. Lo que nos dejaría algo como la imagen:



Para realizar dichas tareas tenemos que iniciar (casi) cualquier distro Linux en modo Livecd o desde usb, yo lo hago desde un Knoppix en mi memoria usb de 4gb. Lo importante es que no iniciemos desde el disco donde vamos a modificar las particiones y que tengamos el programa gparted, claro un editor de textos ;) y acceso de superusuario para realizar los cambios.

Una partición /boot es el lugar donde además del gestor de arranque, se encuentran las imágenes de arranque de nuestros sistemas instalados. Si estás leyendo esto desde un linux instalado (y tienes otro instalado) seguramente cada uno tiene su carpeta boot en la misma partición raíz (/) y el último que fue instalado es el que tiene el gestor de arranque activo. De la misma manera, si se instala un nuevo sistema, será ahora ese el que tenga el gestor de arranque activo. Ahora bien, ¿qué pasa si este sistema/partición se daña? No tendremos acceso al gestor y no podremos acceder a los otros sistemas; esta es una de las situaciones un poco típicas cuando se tiene varias distros instaladas y "jugamos" bastante con ellas :D

Existen algunas otras ventajas de tener una partición /boot dedicada que iré mencionando en el camino. Lo importante a tener en cuenta para nuestro /boot es saber que tamaño darle. Actualmente un kernel genérico más la imagen ramdisk (initrd) pesa alrededor de 50mb máximo. Entonces, si sólo vamos a tener una distro y no somos de actualizar el kernel muy seguido, con 200Mb tendremos más que suficiente, aún con dos o tres distros los mismos 200mb pueden alcanzar, pero con el tamaño de los discos actuales resulta prácticamente imperceptible la diferencia de 200mb a 512mb o 1g. Así que si disponemos del espacio, no seamos tacaños y hagamos un /boot grandecito de 1gb ;) Para saber cuanto ocupa el directorio /boot de nuestro sistema actual podemos ejecutar
du -h /boot
El espacio extra es requerido en esta situación ya que pondremos el Parted Magic también.

Para iniciar con el particionado, ejecutamos el programa gparted como superusuario (desde un livecd seguramente lo hace automático). No me detengo mucho en el tema del particionado ya que llevaría un post entero hacerlo. Si no conoces mucho sobre esto, te recomiendo no arriesgar y evitar la posible pérdida de toda tu información y primero leer como hacerlo bien,  un par de buenas guías son esta y esta ;) Basta con decir que lo que debemos hacer es redimensionar alguna partición (mientras más al inicio del disco mejor) para dejar un espacio libre (recomendado antes de las particiones de los sistemas) al cual daremos formato de sistema de archivos ext3 y para reconocerla facilmente le damos la etiqueta boot.

Empecemos!

Montamos la nueva partición (sda8 para el ejemplo) y la partición donde se encuentra el sistema instalado (el destino debe existir sino, lo creamos primero):
mount /dev/sda8 /mnt

mkdir /media/linux
mount /dev/sda7 /media/linux
Instalamos el grub en la nueva partición con el siguiente comando tomando en cuenta que:
- La opción --root-directory apunta al dispositivo que creamos como partición /boot (en este ejemplo es sda8).
- El dispositivo indicado al final de la orden indica el disco (no partición!) al cual vamos a escribir los datos en su MBR que generalmente es el mismo que contiene la partición antes indicada
grub-install --root-directory /dev/sda8 /dev/sda
Para evitar mucha edición del archivo de configuración, lo copiamos directamente:
cp /media/linux/boot/grub/grub.cfg /mnt/grub/
Eliminamos la carpeta grub antigua para luego mover todo el contenido del /boot anterior al nuevo; y posteriormente movemos el contenido del nuevo boot un nivel más arriba y eliminamos la carpeta ya vacia, ya explico el porqué:
rm -Rf /media/linux/boot/grub/
mv /media/linux/boot/* /mnt/boot
mv /mnt/boot/* /mnt
rm -Rf /mnt/boot
El porqué de mover el contenido de boot a la raíz de la partición en este caso montada en /mnt, es por que si no lo hacemos así, luego al indicar esta partición como punto de montaje /boot en el fstab del sistema instalado, terminamos con la ruta /boot/boot/... lo cual no nos conviene ya que puede dar conflictos al no ser una ruta por defecto.

El siguiente paso es descargar PartedMagic (link de descarga) y descomprimirlo, creamos una carpeta temporal para su extracción:
mkdir /mnt/tmpdir && cd /mnt/tmpdir

wget http://downloads.sourceforge.net/project/partedmagic/partedmagic/Parted%20Magic%205.5/pmagic-5.5.iso.zip?r=http%3A%2F%2Fpartedmagic.com%2Fdownload.html&ts=1284270707&use_mirror=ufpr

unzip pmagic-5.5.iso.zip
Movemos la carpeta pmagic a la raíz de esta partición, y eliminamos el directorio tmp:
mv pmagic .. && cd .. && rm -Rf tmpdir
Añadimos la siguiente entrada de PartedMagic en el archivo grub.cfg:
menuentry "PartedMagic" {
set root=(hd0.8)
linux /pmagic/bzImage edd=off noapic load_ramdisk=1 prompt_ramdisk=0 rw vga=791
loglevel=0 max_loop=256 keymap=es
}
Debemos acomodar donde dice (hd0.8) acorde a nuestro disco y partición, cabe anotar que ahora en grub2 la numeración de la partición es la misma de la que nos señala /dev, es decir, si nuestro boot fue creado con el dispositivo sda8 entonces la entrada del grub2 será (hd0.8), también se puede acomodar la opción vga=791 por una más acorde a nuestro monitor, en este link hay la lista de modos. Una vez listo todo guardamos los cambios y salimos del archivo.

Nos queda añadir el punto de montaje de nuestra partición boot en el fstab, para esto ejecutamos el siguiente comando para averiguar el UUID de la partición que creamos anteriormente (sda8) y que montamos en /mnt:
blkid
Anotamos el UUID correspondiente, abrimos el archivo fstab:
vi /media/linux/etc/fstab
y añadimos la siguiente línea, ajustando los datos en negrilla para que correspondan a nuestro equipo:
UUID=80974697-0d16-46df-955a-e6076b34236c /boot           ext2    defaults        0       2
Sino por alguna razón no queremos usar los ID, debemos reemplazar el UUID por el dispositivo, que en el caso del ejemplo sería /dev/sda8. Guardamos los cambios y salimos del archivo.

El último paso es cambiar un par de cosas de la entrada del sistema instalado en el grub.cfg. Al estar las imágenes de inicio del sistema (initrd, vmlinuz) ahora en su partición dedicada hay que eliminar la opción que dice --fs-uuid --set UUID ya que (hasta ahora no se porqué) esto hace que de conflicto con la otra opción root=UUID= indicada más abajo :S; así que hay que verificar que el UUID donde dice root=UUID= sea el de la partición donde está el sistema y no el de la partición boot. Sino queremo susar UUID reemplazamos UUID=número por el dispositivo. Además hay que corregir la ruta de las imágenes, ya no están en /boot/ sino que deben apuntar directo a la raíz (de la partición) Por lo que les quedaría algo así:
menuentry "Squeeze Linux 2.6.32-5-686" --class debian --class gnu-linux --class gnu --class os {
    insmod ext2
    set root='(hd0,8)'
    search --no-floppy
    echo    Loading Linux 2.6.32-5-686 ...
    linux    /vmlinuz-2.6.32-5-686 root=UUID=ed70b614-ecdb-41a9-bd9c-a53b6a7e6daf ro quiet
    echo    Loading initial ramdisk ...
    initrd    /initrd.img-2.6.32-5-686
}
Y eso sería todo! Reiniciamos y debemos ver la entrada de nuestro sistema y la de PartedMagic. Nuestro sistema debe iniciar como si nada, aparentemente sin ningún cambio, pero ahora disfruta de su /boot dedicado ;) y si iniciamos el PartedMagic tendremos un sistema de rescate bastante útil y muy funcional.

Sino por alguna razón se encuentran con un grub en modo rescate o cualquier situación que evite que los sistemas no inicien. Pueden leer este post para saber como iniciar un kernel directamente desde la línea de comandos del grub.

Espero que les haya servido y comenten como les fue!