LPIC-1 102.2: el gestor de arranque
Siguiente tema de la serie LPIC-1, el tema 102.2, destinado a comprobar las competencias de los administradores de sistemas sobre la instalación del gestor de arranque. Una parte fundamental para poder arrancar el sistema o sistemas operativos presentes en la máquina. Según la documentación oficial de LPI, las preguntas irán destinadas a saber si los candidatos son capaces de seleccionar, instalar y configurar un boot loader.
Se pide conocer las opciones de backup, instalar y configurar un gestor de arranque GRUB Legacy, y la configuración de GRUB 2, así como saber interactuar con este gestor. Un tema bastante simple y no demasiado extenso que intentaré comprimir en un solo artículo para no partirlo como hice con otros…
ÍNDICE:
¿Qué es un gestor de arranque?
Básicamente es un programa sencillo capaz de localizar un kernel (de entre varios), o sistema operativo, en un medio de almacenamiento y preparar todo lo necesario para que pueda arrancar. Los gestores de arranque o bootloaders como LILO o GRUB son de segundo nivel, es decir, solo tienen unas rutinas muy básicas para arrancar.
Creo que ya deberías saber dónde se aloja este gestor de arranque, y también conocer el proceso de arranque para Linux…
¿Por qué GRUB?
GRUB se ha convertido, casi, en el gestor de arranque por defecto de GNU/Linux, por tanto, aunque haya más gestores disponibles como LILO, SYSLINUX, etc., LPI le ha dado la importancia que merece a GRUB.
GRUB son las siglas de Grand Unified Boot Loader, y pertenece al proyecto GNU. En un inicio fue creado por Erich Stefan Boleyn en C y ASM para el sistema GNU/Hurd, aunque luego se empleó para otros sistemas operativos como GNU/Linux, Solaris, FreeBSD, etc. Además, es compatible con arquitecturas IA-32, AMD64, IA-64, ARM, ARM64, MIPS, SPARC, y POWER/PowerPC.
De él han surgido dos grandes variantes:
- GRUB 1 o GRUB Legacy: es la primera implementación de este gestor de arranque, y se detuvo en la versión 0.97.
- GRUB 2 (PUPA): GRUB 2 no es la versión dos, de hecho es la versión 1.x. Solo que tiene un nuevo diseño y se ha reescrito para hacerlo más robusto, limpio, seguro y potente, además de incluir soporte para EFI/UEFI, además funcionar en los sistemas con BIOS.
Existe un menú gráfico llamado BURG (Brand-new Unified loadeR from Grub) derivado de GRUB2.
Si te preguntas si se puede actualizar de GRUB Legacy a GRUB2, la respuesta es sí:
*NOTA: se necesita previamente el paquete grub-pc, e instalar grub2 sudo upgrade-from-grub-legacy
E incluso es posible la operación inversa, pasar de GRUB2 a Legacy:
- Inicia Boot-Repair desde un Live o desde tu sesión.
- Ve a Opciones Avanzadas, Opciones de GRUB, y marca la opción GRUB Legacy.
- Aplica los cambios.
Te aconsejo en todo momento realizar copias de seguridad previas a estos cambios, o de lo contrario podrías llevarte una sorpresa si algo ha ido mal…
Ficheros de configuración:
En función de si usas GRUB Legacy o GRUB 2, vas a encontrar uno u otro fichero de configuración.
menu.lst
Para GRUB Legacy, el fichero de configuración lo puedes encontrar en la ruta /boot/grub/menu.lst. Al igual que ocurre con LILO, el fichero se divide en una zona global donde se encuentra la configuración general, y zonas locales o específicas para cada imagen que se debe arrancar.
Recuerda que GRUB no diferencia entre tecnologías SCSI, y PATA, SATA, para los medios de almacenamiento. Tampoco sigue la misma nomenclatura que Linux para designarlos y comienza numerando por 0 en vez de 1. Por ejemplo, una partición /dev/sda1 y /dev/hdb3 serían en GRUB hd0, 1 y hd1, 3. Es decir, la primera partición del primer disco duro y la tercera partición del segundo disco duro respectivamente. Puedes comprar /boot/grub/device.map para ver la relación de nombres.
El formato del fichero menu.lst es el siguiente, y es bastante intuitivo, creo que no hace falta explicar para qué sirve cada línea:
#grub.conf # #Opciones globales: # default=1 timeout=8 splashimage=/grub/mi_fondo.xpm.gz # #Opciones locales: # title Ubuntu root (hd0,0) kernel /vmlinuz-3.11 ro root=/dev/sda5 mem=2048M initrd /initrd-3.10 title CentOS root (hd0,0) kernel (hd0,0)/bzImage.3.0 ro root=/dev/sda6 # #Otros sistemas operativos: # title Windows rootnoverify (hd0,1) chainloader +1
Como ves, en la entrada para Linux, se especifica el nombre de la distro, dónde se encuentra la partición raíz, y el kernel que se debe cargar e initrd. En este caso hay dos distros, una Ubuntu y otra CentOS instalada en esta máquina, además de un sistema operativo Microsoft Windows que llevará unas etiquetas especiales.
El significado de cada elemento es el siguiente:
- #: son los comentarios o líneas que se ignoran.
- default: sistema operativo arrancado por defecto cuando no interactuas con el menú de GRUB durante el arranque. 0 es el primer sistema, 1 el segundo, y así. Recuerda que GRUB indexa desde el cero…
- timeout: es el tiempo de espera en segundos para que se arranque la opción por defecto, es decir, el tiempo que tendrás para cambiar de opción si lo necesitas.
- splashimage: puedes cambiar la imagen de fondo de GRU para personalizarlo. Para GRUB Legacy deben estar en formato comprimido o sin comprimir, pero siempre en XPM. En cambio, para GRUB2 deben estar en formato TGA descomprimido o RLE.
- title: nombre o etiqueta para llamar a la entrada o sistema operativo. Admine espacios, a diferencia de label para LILO.
- root: identifica la partición raíz donde reside GRUB. Puede ser / si no es una partición independiente o /boot si la has separado en el layout de particiones. Incluso podrías especificar otro medio de almacenamiento diferente…
- kernel: ubicación o ruta donde se encuentra el kernel que se debe cargar. Se pueden agregar opciones adicionales. Por ejemplo, ro (read-only), root, etc.
- initrd: especifica un RAM disk, una imagen con todos los módulos a cargar, si se está usando.
- rootnoverif: similar a root, solo que GRUB no intentará acceder a la partición al no poder cargar directamente el kernel. En ese caso le dejará el proceso al gestor del sistema DOS, Windows,…Es decir, la partición donde se ha instalado el SO.
- chainloader: indica a GRUB que le pase el control a otro gestor de arraanque del sistema operativo al que afecta. La opción +1 indica que cargue el primer sector de la partición que se define en rootnoverif.
Si quieres agregar un nuevo kernel para tu distro, te recomiendo que no borres la entrada del antiguo. Renombrala como old o antiguo y crea una nueva con el nuevo. De esa forma, si has configurado y compilado el nuevo kernel y no funciona, siempre puedes arrancar con el antiguo.
grub.conf
Para GRUB 2, el fichero de configuración se aloja en la ruta /boot/grub/grub.conf. En algunas distros puede que el nombre sea /boot/grub2, pero en cualquier caso, todo es similar a lo dicho anteriormente para GRUB Legacy. Aquí lo que tendrás será algunas nuevas funcionalidades, como módulos cargables para sistemas de archivos (FS) específicos, modos de operación, etc.
En GRUB 2, los dispositivos siguen la misma nomenclatura que en GRUB Legacy. Pero aquí no viene el fichero /boot/grub/device.map por defecto. Para ello debes ejecutar la orden: sudo grub-mkdevicemap
Un segmento de este fichero grub.cfg que ha crecido en complejidad podría ser:
###BEGIN /etc/grub.d/10_linux ### menuentry ‘Ubuntu 16.10’ –-class ubuntu -–class gnu-linux -–class os { recordfail insmod part_msdos insmod ext2 set root=’(hd0,msdos6)’ search –-no-floppy -–fs-uuid –set 07d9cd60-8e30-8478-8365-9cba365c1 linux /boot/vmlinuz-2.6.35-24-generic root=UUID=8756c36-7362-9ab... initrd /boot/initrd.img-2.6.35.24-generic } ###END /etc/grub.d/10_linux ### ###BEGIN /etc/grub.d/30_os-prober ### menuentry “Windows 7” { insmod part_msdos insmod ntfs set root=’(hd0,msdos1)’ search –-no-floppy –-fs-uuid –-set 24525525ed3225a23 chainloader +1 } ###END /etc/grub.d/30_os-prober ###
Como ves ahora es bastante más complejo y la sintaxis ha variado notablemente. Además, como puedes ver hace referencia a ficheros de scripts alojados en /etc/grub.d/. Las stanzas ahora están delimitadas por {}, title ahora se llama menuentry, la opción root debe ir presedida de la palabra set y seguida de =, ya no existe rootnoverify (solo se usa set root=), ahora las particiones comienzan por el valor 1 y no con 0. Se usarán insmod para cargar módulos adicionales, etc.
La nueva idea es que no edites directamente grub.cfg, sino que hagas cambios en estos otros ficheros. Puedes controlar valores predeterminados para los scripts de configuración desde /etc/default/grub. Y como digo, aunque puedes seguir trabajando con grub.cfg, es más seguro hacerlo como se recomienda. Dentro de /etc/grub.d/ encontrarás algunos importantes como:
- 40_custom: para incluir entradas personalizadas con esta plantilla de script.
- 30_os-prober: para buscar otros sistemas operativos.
- 10_linux: para los nombres de distros.
En el caso de /etc/default/grub, puedes encontrar algo similar a esto:
#If you change this file, run ‘update.grub’ afterwards to update #/boot/grub/grub.cfg GRUB_DEFAULT=0 GRUB_HIDDEN_TIMEOUT=0 GRUB_HIDDEN_TIMEOUT_QUIET=true GRUB_TIMEOUT=8 GRUB_DISTRIBUTOR=’lsb_release –i –s 2> /dev/null || echo Debian GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash” GRUB_CMDLINE_LINUX=”” #Uncomment to disable graphical terminal (grub-pc only) #GRUB_TERMINAL=console #The resolution use don graphical terminal #note that you can use only modes which your graphic card #supports via VBE you can see them in real GRUB with the #command ‘vbeinfo’ #GRUB_GFXMODE=640x480 #Uncomment if you don ́t want GRUB to pass “root=UUID=xxx” #parameter to Linux #GRUB_DISABLE_LINUX_UUID=true #Uncomment to disable generation of recovery mode menú entries #GRUB_DISABLE_LINUX_RECOVERY=”true” #Uncomment to get a beep at grub start #GRUB_INIT_TUNE=”480 440 1”
Las opciones son bastante intuitivas, no obstante, explico algunas de las más importantes:
No te recomiendo eliminar entradas, si quieres deshabilitar alguna, coméntala (poniendo # delante para que la ignore). Así estará disponible por si la quieres recuperar.
- GRUB_DEFAULT: para seleccionar la entrada por defecto del sistema. Con 0 se selecciona la primera, 1 para la segunda…Será el sistema que arranque si no elegimos otra opción durante el periodo que se muestra el menú de GRUB.
- GRUB_HIDDEN_TIMEOUT: ocultará el menú de entrada de GRUB durante el arranque. El número indica la cantidad de segundos que se esperará antes de continuar.
- GRUB_HIDDEN_MENU_QUIET: puede tener dos valores, true y false. El primero oculta la cuenta atrás y el segundo la muestra.
- GRUB_TIMEOUT: tiempo de espera en segundos hasta que selecciona la opción por defecto si no se interactúa con el menú. Si se interactúa se detendrá la cuenta atrás. En los servidores puede que esta pantalla sea molesta y se configura como -1.
- GRUB_CMDLINE_LINUX_DEFAULT: por lo general toma los valores «quiet splash acpi_osi=Linux» para agrupar las entradas iguales, montar los mensajes de carga del kernel, etc.
- GRUB_GFXMODE: cambia la resolución de GRUB. Si deseas saber las resoluciones soportadas, puedes acceder al prompt boot> de GRUB e introducir el comando vbeinfo.
- GRUB_DISABLE_LINUX_RECOVERY: para mostrar o no las opciones de Recovery Mode en el menú de GRUB.
- GRUB_CMDLINE_LINUX: parámetros por defecto de todos los kernels Linux presentes.
- GRUB_DISTRIBUTOR: define la generación automática de texto en la entrada del menú.
Recuerda ejecutar una de estas órdenes tras hacer las modificaciones para que surtan efecto:
update-grub update-grub2
Eso volverá a componer grub.cfg con la nueva configuración. Al reiniciar, podrás comprobar los cambios desde el menú de GRUB…
Herramientas
Hay algunas herramientas relacionadas con GRUB que deberías conocer. Alguna ya la he citado anteriormente como es la que reconstruye de nuevo el fichero de configuración grub.cfg para que surtan efecto los cambios que hayas realizado en los scripts o en /etc/default/grub:
update-grub update-grub2
Otra interesante es la que instala o reinstala GRUB en un punto determinado que le pases como parámetro. Por ejemplo:
sudo grub-install /dev/sda
Y si es la primera vez, tras la instalación, puedes generar el fichero de configuración con:
sudo grub-mkconfig -o /boot/grub/grub.cfg
Luego solo tendrías que reiniciar y listo…
Aunque el orden que le da LPI a sus exámenes es un poco caótico y yo haya elegido otro método para el curso que he creado, ya sabéis que en la serie de artículos que publico en este blog sigo el mismo orden que establece LPI. Así que la próxima entrada será sobre la gestión de bibliotecas compartidas…