Aventuras con DragonFlyBSD y GRUB2

By | June 11, 2009

INTRODUCCIÓN

 

DragonFlyBSD es el novedoso derivado de FreeBSD con el sistema de ficheros Hammer, el cual incluye como caracteristicas principales: recuperación de fallos, chequeo de la integridad de los datos, control del historial de los ficheros, así como la posibilidad de hacer un mirror hacia otros volúmenes.

GRUB2, aunque aún en desarrollo, ya permite mucho más que su predecesor Grub 0.97.

En nuestro caso, Grub2 nos permitió arrancar un sistema operativo, DragonFlyBSD, instalado en un disco no reconocido por la BIOS, y que por lo tanto, no podía ser arrancado con los gestores de arranque tradicionales.

 

CONSIDERACIONES INICIALES

 

El ordenador utilizado es un viejo ordenador sin controladora de discos SATA, y ninguna opción en la BIOS para reconocer esos discos duros. Recientemente se le añadido una controladora PCI para discos SATA, pero eso no cambia el hecho de que no es reconocida por la BIOS.

Entonces tenemos:

  • 1 disco IDE con Debian GNU/Linux instalado.
  • 1 disco SATA no reconocido por la BIOS.

 

INSTALACIÓN DE DragonFlyBSD

Bajamos el LiveCD de DragonFly de http://www.dragonflybsd.org/download/ y lo grabamos en un CD.

Arrancó el ordenador con el LiveCD, el cual al final del arranque, nos permite entrar como root para probar el sistema operativo, o como installer,  Al  entrar como installer se inicia el proceso de instalación, el cual SI reconoce el disco duro SATA, e instalo DragonFly en él, El proceso es muy sencillo y lineal. Elijo el sistema de ficheros Hammer, en lugar del tradicional UFS.

Ya tenemos DragonFly instalado, pero aún no puedo arrancarlo, ya que la BIOS no lo reconoce…

Así que antes de reiniciar entramos como root en el LiveCD y copiamos el kernel de DragonFly en la partición de Debian donde estará grub2.

mkdir /tmp/ad0s1
mount_ext2fs /dev/ad0s1 /tmp/ad0s1
mkdir /tmp/ad0s1/boot/dragonfly
cp /boot/kernel /tmp/ad0s1/boot/dragonfly/
umount /tmp/ad0s1

Cambiar ad0s1 por la particion de tu disco duro que contenga grub. Puedes ayudarte de dmesg, mount y fdisk para saber cual es.

Es hora de reiniciar y arrancar Debian desde el primer disco IDE.

INSTALACIÓN DE GRUB

 

Desde Debian, instalamos grub2. Puedes usar tu gestor de paquetes favoritos (synaptic, aptitude, etc…) En mi caso.

# apt-get install grub2 grub-common grub-pc grub-splashimages

Estas son las versiones de los paquetes que se instalarón:

ii  grub-common                               1.96+20090603-1
GRand Unified Bootloader, version 2 (common files)
ii  grub-pc                                   1.96+20090603-1
GRand Unified Bootloader, version 2 (PC/BIOS version)
ii  grub-splashimages                         1.2.3
a collection of great GRUB splashimages
ii  grub2                                     1.96+20090603-1
GRand Unified Bootloader, version 2 (dummy package)

En Debian, nos sale el siguiente mensaje:

 Los scripts de actualización han detectado en /boot/grub una configuración
heredada de  una versión anterior de GRUB. 

 Para reemplazar la versión anterior de GRUB en su sistema, se recomienda
que se ajuste  /boot/grub/menu.lst para que cargue en cadena a partir de su
configuración  preexistente de GRUB. Este paso debería hacerse ahora de forma
automática.   

 Antes de instalar GRUB 2 directamente en el MBR («Master Boot Record») se
recomienda  que acepte cargarlo en cadena desde el menu.lst y que verifique que 
puede utilizar la  nueva configuración de GRUB 2. 

 En cualquier caso, cuando quiera que GRUB 2 se inicie directamente desde
el MBR, puede hacerlo usando (como root) la siguiente orden:
upgrade-from-grub-legacy

 ¿Desea realizar la carga en cadena desde menu.lst? 

Recomendamos aceptar la sugerencia de Debian, lo cual viene bien para probar hasta asegurarnos de que grub2 ha quedado perfectamente configurado, y que nos quiere decir es que grub2 se cargará encadenado desde grub-legacy.

Si cometemos algun error en la configuración de grub2 siempre podremos seguir arrancando desde grub, y una vez que verifiquemos que grub2 está perfecto, podremos instalar grub2 en el MBR con el comando: upgrade-from-grub-legacy.

De momento, continuemos.

INSTALANDO GRUB2 CON EL MÓDULO ATA

 

Puedes saltarte la parte de modificar grub-install si tu ordenador reconoce sin problemas a los discos duros SATA.

GRUB2 tiene un diseño modular, y al instalarlo podemos elegir que modulos queremos que se instalen.

Copiamos todos los módulos en /boot/grub

