La utilización de grub2 a partir de Fedora 16
Una de las novedades de Fedora 16 es la utilización de grub2 como gestor de arranque predeterminado. La capacidad que tiene este gestor para reconocer sistemas previamente instalados es superior a la versión anterior, y debido a ello es muy probable que luego de una instalación no necesitemos modificar nada: en el menú inicial podremos observar todos nuestros sistemas operativos ya instalados sin demasiadas complicaciones (siempre y cuando obviamente tengamos una partición /boot independiente y no le hayamos dado un nuevo formato con la última instalación).
Sin embargo hay diferencias importantes. Una de ellas es que comparado con su versión anterior, la sintaxis requerida para una configuración manual es algo más compleja. Otra diferencia que hay que tener muy en cuenta es aquella relacionada con la numeración de las particiones: En grub tanto al primer disco como a la primera partición se las identifica con el número “0”. De esta manera, si tenemos un sistema operativo instalado en la primera partición del primer disco duro, la ruta en el grub la indicábamos como “hd0,0”. Pero ahora, en grub2 la notación es diferente y a pesar de seguir identificándose a los discos de la misma manera (con el número “0” para el primer disco, “1” para el segundo, etc.), a la primera partición de un disco se la identifica con el número “1”. Ahora entonces, en grub2, la notación de la ruta a un sistema operativo instalado en la primera partición del primer disco duro debe ser “hd0,1”, en la segunda partición “hd0,2″, y así sucesivamente.
La tercer gran diferencia es que llegado el caso de instalar un nuevo sistema operativo, grub2 tiene la capacidad de ser configurado de manera automática para que lo reconozca y lo agregue a su menú inicial mediante una línea de comando. Para poder hacerlo tenemos que tener instalado el paquete os-prober
yum install os-prober
Para que se autoconfigure de manera automática tenemos que ingresar lo siguiente (siempre como usuarios ‘root’ o ‘sudo’):
grub2-mkconfig -o /boot/grub2/grub.cfg
Hay que tener en cuenta, además, que una vez ejecutada esta orden se sustituyen todas las modificaciones que hayamos hecho en forma manual.
Nuestro único consejo: tomar todas las precauciones posibles antes de realizar una instalación nueva, realizar respaldos de nuestros datos importantes, visitar los foros de la comunidad, y tratar de leer la mayor cantidad de documentación que tengamos a mano.
Cómo modificar el grub2
A partir de f16, si queremos modificar el gestor de arranque grub2, tenemos que editar el archivo /boot/grub2/grub.cfg, siempre como usuarios ‘root’ o ‘sudo’.
Si lo queremos modificar en forma automática, realizando una especie de actualización sobre sí mismo en busca de nuevos sistemas operativos instalados, lo hacemos mediante la orden:
grub2-mkconfig -o /boot/grub2/grub.cfg
Atención: Si tenemos más de un sistema operativo Linux instalado es fundamental que ejecutemos el comando recién indicado luego de cada actualización del kernel. Cada nueva actualización sustituye nuestro archivo /boot/grub2/grub.cfg, pero grub2 no vuelve a revisar nuestro disco en busca de otros sistemas operativos, a menos que nosotros se lo indiquemos. De acuerdo a la configuración que tengamos de yum, puede suceder que algunas líneas de booteo “desaparezcan”, y con este comando volvemos a generarlas.
Si en cambio queremos hacerlo en forma manual (en un entorno Gnome):
gedit /boot/grub2/grub.cfg
Y nos vamos a encontrar con algo parecido a esto:
#
#DO NOT EDIT THIS FILE
#It is automatically generated by grub2-mkconfig using templates
#from /etc/grub.d and settings from /etc/default/grub
### BEGIN /etc/grub.d/00_header ####
if [ -s $prefix/grubenv ]; then
load_env
fi
set default="0"
if [ "${prev_saved_entry}" ]; then
set saved_entry="${prev_saved_entry}"
save_env saved_entry
set prev_saved_entry=
save_env prev_saved_entry
set boot_once=true
fi
function savedefault {
if [ -z "${boot_once}" ]; then
saved_entry="${chosen}"
save_env saved_entry
fi
}
function load_video {
true
}
set timeout=10
### END /etc/grub.d/00_header ###
### BEGIN /etc/grub.d/10_linux ###
menuentry 'Fedora (3.1.0-0.rc10.git0.1.fc16.x86_64)' --class fedora --class gnu-linux --class gnu --class os {
load_video
set gfxpayload=keep
insmod gzio
insmod part_msdos
insmod ext2
set root='(hd0,msdos2)'
search --no-floppy --fs-uuid --set=root 08e14854-407a-45c3-be6f-e70c908eb714
echo 'Loading Fedora (3.1.0-0.rc10.git0.1.fc16.x86_64)'
linux/vmlinuz-3.1.0-0.rc10.git0.1.fc16.x86_64 root=UUID=6a7914be-e03d-4b46-809d-acade298ebb2 ro rd.md=0 rd.lvm=0 rd.dm=0 KEYTABLE=la-latin1 quiet SYSFONT=latarcyrheb-sun16 rhgb rd.luks=0 LANG=es_ES.UTF-8
echo 'Loading initial ramdisk ...'
initrd /initramfs-3.1.0-0.rc10.git0.1.fc16.x86_64.img
}
menuentry 'Fedora Linux, with Linux 3.1.0-0.rc6.git0.3.fc16.x86_64' --class fedora --class gnu-linux --class gnu --class os {
load_video
set gfxpayload=keep
insmod gzio
insmod part_msdos
insmod ext2
set root='(hd0,msdos2)'
search --no-floppy --fs-uuid --set=root 08e14854-407a-45c3-be6f-e70c908eb714
echo'Loading Linux 3.1.0-0.rc6.git0.3.fc16.x86_64 ...'
linux/vmlinuz-3.1.0-0.rc6.git0.3.fc16.x86_64 root=UUID=6a7914be-e03d-4b46-809d-acade298ebb2 ro rd.md=0 rd.lvm=0 rd.dm=0 KEYTABLE=la-latin1 quiet SYSFONT=latarcyrheb-sun16 rhgb rd.luks=0 LANG=es_ES.UTF-8
echo'Loading initial ramdisk ...'
initrd/initramfs-3.1.0-0.rc6.git0.3.fc16.x86_64.img
}
menuentry 'Fedora Linux, with Linux 3.1.0-0.rc6.git0.3.fc16.x86_64 (recovery mode)' --class fedora --class gnu-linux --class gnu --class os {
load_video
set gfxpayload=keep
insmod gzio
insmod part_msdos
insmod ext2
set root='(hd0,msdos2)'
search --no-floppy --fs-uuid --set=root 08e14854-407a-45c3-be6f-e70c908eb714
echo'Loading Linux 3.1.0-0.rc6.git0.3.fc16.x86_64 ...'
linux/vmlinuz-3.1.0-0.rc6.git0.3.fc16.x86_64 root=UUID=6a7914be-e03d-4b46-809d-acade298ebb2 ro single rd.md=0 rd.lvm=0 rd.dm=0 KEYTABLE=la-latin1 quiet SYSFONT=latarcyrheb-sun16 rhgb rd.luks=0 LANG=es_ES.UTF-8
echo'Loading initial ramdisk ...'
initrd/initramfs-3.1.0-0.rc6.git0.3.fc16.x86_64.img
}
menuentry 'Fedora Linux, with Linux 2.6.35.14-97.fc14.x86_64' --class fedora --class gnu-linux --class gnu --class os {
load_video
set gfxpayload=keep
insmod gzio
insmod part_msdos
insmod ext2
set root='(hd0,msdos2)'
search --no-floppy --fs-uuid --set=root 08e14854-407a-45c3-be6f-e70c908eb714
echo'Loading Linux 2.6.35.14-97.fc14.x86_64 ...'
linux/vmlinuz-2.6.35.14-97.fc14.x86_64 root=UUID=6a7914be-e03d-4b46-809d-acade298ebb2 ro rd.md=0 rd.lvm=0 rd.dm=0 KEYTABLE=la-latin1 quiet SYSFONT=latarcyrheb-sun16 rhgb rd.luks=0 LANG=es_ES.UTF-8
echo'Loading initial ramdisk ...'
initrd/initramfs-2.6.35.14-97.fc14.x86_64.img
}
menuentry 'Fedora Linux, with Linux 2.6.35.14-97.fc14.x86_64 (recovery mode)' --class fedora --class gnu-linux --class gnu --class os {
load_video
set gfxpayload=keep
insmod gzio
insmod part_msdos
insmod ext2
set root='(hd0,msdos2)'
search --no-floppy --fs-uuid --set=root 08e14854-407a-45c3-be6f-e70c908eb714
echo'Loading Linux 2.6.35.14-97.fc14.x86_64 ...'
linux/vmlinuz-2.6.35.14-97.fc14.x86_64 root=UUID=6a7914be-e03d-4b46-809d-acade298ebb2 ro single rd.md=0 rd.lvm=0 rd.dm=0 KEYTABLE=la-latin1 quiet SYSFONT=latarcyrheb-sun16 rhgb rd.luks=0 LANG=es_ES.UTF-8
echo'Loading initial ramdisk ...'
initrd/initramfs-2.6.35.14-97.fc14.x86_64.img
}
### END /etc/grub.d/10_linux ###
### BEGIN /etc/grub.d/20_linux_xen ###
### END /etc/grub.d/20_linux_xen ###
### BEGIN /etc/grub.d/30_os-prober ###
menuentry "Windows Vista (loader) (on /dev/sda1)" --class windows --class os {
insmod part_msdos
insmod ntfs
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set=root 7CD84AEED84AA66C
chainloader +1
}
menuentry "fedora (on /dev/sda3)" --class gnu-linux --class gnu --class os {
insmod part_msdos
insmod ext2
set root='(hd0,msdos2)'
search --no-floppy --fs-uuid --set=root 08e14854-407a-45c3-be6f-e70c908eb714
linux /vmlinuz-2.6.35.14-97.fc14.x86_64 ro root=UUID=7e24a4de-54a8-44f5-a544-4a8f93c7b99c rd_NO_LUKS rd_NO_LVM rd_NO_MD rd_NO_DM LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYTABLE=la-latin1 rhgb quiet
initrd /initramfs-2.6.35.14-97.fc14.x86_64.img
}
### END /etc/grub.d/30_os-prober ###
### BEGIN /etc/grub.d/40_custom ###
#This file provides an easy way to add custom menu entries. Simply type the
#menu entries you want to add after this comment. Be careful not to change
#the 'exec tail' line above.
### END /etc/grub.d/40_custom ###
### BEGIN /etc/grub.d/41_custom ###
if [ -f $prefix/custom.cfg ]; then
source $prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###
### BEGIN /etc/grub.d/90_persistent ###
### END /etc/grub.d/90_persistent ###
Ahora bien, si lo que queremos es agregar un sistema operativo basado en Linux, tenemos que respetar la sintaxis de las líneas comprendidas entre los encabezados ### BEGIN /etc/grub.d/10_linux ### y ### END /etc/grub.d/10_linux ###. Si lo que nos interesa es agregar un sistema windows, tenemos que prestarle atención a la sintaxis de las líneas comprendidas entre los encabezados ### BEGIN /etc/grub.d/30_os-prober ### y ### END /etc/grub.d/30_os-prober ###.
Finalmente, si queremos que en el menú inicial se reflejen nuestras modificaciones, y aparezcan nuevas rutas de booteo hacia otros sistemas operativos que no han sido detectados por grub2, tenemos que agregar estas líneas que queremos que aparezcan entre los encabezados
### BEGIN /etc/grub.d/40_custom ###
#This file provides an easy way to add custom menu entries. Simply type the
#menu entries you want to add after this comment. Be careful not to change
#the 'exec tail' line above.
ioioioioioioioioioi
ioioioioioioioioioioioi
ioioioioioi
### END /etc/grub.d/40_custom ###
Si agregamos líneas de booteo en cualquier otra parte del archivo /boot/grub2/grub.cfg, estas líneas no serán observadas en el menú inicial.
Y recuerden que estas modificaciones serán sobrescritas y anuladas con cada nueva actualización del kernel, o con la ejecución del comando:
grub2-mkconfig -o /boot/grub2/grub.cfg