stringtranslate.com

GNU GRUB

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 .

Operación

GRUB2 en un disco duro particionado con MBRboot.img ; la etapa 1 ( ) se puede escribir alternativamente en uno de los sectores de arranque de la partición .
GRUB2 en un disco duro particionado con GPT , arranque en firmware BIOS o modo de compatibilidad UEFI (CSM)

Arranque

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 , 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.

Versión 0 (GRUB Legacy)

Menú de GRUB v1 (que se ejecuta como parte de la instalación de Ubuntu 8.04)

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.

Versión 2 (GRUB 2)

GRUB 2 – Particionado MBR vs. GPT y secuencia de arranque visualizada (sistemas que utilizan firmware BIOS).

Puesta en marcha en sistemas que utilizanBIOSFirmware

Puesta en marcha en sistemas que utilizanUEFIFirmware

Después del inicio

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:

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.

Identificación de particiones (solución alternativa de UUID)

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 lsa 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.cfgse 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.cfgpodrí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.cfgdescribirá el menú que se presentará, utilizará varios colores y puede especificar una imagen de fondo.

Historia

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 , la mayoría de las distribuciones de Linux han adoptado GNU GRUB 2, así como otros sistemas como la PlayStation 4 de Sony . [14]

Desarrollo

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]

Variantes

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:

Utilidades

Herramientas de configuración de GRUB

StartUp-Manager, un programa utilizado para configurar 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]

Utilidades de reparación de arranque

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 .

Personalizador de GRUB

Instalador para Windows

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.

Gestores de arranque alternativos

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:

Enlaces externos

Instrucciones y solución de problemas

Los wikis de distribución tienen muchas soluciones para problemas comunes y configuraciones personalizadas que pueden ayudarte:

Documentación

Artículos introductorios

Tecnicismos

Véase también

Notas

  1. ^ GPL-3.0 o posterior desde el 21 de julio de 2007. [4]
  2. ^ GPL-2.0 o posterior desde 1999 hasta el 2 de julio de 2007.

