Toma de contacto con GRUB

Guillem Cantallops Ramis

Nota: este artículo fué publicado en el número 34 (septiembre de 2001) de la revista Mundo Linux, una publicación de Revistas Profesionales S.L.



Vamos a ver una ínfima parte de la funcionalidad de GRUB, "the Grand Unified Bootloader", o lo que es lo mismo, un LILO de ciencia ficción...




Introducción

Durante muchos años hemos utilizado LILO para arrancar nuestro sistema operativo favorito. El LILO es pequeño, simple, y funciona. Pero no es perfecto. El GRUB es más grande, más complejo, y nos da una flexibilidad hasta ahora desconocida a la hora de arrancar nuestro sistema. En realidad GRUB es como un pequeño sistema operativo independiente diseñado específicamente para arrancar otros sistemas. Espero que después de leer este artículo mucha gente se decida a dar el paso, a abandonar el viejo y querido LILO para pasar a algo mucho más potente y avanzado.


Novedades

Aprecio el LILO en lo que vale y después de tantos años le he tomado cariño así que no voy a revisar todas sus limitaciones (todos las conocemos porque las hemos sufrido). En lugar de eso, intentaré centrarme en mostrar algunas ventajas importantes del GRUB para que cada uno saque sus propias conclusiones.

¿Qué? ¿Os gusta? Pues leer lo que puede hacer GRUB no es nada comparado con la experiencia de usarlo realmente, así que manos a la obra ;-)


Funcionamiento interno

Como podéis imaginaros, no hay forma de meter el código para hacer todas esas cosas en un sector de 512 bytes... así que el GRUB se carga en sucesivas "etapas" (stages).

Puede parecer que GRUB es muy grande comparado con LILO (y efectivamente lo es), pero también hay que decir que GRUB hace muchas más cosas de las que voy a contar yo aquí, algunas realmente impresionantes: permite tener varias versiones de Windows repartidas por la máquina en varios discos (no necesariamente el primero) gracias a la reordenación de unidades y la ocultación de particiones, permite montar sistemas sin disco que arranquen desde la red usando BOOTP o DHCP, etc.


Obtención e instalación

Diría que obtener GRUB es tan fácil como hacer 'apt-get install grub', pero como no todo el mundo usa Debian GNU/Linux en general recomendaré que cada cual se busque un paquete adecuado para su distribución. Seguro que en rpmfind.net están los RPMs actualizados, etc.

También podéis ir directamente a http://www.gnu.org/software/grub/ y ver qué mirror os va mejor para bajaros GRUB. El servidor FTP "principal" para hacer eso está en ftp://alpha.gnu.org/gnu/grub/, y tiene disponibles los últimos fuentes en forma de paquete .tgz, así como los binarios en forma de imagen de disquete arrancable.

El código fuente en forma de paquete .tgz está listo para el típico './configure; make; make install'. La imagen de disquete arrancable resulta muy útil, simple, y recomendable para las primeras pruebas puesto que no requiere instalar nada en el disco duro y permite comprobar la enorme potencia de GRUB sin riesgo alguno.

Una vez tengais GRUB en vuestro sistema, podéis dejarlo ahí como decoración, podéis instalarlo en un disquete para experimentar, o podéis instalarlo en el disco duro para usarlo como bootloader (que es lo ideal).


Nomenclatura

Antes de empezar a jugar con GRUB conviene entender los criterios que sigue para nombrar los discos y las particiones.

GRUB intenta ser muy neutral en este aspecto, así que no usa la nomenclatura de Linux, ni la de FreeBSD, ni la de ningún otro sistema que yo conozca. Por suerte la nomenclatura es muy simple: la primera unidad de disquete se llama (fd0), la primera unidad de disco duro se llama (hd0), la primera partición primária del primer disco duro se llama (hd0,0) y así sucesivamente. Es decir, todo se numera con enteros, empezando por el cero.

Esto se hace independientemente del tipo de discos, de manera que se numeran siempre correlativamente todas las unidades del sistema tanto si son IDE como si son SCSI. Esto no es un problema entre otras cosas porque el shell de GRUB nos mostrará todos los discos y particiones disponibles si pulsamos la tecla TAB en caso de duda, y nos dará información suficiente para identificarlos.

Si queremos referirnos a un fichero concreto dentro de una partición concreta, podemos hacerlo. Por ejemplo, supongamos que queremos referirnos al fichero /boot/vmlinuz que se encuentra en la primera partición extendida del primer disco. Simplemente, especificamos (hd0,4)/boot/vmlinuz.


Primeros pasos

Para probar GRUB lo mejor es empezar con un disquete, así que nos bajaremos la última versión disponible de algún mirror de software GNU, en forma de imagen de floppy. El fichero que nos interesa es el que tiene la extensión .ext2fs, algo así como grub-0.90-i386-pc.ext2fs (la última versión disponible en el momento de escribir estas lineas).

Una vez obtenida esta imagen, la grabaremos en un disco (previamente formateado y sin datos importantes) con el comando 'dd if=grub-0.90-i386-pc.ext2fs of=/dev/fd0' (o con una herramienta como rawrite si -tristemente- lo hacemos desde Windows). Dependiendo de la distribución, los usuarios podrán ejecutar este comando libremente, o bien deberán pertenecer a algún grupo con privilegios especiales para acceder a las unidades de disquete (grupo floppy, o similar). El usuario root normalmente podrá hacerlo sin problemas.

Si tenemos correctamente configurada la BIOS para que arranque en primer lugar desde la disquetera (normalmente A:) podemos dejar el disco ahí después de grabarlo, y reiniciar (con 'reboot', 'shutdown -r now', o pulsando Alt+Ctrl+Supr).

Si todo va bien, veremos como se cargan sucesivamente las distintas etapas de GRUB y llegaremos al menú de ejemplo que han preparado para nosotros los desarrolladores de GRUB. Probablemente ninguna de las opciones de ejemplo resultará útil en nuestro sistema, pero más adelante pueden servir como guia a la hora de crear nuestra propia configuración.

De momento nos interesa jugar con la linea de comandos, ya que las distintas opciones del menú no son más que agrupaciones de esos comandos (una especie de "macros") y conviene familiarizarse con ellos. Para pasar al modo comandos desde el menú semigráfico de GRUB seguiremos las instrucciones en pantalla y por tanto pulsaremos 'c'. Para trabajar con un ejemplo concreto, usaremos el sistema descrito en el recuadro.


El sistema de ejemplo tiene un disco duro de 20GB. Ahora mismo tiene instalado Windows 2000 en la primera partición primária (/dev/hda1 para Linux, (hd0,0) para GRUB) con el sistema de ficheros NTFS, y Debian GNU/Linux en la primera partición extendida (/dev/hda5 para Linux, (hd0,4) para GRUB) con el sistema de ficheros ReiserFS. Las demás particiones que he creado para organizar mis datos, particiones de swap, etc., no tienen ningún interés aquí puesto que no son arrancables.