cp /usr/lib/grub/i386-pc/*.mod /boot/grub

Aplicamos este parche a /usr/sbin/grub-install.  Puedes usar la herramienta patch, o modificarlo manualmente.
Elminando las lineas que comienzan por “-” y añadiendo las que comienzan por “+”.

Con este parche le indicamos a grub2 que use siempre el módulo ata para
detectar todos los discos duros (SATA incluidos) saltandose lo que le
haya indicado la BIOS.

--- grub-install.old	2009-06-04 09:02:32.000000000 +0200
+++ grub-install	2009-06-11 15:51:43.000000000 +0200
@@ -254,7 +254,7 @@
 
 # The order in this list is critical.  Be careful when modifying it.
 if [ "${target_cpu}-${platform}" = "i386-pc" ] ; then
-    modules="$modules biosdisk"
+     modules="$modules ata"
 else
     modules="$modules ata"
 fi
@@ -267,7 +267,7 @@
     else
       install_drive="`$grub_probe --target=drive --device ${install_device}`"
     fi
-    grub_drive="`$grub_probe --target=drive --device ${grub_device}`"
+    grub_drive="`$grub_probe --target=drive --device ${grub_device}|sed -e 's/h
d/ata/'`"
 
     # Strip partition number
     install_drive="`echo ${install_drive} | sed -e s/,[0-9]*[a-z]*//g`"
@@ -291,7 +291,9 @@
         modules="$modules fs_uuid"
     fi
 else
-    prefix_drive=`$grub_probe --target=drive --device ${grub_device}`
+     uuid="`$grub_probe --target=fs_uuid --device ${grub_device}`"
+     prefix_drive="(UUID=${uuid})"
+     modules="$modules fs_uuid"
 fi
 
 relative_grubdir=`make_system_path_relative_to_its_root ${grubdir}` || exit 1

En futuras versiones de Grub2 se incluirá el parámetro “–disk-module”, con lo que se evitará tener que parchear grub-install.

Modificamos  /etc/grub.d/40_custom y añadimos la entrada para poder arrancar DragonFlyBSD.

menuentry "DragonFlyBSD" {
    set root=(ata3)
    # chainloader +1 #No se usa. No hacemos chainload porque la BIOS no reconoce ese disco
    freebsd (ata0,1)/boot/dragonfly/kernel
    set FreeBSD.vfs.root.mountfrom=hammer:ad6s1a
}

 

Notas:

(ata0,1)

hace referencia a la primera partición del primer disco duro. Donde esta instalado grub2, y donde anteriormente copiamos el kernel de DragonFly.

(Este valor lo obtuvimos porque en nuestros experimentos durante arranques anteriores vimos que grub2 permite hacer “ls” en su prompt para listar los discos duros, o incluso el contenido de los discos duros. Una maravilla.

ataX,X es la nomenclatura de los discos cuando se usa el modulo ata de grub2

)

 

hammer:ad6s1a

hace referencia a montar el disco ad6s1a (según la nomenclatura de DragonFlyBSD) con el sistema de ficheros hammer.

(Este valor lo obtuvimos tras instalar DragonFlyBSD con el LiveCD, desde el LiveCD supimos como reconoce DragonFlyBSD al segundo disco SATA)

Es hora de instalar GRUB2, en la primera partición del disco duro IDE, con los módulos que a nosotros nos dieron resultado. Lo instalamos en la primera partición del disco duro IDE (Debian)  /dev/hda1 en lugar del MBR, ya que como hemos dicho conservaremos grub-legacy hasta confirmar que grub2 puede arrancar todos los sistemas operativos.

Esto debe ejecutarse en una sola línea.

grub-install --modules="date pc ata boot ls gpt raid ext2 ufs fat echo cpio gzio 
gfxterm video aout pcpart extcmd help reboot blocklist fs_uuid sh parttool linux 
fshelp dm_nv datehook jpeg test bsd cmp memdisk acpi elf affs xfs cpuid crc play 
mdraid sleep search chain lua memrw ata_pthru configfile linux16 raid5rec hello 
vga_text vbeinfo gptsync bufio hdparm bitmap terminfo hfs lsmmap png tar lspci 
tga scsi lvm raid iso9660 raid6rec udf vbe handler raid6rec halt read multiboot 
xnu normal loopback sfs jfs vbetest cat afs hexdump loadenv minicmd drivemap 
font vga" /dev/hda1

 

Esto generará el archivo /boot/grub/grub.cfg con todas las líneas que permiten arrancar nuestros sistemas operativos. Vemos que aparece tambien la línea para arrancar DragonFlyBSD, ya que grub-install se encargá de añadir

/etc/grub.d/40_custom a grub.cfg.

Ya podemos reiniciar el ordenador. Nos saldrá la ventana tipica de Grub-Legacy, con una opción de hacer Chainload hacia Grub2, junto con las demás lineas para arrancar nuestros sistemas operativos.

Si elegimos arrancar Grub2, veremos las opciones de Grub2.cfg y podremos arrancar DragonFlyBSD.

A disfrutar.

Leave a Reply

Your email address will not be published. Required fields are marked *