Referencias

  1. Daniel Kiper (20 de diciembre de 2023). «GRUB 2.12 lanzado» . Consultado el 20 de diciembre de 2023 .
  2. ^ "Candidato a versión 1 de GRUB 2.12". 10 de julio de 2023.
  3. ^ "Resumen del análisis de Ohloh – GNU GRUB". Ohloh . Archivado desde el original el 4 de febrero de 2009 . Consultado el 12 de mayo de 2010 .
  4. ^ "Migrar a la Licencia Pública General GNU versión 3". 21 de julio de 2007. Archivado desde el original el 27 de octubre de 2021 . Consultado el 27 de octubre de 2021 .
  5. ^ "Licencia GNU GRUB". Archivado desde el original el 11 de septiembre de 2013.
  6. ^ Definiciones de EnterpriseLinux.com Archivado el 3 de diciembre de 2010 en Wayback Machine Definición de GRand Unified Bootloader
  7. ^ Smith, Ryan (18 de diciembre de 2009). «Western Digital's Advanced Format: The 4K Sector Transition Begins» (El formato avanzado de Western Digital: comienza la transición al sector 4K). AnandTech . Archivado desde el original el 12 de marzo de 2012. Consultado el 10 de octubre de 2013 .
  8. ^ "mbldr (Master Boot LoaDeR)". mbldr.sourceforge.net . 2009. Archivado desde el original el 16 de marzo de 2013 . Consultado el 10 de octubre de 2013 .
  9. ^ ab "Arranque y gestores de arranque". SUSE. Archivado desde el original el 17 de septiembre de 2013. Consultado el 10 de octubre de 2013 .
  10. ^ "Manual de GNU GRUB 2.04". www.gnu.org . Archivado desde el original el 3 de abril de 2018 . Consultado el 10 de noviembre de 2020 .
  11. ^ Hoffman, Chris (22 de septiembre de 2014). "Cómo configurar los ajustes del cargador de arranque GRUB2". HowToGeek.com . Archivado desde el original el 28 de abril de 2015. Consultado el 25 de abril de 2015 .
  12. ^ "Documentación de GNU GRUB". Archivado desde el original el 18 de abril de 2014 . Consultado el 16 de abril de 2014 .
  13. ^ ab Manual de GRUB – 1.2 Historial de Grub Archivado el 16 de abril de 2014 en Wayback Machine . Gnu.org (23 de junio de 2012). Consultado el 1 de diciembre de 2012.
  14. ^ "PS4 ejecuta Orbis OS, una versión modificada de FreeBSD similar a Linux". extremetech.com . 24 de junio de 2013. Archivado desde el original el 18 de noviembre de 2020 . Consultado el 23 de octubre de 2013 .
  15. ^ GNU GRUB – GRUB Legacy Archivado el 20 de abril de 2014 en Wayback Machine . Gnu.org. Recuperado el 1 de diciembre de 2012.
  16. ^ "GNU GRUB – GRUB 2". Archivado desde el original el 7 de junio de 2008. Consultado el 18 de abril de 2014 .{{cite web}}: CS1 maint: bot: estado de URL original desconocido ( enlace ).
  17. ^ Serbinenko, Vladimir (28 de junio de 2012). «GRUB 2.00 lanzado». grub-devel (Lista de correo). Archivado desde el original el 13 de enero de 2013 . Consultado el 1 de diciembre de 2012 .
  18. ^ Larabel, Michael. "GRUB 2.00 Boot-Loader se lanzó oficialmente". Phoronix.com . Archivado desde el original el 13 de septiembre de 2016. Consultado el 28 de junio de 2012 .
  19. ^ Haddon, Tom (26 de enero de 2012). "Introducción a Ubuntu". WebJunction. Archivado desde el original el 28 de octubre de 2012. Consultado el 21 de septiembre de 2012 .
  20. ^ Janssen, Cory. "¿Qué es Red Hat Enterprise Linux (RHEL)?". Technopedia. Archivado desde el original el 3 de octubre de 2012. Consultado el 21 de septiembre de 2012 .
  21. ^ Varghese, Sam (20 de septiembre de 2012). «El jefe de SUSE enumera los avances logrados desde la privatización». Archivado desde el original el 22 de septiembre de 2012. Consultado el 21 de septiembre de 2012 .
  22. ^ "Versión GRUB 9.10 Karmic". Distrowatch.com. Archivado desde el original el 9 de mayo de 2012. Consultado el 8 de julio de 2012 .
  23. ^ GRUB 2 Archivado el 5 de agosto de 2012 en Wayback Machine . FedoraProject. Consultado el 1 de diciembre de 2012.
  24. ^ openSUSE:Próximas funciones – openSUSE Archivado el 20 de septiembre de 2012 en Wayback Machine . En.opensuse.org. Consultado el 1 de diciembre de 2012.
  25. ^ Solaris 11.1 Archivado el 19 de junio de 2018 en Wayback Machine . Consultado el 19 de marzo de 2015.
  26. ^ Khandelwal, Swati (16 de diciembre de 2015). "Puedes hackear una computadora Linux simplemente presionando 'Retroceso' 28 veces". thehackernews.com . Archivado desde el original el 30 de abril de 2017. Consultado el 13 de marzo de 2017 .
  27. ^ Marco y Hector; Ripoll, Ismael (diciembre de 2015). «Back to 28: Grub2 Authentication 0-Day». Archivado desde el original el 17 de mayo de 2017. Consultado el 13 de marzo de 2017 .
  28. ^ x86: Modificación del comportamiento de arranque mediante la edición del menú GRUB en el momento del arranque Archivado el 19 de julio de 2011 en Wayback Machine , Modificación del comportamiento de arranque de Solaris en sistemas basados ​​en x86 (mapa de tareas) – Guía de administración del sistema: administración básica
  29. ^ x86: Implementaciones de GRUB compatibles Archivado el 21 de octubre de 2009 en Wayback Machine , (Guía de administración del sistema: administración básica) – Sun Microsystems
  30. ^ Peng, Tao. «Grub4ext4». Archivado desde el original el 31 de diciembre de 2016. Consultado el 13 de junio de 2017 .
  31. ^ 2.3 ¿Por qué Syllable tiene su propia versión de GRUB? Archivado el 7 de enero de 2011 en Wayback Machine , Documentación de Syllable
  32. ^ "Proyecto TrustedGRUB". sourceforge.net . 5 de junio de 2013. Archivado desde el original el 29 de noviembre de 2014 . Consultado el 18 de noviembre de 2014 .
  33. ^ Conjunto de pruebas de implementación del BIOS Archivado el 19 de octubre de 2016 en Wayback Machine , sitio web oficial de BITS
  34. ^ "grub4dos". Sitio de Google . Archivado desde el original el 7 de abril de 2019. Consultado el 7 de abril de 2019 .
  35. ^ "Introducción a GRUB para DOS". grub4dos.sourceforge.net . 2007. Archivado desde el original el 7 de abril de 2019 . Consultado el 7 de abril de 2019 .
  36. ^ grub4dos en GitHub
  37. ^ "StartUp-Manager ha muerto: StartUp-Manager". launchpad.net . 6 de mayo de 2011. Archivado desde el original el 1 de agosto de 2020 . Consultado el 9 de abril de 2017 .
  38. ^ Editor del cargador de arranque GRUB2 Archivado el 7 de septiembre de 2015 en Wayback Machine . Kde-apps.org (18 de junio de 2012). Consultado el 1 de diciembre de 2012.
  39. ^ "Grub2 KCM". KDE-Apps.org . Archivado desde el original el 6 de septiembre de 2015. Consultado el 27 de enero de 2011 .
  40. ^ "Tutorial de Grub4DOS". Narod.ru . Archivado desde el original el 3 de mayo de 2015. Consultado el 25 de abril de 2015 .