GNU GRUB (abreviatura de GNU GRand Unified Bootloader , comúnmente conocido como GRUB ) es un paquete de cargador de arranque del Proyecto GNU . GRUB es la implementación de referencia de la Especificación de arranque múltiple de la Free Software Foundation , que brinda al usuario la opción de arrancar uno de los múltiples sistemas operativos instalados en una computadora o seleccionar una configuración de kernel específica disponible en las particiones de un sistema operativo en particular.
GNU GRUB se desarrolló a partir de un paquete llamado Grand Unified Bootloader (un juego de palabras con Grand Unified Theory [6] ). Se utiliza predominantemente para sistemas tipo Unix .
Cuando se enciende un ordenador, su BIOS encuentra el dispositivo de arranque primario (normalmente el disco duro del ordenador) y ejecuta el programa de arranque inicial desde el registro de arranque maestro (MBR). El MBR es el primer sector del disco duro. Este programa de arranque debe ser pequeño porque tiene que caber en un solo sector. Durante mucho tiempo, el tamaño de un sector ha sido de 512 bytes. Desde 2009 hay discos duros disponibles con un tamaño de sector de 4096 bytes, llamados discos de formato avanzado , pero a partir de octubre de 2013 [actualizar], todavía se accede a dichos discos duros en sectores de 512 bytes, utilizando la emulación 512e . [7] La tabla de particiones MBR heredada admite un máximo de cuatro particiones y ocupa 64 bytes, en conjunto. Junto con la firma de disco opcional (cuatro bytes) y la marca de tiempo de disco (seis bytes), esto deja entre 434 y 446 bytes disponibles para el código de máquina de un gestor de arranque. Aunque un espacio tan pequeño puede ser suficiente para cargadores de arranque muy simples, [8] no es lo suficientemente grande como para contener un cargador de arranque que admita sistemas de archivos complejos y múltiples , selección de opciones de arranque mediante menús, etc. Por lo tanto, los cargadores de arranque con huellas más grandes se dividen en partes, donde la parte más pequeña cabe en el MBR, mientras que una o más partes más grandes se almacenan en otras ubicaciones, como sectores vacíos entre el MBR y la primera partición. El código en el MBR luego hace poco más que iniciar la segunda parte.
El propósito de las partes restantes del cargador de arranque es arrancar un sistema operativo mediante su configuración e iniciando el núcleo . En la mayoría de los casos, los núcleos se almacenan como archivos que residen en sistemas de archivos apropiados, pero el concepto de sistema de archivos es desconocido para el BIOS. Por lo tanto, en los sistemas basados en BIOS, la función de un cargador de arranque es acceder al contenido de esos archivos, para que se puedan cargar en la RAM y ejecutar.
Un posible enfoque para los cargadores de arranque es cargar imágenes del núcleo accediendo directamente a sectores del disco duro sin entender el sistema de archivos subyacente. Por lo general, se requiere un nivel adicional de indirección , en forma de mapas o archivos de mapas : archivos auxiliares que contienen una lista de sectores físicos ocupados por imágenes del núcleo. Dichos mapas deben actualizarse cada vez que una imagen del núcleo cambia su ubicación física en el disco, debido a la instalación de nuevas imágenes del núcleo, la desfragmentación del sistema de archivos, etc. Además, en caso de que los mapas cambien su ubicación física, sus ubicaciones deben actualizarse dentro del código MBR del cargador de arranque, de modo que el mecanismo de indirección de sectores continúe funcionando. Esto no solo es engorroso, sino que también deja al sistema en la necesidad de reparaciones manuales en caso de que algo salga mal durante las actualizaciones del sistema. [9]
Otro enfoque es hacer que un cargador de arranque conozca los sistemas de archivos subyacentes, de modo que las imágenes del núcleo se configuren y se acceda a ellas utilizando sus rutas de archivo reales . Eso requiere que un cargador de arranque contenga un controlador para cada uno de los sistemas de archivos compatibles, de modo que el propio cargador de arranque pueda comprenderlos y acceder a ellos. Este enfoque elimina la necesidad de codificar las ubicaciones de los sectores del disco duro y la existencia de archivos de mapas, y no requiere actualizaciones de MBR después de que se agreguen o muevan imágenes del núcleo. La configuración de un cargador de arranque se almacena en un archivo normal, al que también se accede de una manera que tenga en cuenta el sistema de archivos para obtener las configuraciones de arranque antes del arranque real de cualquier imagen del núcleo. Por lo tanto, menos cosas pueden salir mal durante las actualizaciones del sistema. Como desventaja, estos cargadores de arranque son más grandes y más complejos. [9]
GNU GRUB utiliza el segundo enfoque, entendiendo los sistemas de archivos subyacentes. El cargador de arranque en sí se divide en varias etapas para que encaje en el esquema de arranque MBR.
Se utilizan dos versiones principales de GRUB: la versión 0 de GRUB, denominada GRUB legacy, solo se utiliza en versiones anteriores de distribuciones de Linux. GRUB 2 se escribió desde cero y pretendía reemplazar a su predecesor, y ahora se utiliza en la mayoría de distribuciones de Linux.
GRUB 0.x sigue un enfoque de dos etapas. El registro de arranque maestro (MBR) normalmente contiene la etapa 1 de GRUB, o puede contener una implementación de MBR estándar que carga en cadena la etapa 1 de GRUB desde el sector de arranque de la partición activa . Dado el pequeño tamaño de un sector de arranque (512 bytes), la etapa 1 puede hacer poco más que cargar la siguiente etapa de GRUB cargando algunos sectores del disco desde una ubicación fija cerca del inicio del disco (dentro de sus primeros 1024 cilindros).
La etapa 1 puede cargar la etapa 2 directamente, pero normalmente está configurada para cargar la etapa 1.5 , ubicada en los primeros 30 KiB del disco duro inmediatamente después del MBR y antes de la primera partición. En caso de que este espacio no esté disponible (tabla de particiones inusual, controladores de disco especiales, disco GPT o LVM ), la instalación de la etapa 1.5 fallará. La imagen de la etapa 1.5 contiene controladores del sistema de archivos, lo que le permite cargar directamente la etapa 2 desde cualquier ubicación conocida en el sistema de archivos, por ejemplo desde /boot/grub
. Luego, la etapa 2 cargará el archivo de configuración predeterminado y cualquier otro módulo necesario.
boot.img
( etapa 1 ) se escribe en los primeros 440 bytes del Registro de arranque maestro (código de arranque MBR en el sector 0), u opcionalmente en un sector de arranque de partición (PBR). Se direcciona mediante una dirección LBAdiskboot.img
de 64 bits . El número de sector real se escribe mediante . es el primer sector de con el único propósito de cargar el resto de identificados mediante números de sector LBA también escritos mediante .grub-install
diskboot.img
core.img
core.img
grub-install
core.img
( etapa 1.5 ) se almacena en los sectores vacíos (si están disponibles) entre el MBR y la primera partición. Los sistemas operativos recientes sugieren un espacio de 1 MiB aquí para la alineación (2047 sectores de 512 bytes o 255 sectores de 4 KiB). Este espacio solía ser de 62 sectores (31 KiB) como recordatorio del límite de número de sectores del direccionamiento Cylinder-Head-Sector (C/H/S) utilizado por BIOS antes de 1996, por lo tanto, core.img
está diseñado para ser menor a 32 KiB.core.img
se escribe en su propia partición. Debe estar marcada como "BIOS_grub", no debe estar formateada y puede tener un tamaño de hasta 1 MiB.core.img
carga /boot/grub/i386-pc/normal.mod
desde la partición configurada por grub-install
. Si el índice de la partición ha cambiado, GRUB no podrá encontrar el normal.mod
, y le mostrará al usuario el mensaje de GRUB Rescue./boot/grub/
se encuentra en la partición raíz de la distribución de Linux o en la partición separada /boot .normal.mod
analiza /boot/grub/grub.cfg
, opcionalmente carga módulos (por ejemplo, para la interfaz gráfica de usuario y la compatibilidad con el sistema de archivos) y muestra el menú./efi/<distro>/grubx64.efi
(para sistemas UEFI x64 ) se instala como un archivo en la partición del sistema EFI y se inicia mediante el firmware directamente, sin un boot.img
en el sector 0 del MBR. Este archivo es como stage1 y stage1.5./boot/grub/
se puede instalar en la partición del sistema EFI o en la partición separada /boot , entre otras./boot/grub/x86_64-efi/normal.mod
archivo y otros /boot/grub/
archivos.GRUB presenta un menú en el que el usuario puede elegir entre los sistemas operativos (OS) encontrados por grub-install. GRUB se puede configurar para cargar automáticamente un SO específico después de un tiempo de espera definido por el usuario. Si el tiempo de espera se establece en cero segundos, al mantener presionado el botón ⇧ Shiftmientras se inicia la computadora se puede acceder al menú de inicio. [11]
En el menú de selección del sistema operativo, GRUB acepta un par de comandos:
nvidia-current
modprobe.blacklist=nvidia-current
Una vez que se han seleccionado las opciones de arranque, GRUB carga el kernel seleccionado en la memoria y le pasa el control. Alternativamente, GRUB puede pasar el control del proceso de arranque a otro cargador de arranque, utilizando la carga en cadena . Este es el método utilizado para cargar sistemas operativos que no admiten la especificación Multiboot o que no son compatibles directamente con GRUB.
Una computadora puede tener varios discos duros conectados a ella. Estos se pueden identificar a través de su puerto SATA. Cada vez que la computadora realiza una autoprueba de encendido (POST) , el disco duro conectado a un puerto específico de la placa base podría tener asignado el mismo identificador, por ejemplo hd0, hd1, …
. Pero, ¿qué sucede si no se puede garantizar dicha coherencia? ¿Qué sucede si la constelación de discos duros conectados cambia de un inicio a otro? ¿Qué sucede si un disco duro se conecta a otra computadora?
Al ingresar ls
a la consola de rescate de GRUB (disponible después de cargar core.img
) o a la consola de GRUB (disponible después de cargar normal.mod
), se puede obtener una lista de todos los discos duros y particiones disponibles. Por ejemplo, ls (hd0,5)/
) mostrará números que se pueden asignar a los discos duros y particiones reales.
Como no se puede garantizar que el hd0"
estilo de numeración de los discos duros a través de números de dispositivo sea consistente, GNU GRUB puede usar un Identificador Único Universal (UUID) para identificar particiones (en realidad, instancias del sistema de archivos).
Los sistemas de archivos ext2, ext3, ext4 y xfs utilizan un UUID para identificar de forma única una instancia. El UUID se crea cuando se formatea una partición. El UUID es parte del sistema de archivos y se escribe en el superbloque . Todas las operaciones que no sean de formateo deben dejar el UUID inalterado. Es posible cambiar el UUID o duplicarlo utilizando dd para clonar una partición completa.
El archivo grub.cfg
se utiliza para configurar GRUB. Contiene comandos que se ejecutarán durante cada inicio. Si no existe un archivo válido grub.cfg
, GRUB mostrará un mensaje de aviso.
Un mínimo absoluto grub.cfg
podría contener solo los dos comandos siguientes (cf. initial ramdisk ):
linux (hd0,1)/kernel/vmlinuz-3.20.1-4 ro # use el nombre de archivo "vmlinuz-…" ubicado en el directorio /kernel en la primera partición del primer disco duro como imagen del kernel de Linuxinitrd (hd0,1)/boot/initrd.img-3.20.1-4 # use el archivo llamado "initrd.img–…" ubicado en el directorio /boot en la primera partición del primer disco duro como disco RAM inicial
Un aficionado grub.cfg
describirá el menú que se presentará, utilizará varios colores y puede especificar una imagen de fondo.
GRUB fue desarrollado inicialmente por Erich Boleyn como parte del trabajo sobre el arranque del sistema operativo GNU / Hurd , desarrollado por la Free Software Foundation . [13] En 1999, Gordon Matzigkeit y Yoshinori K. Okuji hicieron de GRUB un paquete de software oficial del Proyecto GNU y abrieron el proceso de desarrollo al público. [13] A partir de 2014 [actualizar], la mayoría de las distribuciones de Linux han adoptado GNU GRUB 2, así como otros sistemas como la PlayStation 4 de Sony . [14]
La versión 0 de GRUB (también conocida como "GRUB Legacy") ya no está en desarrollo y se está eliminando gradualmente. [15] Los desarrolladores de GNU GRUB han cambiado su enfoque a GRUB 2, [16] una reescritura completa con objetivos que incluyen hacer que GNU GRUB sea más limpio, más robusto, más portátil y más poderoso. GRUB 2 comenzó bajo el nombre PUPA . PUPA fue respaldado por la Agencia de Promoción de Tecnología de la Información (IPA) en Japón. PUPA se integró en el desarrollo de GRUB 2 alrededor de 2002, cuando la versión 0.9x de GRUB pasó a llamarse GRUB Legacy.
Algunos de los objetivos del proyecto GRUB 2 incluyen soporte para plataformas distintas a x86 , internacionalización y localización , caracteres no ASCII, módulos dinámicos, administración de memoria , un minilenguaje de scripting , migración de código específico de la plataforma (x86) a módulos específicos de la plataforma y un marco orientado a objetos. La versión 2.00 de GNU GRUB fue lanzada oficialmente el 26 de junio de 2012. [17] [18]
Tres de las distribuciones Linux más utilizadas utilizan GRUB 2 como su cargador de arranque principal. [19] [20] [21] Ubuntu lo adoptó como el cargador de arranque predeterminado en su versión 9.10 de octubre de 2009. [22] Fedora siguió su ejemplo con Fedora 16 lanzado en noviembre de 2011. [23] OpenSUSE adoptó GRUB 2 como el cargador de arranque predeterminado con su lanzamiento 12.2 de septiembre de 2012. [24] Solaris también adoptó GRUB 2 en la plataforma x86 en el lanzamiento de Solaris 11.1. [25] Buildroot también utiliza GNU GRUB para objetivos x86 y x86_64 .
A finales de 2015, se descubrió y solucionó rápidamente el problema de presionar la tecla de retroceso 28 veces para omitir la contraseña de inicio de sesión. [26] [27]
GNU GRUB es software libre , por lo que se han creado varias variantes. Algunas de ellas notables, que no se han fusionado con la línea principal de GRUB:
Las herramientas de configuración que utilizan varias distribuciones suelen incluir módulos para configurar GRUB. Por ejemplo, YaST2 en las distribuciones SUSE Linux y openSUSE y Anaconda en las distribuciones Fedora / RHEL . StartUp-Manager y GRUB Customizer son editores de configuración gráficos para distribuciones basadas en Debian. El desarrollo de StartUp-Manager se detuvo el 6 de mayo de 2011 después de que el desarrollador principal citara razones personales para no desarrollar activamente el programa. [37] GRUB Customizer también está disponible para distribuciones basadas en Arch.
Para GRUB 2 existen módulos de control de KDE. [38] [39]
GRLDR ICE es una pequeña herramienta para modificar la configuración predeterminada del archivo grldr para GRUB4DOS. [40]
Boot-Repair es una sencilla herramienta gráfica para solucionar problemas frecuentes relacionados con el arranque de GRUB y el cargador de arranque de Microsoft Windows . Esta aplicación está disponible bajo la licencia GNU GPL . Boot-Repair puede reparar GRUB en varias distribuciones de Linux, incluidas, entre otras, Debian, Ubuntu, Mint , Fedora, openSUSE y Arch Linux .
Grub2Win es un paquete de software de código abierto para Windows. Permite que GNU GRUB arranque desde un directorio de Windows. El programa de instalación instala GNU GRUB versión 2.12 en una partición NTFS. Luego se utiliza una aplicación GUI de Windows para personalizar el menú de arranque de GRUB, los temas, el orden de arranque UEFI, los scripts, etc. Todos los scripts y comandos de GNU GRUB son compatibles con los sistemas UEFI y heredados. Grub2Win puede configurar GRUB para el arranque múltiple de Windows, Ubuntu, openSuse, Fedora y muchas otras distribuciones de Linux. Está disponible de forma gratuita bajo la licencia GNU GPL en SourceForge.
La fortaleza de GRUB es la amplia gama de plataformas, sistemas de archivos y sistemas operativos compatibles, lo que lo convierte en la opción predeterminada para distribuciones y sistemas integrados.
Sin embargo, existen administradores de arranque orientados al usuario final que ofrecen una experiencia de usuario más amigable, un selector gráfico de SO y una configuración más sencilla:
Alternativas no gráficas:
Los wikis de distribución tienen muchas soluciones para problemas comunes y configuraciones personalizadas que pueden ayudarte:
{{cite web}}
: CS1 maint: bot: estado de URL original desconocido ( enlace ).