102.2 Lección 1
Certificación: |
LPIC-1 |
---|---|
Versión: |
5.0 |
Tema: |
102 Instalación de Linux y Administración de Paquetes |
Objetivo: |
102.2 Instalar un administrador de arranque |
Lección: |
1 de 1 |
Introducción
Cuando una computadora se enciende, el primer software que se ejecuta es el cargador de arranque. Este es un código cuyo único propósito es cargar el núcleo del sistema operativo y entregarle el control. El núcleo cargará los controladores necesarios, inicializará el hardware y luego cargará el resto del sistema operativo.
GRUB es el gestor de arranque utilizado en la mayoría de las distribuciones de Linux. Puede cargar el núcleo de Linux u otros sistemas operativos, como Windows, y puede manejar múltiples imágenes y parámetros del núcleo del sistema operativo como entradas de menú separadas. La selección del núcleo en el arranque se realiza a través de una interfaz controlada por teclado, y hay una interfaz de línea de comandos para editar las opciones y parámetros de arranque.
La mayoría de las distribuciones de Linux instalan y configuran GRUB (en realidad, GRUB 2) automáticamente, por lo que un usuario normal no necesita pensar en eso. Sin embargo, como administrador del sistema, es vital saber cómo controlar el proceso de arranque para poder recuperar el sistema de una falla de arranque después de una actualización fallida del núcleo, por ejemplo.
En esta lección aprenderá cómo instalar, configurar e interactuar con GRUB.
GRUB Legacy vs. GRUB 2
La versión original de GRUB (Grand Unified Bootloader), ahora conocida como GRUB Legacy se desarrolló en 1995 como parte del proyecto GNU Hurd, y más tarde se adoptó como el gestor de arranque predeterminado de muchas distribuciones de Linux, reemplazando alternativas anteriores como LILO.
GRUB 2 es una reescritura completa de GRUB con el objetivo de ser más limpio, más seguro, más robusto y más potente. Entre las muchas ventajas sobre GRUB Legacy se encuentran un archivo de configuración mucho más flexible (con muchos más comandos y sentencias condicionales, similar a un lenguaje de script), un diseño más modular y una mejor localización/internacionalización.
También hay soporte para temas y menús gráficos de arranque con pantallas de presentación, la capacidad de arrancar archivos ISO de LiveCD directamente desde el disco duro, mejor soporte para arquitecturas que no son x86, soporte universal para UUID (lo que facilita la identificación de discos y particiones) y mucho más.
GRUB Legacy ya no está en desarrollo activo (la última versión fue 0.97, en 2005), y hoy la mayoría de las principales distribuciones de Linux instalan GRUB 2 como el gestor de arranque predeterminado. Sin embargo, aún puede encontrar sistemas que utilicen GRUB Legacy, por lo que es importante saber cómo usarlo y dónde es diferente de GRUB 2.
¿Dónde se ubica el cargador de arranque?
Históricamente, los discos duros en los sistemas compatibles con PC de IBM se particionaron utilizando el esquema de partición MBR, creado en 1982 para IBM PC-DOS (MS-DOS) 2.0.
En este esquema, el primer sector de 512 bytes del disco se llama Master Boot Record y contiene una tabla que describe las particiones en el disco (la tabla de particiones) y también el código de arranque, llamado cargador de arranque.
Cuando se enciende la computadora, este código de gestor de arranque mínimo (debido a restricciones de tamaño) se carga, ejecuta y pasa el control a un cargador de arranque secundario en el disco, generalmente ubicado en un espacio de 32 KB entre el MBR y la primera partición, que cargará los sistemas operativos.
En un disco con particiones MBR, el código de arranque para GRUB está instalado en el MBR. Esto carga y pasa el control a una imagen “núcleo” instalada entre el MBR y la primera partición. Desde este punto, GRUB es capaz de cargar el resto de los recursos necesarios (definiciones de menú, archivos de configuración y módulos adicionales) desde el disco.
Sin embargo, MBR tiene limitaciones en el número de particiones (originalmente un máximo de 4 particiones primarias, luego un máximo de 3 particiones primarias con 1 partición extendida subdividida en un número de particiones lógicas) y tamaños de disco máximos de 2 TB. Para superar estas limitaciones, se creó un nuevo esquema de particionamiento llamado GPT (GUID Partition Table), parte del estándar UEFI (Unified Extensible Firmware Interface).
Los discos con particiones GPT se pueden usar con computadoras con el BIOS de PC tradicional o con el firmware UEFI. En máquinas con un BIOS, la segunda parte de GRUB se almacena en una partición especial de arranque del BIOS.
En los sistemas con firmware UEFI, GRUB se carga mediante el firmware desde los archivos grubia32.efi
(para sistemas de 32 bits) o grubx64.efi
(para sistemas de 64 bits) desde una partición llamada ESP (EFI System Partition ).
La partición /boot
En Linux, los archivos necesarios para el proceso de arranque generalmente se almacenan en una partición de arranque, montados en el sistema de archivos raíz y coloquialmente denominados /boot
.
No se necesita una partición de arranque en los sistemas actuales, ya que los cargadores de arranque como GRUB generalmente pueden montar el sistema de archivos raíz y buscar los archivos necesarios dentro de un directorio /boot
, pero es una buena práctica ya que separa los archivos necesarios para proceso de arranque desde el resto del sistema de archivos.
Esta partición suele ser la primera en el disco. Esto se debe a que el BIOS original de la PC de IBM diseñó los discos usando Cilindros, Cabezas y Sectores (Cylinders, Heads y Sectors (CHS)), con un máximo de 1024 cilindros, 256 cabezas y 63 sectores, lo que resulta en un tamaño de disco máximo de 528 MB (504 MB sobre MS-DOS) . Esto significa que nada más allá de esta marca no sería accesible, a menos que se utilizara un esquema de direccionamiento de disco diferente (como LBA, Logical Block Addressing).
Entonces, para una máxima compatibilidad, la partición /boot
generalmente se encuentra al comienzo del disco y termina antes del cilindro 1024 (528 MB), asegurando que la máquina siempre pueda cargar el kernel. El tamaño recomendado para esta partición en una máquina actual es de 300 MB.
Otras razones para una partición /boot
separada son el cifrado y la compresión, ya que algunos métodos pueden no ser compatibles con GRUB 2 todavía, o si necesita tener la partición raíz del sistema (/
) formateada utilizando un sistema de archivos no compatible.
Contenido de la partición de arranque
El contenido de la partición /boot
puede variar con la arquitectura del sistema o el cargador de arranque en uso, pero en un sistema basado en x86, generalmente encontrará los archivos a continuación. La mayoría de estos se nombran con un sufijo -VERSION
, donde -VERSION
es la versión del núcleo de Linux correspondiente. Entonces, por ejemplo, un archivo de configuración para la versión del núcleo de Linux 4.15.0-65-generic
se llamaría config-4.15.0-65-generic
.
- Archivo de configuración
-
Este archivo, generalmente llamado
config-VERSION
(vea el ejemplo anterior), almacena los parámetros de configuración para el núcleo de Linux. Este archivo se genera automáticamente cuando se compila o instala un nuevo núcleo y el usuario no debe modificarlo directamente. - Mapa del sistema
-
Este archivo es una tabla de búsqueda que combina nombres de símbolos (como variables o funciones) con su posición correspondiente en la memoria. Esto es útil al depurar un tipo de falla del sistema conocida como kernel panic, ya que permite al usuario saber qué variable o función se estaba llamando cuando ocurrió la falla. Al igual que el archivo de configuración, el nombre suele ser
System.map-VERSION
(por ejemplo,System.map-4.15.0-65-generic
). - Kernel de Linux
-
Este es el núcleo del sistema operativo propiamente dicho. El nombre suele ser
vmlinux-VERSION
(por ejemplo,vmlinux-4.15.0-65-generic
). También puede encontrar el nombrevmlinuz
en lugar devmlinux
, laz
al final significa que el archivo ha sido comprimido. - Disco RAM inicial
-
Esto generalmente se llama
initrd.img-VERSION
y contiene un sistema de archivos raíz mínimo cargado en un disco RAM, que contiene utilidades y módulos del núcleo necesarios para que el núcleo pueda montar el sistema de archivos raíz real. - Archivos relacionados con el cargador de arranque
-
En los sistemas con GRUB instalado, estos generalmente se encuentran en
/boot/grub
e incluyen el archivo de configuración GRUB (/boot/grub/grub.cfg
para GRUB 2 o/boot/grub/menu.lst
en caso de GRUB Legacy), módulos (en/boot/grub/i386-pc
), archivos de traducción (en/boot/grub/locale
) y fuentes (en/boot/grub/fonts
).
GRUB 2
Instalando GRUB 2
GRUB 2 se puede instalar utilizando la utilidad grub-install
. Si tiene un sistema que no arranca, necesitará arrancar usando un Live CD o un disco de rescate, averiguar cuál es la partición de arranque de su sistema, montarlo y luego ejecutar la utilidad.
Note
|
Los siguientes comandos suponen que ha iniciado sesión como root. Si no, primero ejecute |
El primer disco de un sistema suele ser el boot device y es posible que necesite saber si hay una boot partition en el disco. Esto se puede hacer con la utilidad fdisk
. Para enumerar todas las particiones en el primer disco de su máquina, use:
# fdisk -l /dev/sda Disk /dev/sda: 111,8 GiB, 120034123776 bytes, 234441648 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x97f8fef5 Device Boot Start End Sectors Size Id Type /dev/sda1 * 2048 2000895 1998848 976M 83 Linux /dev/sda2 2002942 234440703 232437762 110,9G 5 Extended /dev/sda5 2002944 18008063 16005120 7,6G 82 Linux swap / Solaris /dev/sda6 18010112 234440703 216430592 103,2G 83 Linux
La partición de arranque se identifica con el *
debajo de la columna de arranque. En el ejemplo anterior, es /dev/sda1
.
Ahora, cree un directorio temporal en /mnt
y monte la partición en él:
# mkdir /mnt/tmp # mount /dev/sda1 /mnt/tmp
Luego ejecute grub-install
, apuntándolo al dispositivo de arranque (no la partición) y al directorio donde está montada la partición de arranque. Si su sistema tiene una partición de arranque dedicada, el comando es:
# grub-install --boot-directory=/mnt/tmp /dev/sda
Si está instalando en un sistema que no tiene una partición de arranque, sino solo un directorio /boot
en el sistema de archivos raíz, utilice grub-install
. Entonces, el comando es:
# grub-install --boot-directory=/boot /dev/sda
Configurando GRUB 2
El archivo de configuración predeterminado para GRUB 2 es /boot/grub/grub.cfg
. Este archivo se genera automáticamente y no se recomienda la edición manual. Para realizar cambios en la configuración de GRUB, debe editar el archivo /etc/default/grub
y luego ejecutar la utilidad update-grub
para generar un archivo compatible.
Note
|
|
Hay algunas opciones en el archivo /etc/default/grub
que controlan el comportamiento de GRUB 2, como el kernel predeterminado para arrancar, el tiempo de espera, los parámetros adicionales de la línea de comandos, etc. Los más importantes son:
GRUB_DEFAULT=
-
La entrada de menú predeterminada para arrancar. Puede ser un valor numérico (como
0
,1
, etc.), el nombre de una entrada de menú (comodebian
) osaved
, que se usa junto conGRUB_SAVEDEFAULT=
, explicado a continuación. Tenga en cuenta que las entradas del menú comienzan en cero, por lo que la primera entrada del menú es0
, la segunda es1
, etc. GRUB_SAVEDEFAULT=
-
Si esta opción se establece en
true
yGRUB_DEFAULT=
se establece ensaved
, entonces la opción de inicio predeterminada siempre será la última seleccionada en el menú de inicio. GRUB_TIMEOUT=
-
El tiempo de espera, en segundos, antes de que se seleccione la entrada de menú predeterminada. Si se establece en
0
, el sistema iniciará la entrada predeterminada sin mostrar un menú. Si se establece en-1
, el sistema esperará hasta que el usuario seleccione una opción, sin importar cuánto tiempo tarde. GRUB_CMDLINE_LINUX=
-
Esto enumera las opciones de línea de comando que se agregarán a las entradas para el kernel de Linux.
GRUB_CMDLINE_LINUX_DEFAULT=
-
Por defecto, se generan dos entradas de menú para cada núcleo de Linux, una con las opciones predeterminadas y una entrada para la recuperación. Con esta opción, puede agregar parámetros adicionales que se agregarán solo a la entrada predeterminada.
GRUB_ENABLE_CRYPTODISK=
-
Si se establece en
y
, los comandos comogrub-mkconfig
,update-grub
ygrub-install
buscarán discos cifrados y agregarán los comandos necesarios para acceder a ellos durante el arranque. Esto desactiva el arranque automático (GRUB_TIMEOUT=
con cualquier valor que no sea-1
) porque se necesita una contraseña para descifrar los discos antes de que se pueda acceder a ellos.
Administrar entradas de menú
Cuando se ejecuta update-grub
, GRUB 2 buscará núcleos y sistemas operativos en la máquina y generarán las entradas de menú correspondientes en el archivo /boot/grub/grub.cfg
. Se pueden agregar nuevas entradas manualmente a los archivos de script dentro del directorio /etc/grub.d
.
Estos archivos deben ser ejecutables y son procesados en orden numérico por update-grub
. Por lo tanto, 05_debian_theme
se procesa antes que 10_linux
y así sucesivamente. Las entradas de menú personalizadas generalmente se agregan al archivo 40_custom
.
La sintaxis básica para una entrada de menú se muestra a continuación:
menuentry "Default OS" { set root=(hd0,1) linux /vmlinuz root=/dev/sda1 ro quiet splash initrd /initrd.img }
La primera línea siempre comienza con menuentry
y termina con {
. El texto entre comillas se mostrará como la etiqueta de entrada en el menú de arranque de GRUB 2.
El parámetro set root
define el disco y la partición donde se encuentra el sistema de archivos raíz para el sistema operativo. Tenga en cuenta que en GRUB 2 los discos están numerados desde cero, por lo que hd0
es el primer disco (sda
en Linux), hd1
el segundo, y así sucesivamente. Las particiones, sin embargo, están numeradas a partir de uno. En el ejemplo anterior, el sistema de archivos raíz se encuentra en el primer disco (hd0
), la primera partición (,1
) o sda1
.
En lugar de especificar directamente el dispositivo y la partición, también puede hacer que GRUB 2 busque un sistema de archivos con una etiqueta específica o UUID (Universally Unique Identifier). Para eso, utilice el parámetro search --set=root
seguido del parámetro --label
y la etiqueta del sistema de archivos para buscar, o --fs-uuid
seguido del UUID del sistema de archivos.
Puede encontrar el UUID de un sistema de archivos con el siguiente comando:
$ ls -l /dev/disk/by-uuid/ total 0 lrwxrwxrwx 1 root root 10 nov 4 08:40 3e0b34e2-949c-43f2-90b0-25454ac1595d -> ../../sda5 lrwxrwxrwx 1 root root 10 nov 4 08:40 428e35ee-5ad5-4dcb-adca-539aba6c2d84 -> ../../sda6 lrwxrwxrwx 1 root root 10 nov 5 19:10 56C11DCC5D2E1334 -> ../../sdb1 lrwxrwxrwx 1 root root 10 nov 4 08:40 ae71b214-0aec-48e8-80b2-090b6986b625 -> ../../sda1
En el ejemplo anterior, el UUID para /dev/sda1
es ae71b214-0aec-48e8-80b2-090b6986b625
. Si desea establecerlo como el dispositivo raíz para GRUB 2, el comando sería search --set=root --fs-uuid ae71b214-0aec-48e8-80b2-090b6986b625
.
Cuando se usa el comando search
, es común agregar el parámetro --no-floppy
para que GRUB no pierda el tiempo buscando en disquetes.
La línea linux
indica dónde se encuentra el núcleo del sistema operativo (en este caso, el archivo vmlinuz
en la raíz del sistema de archivos). Después de eso, puede pasar los parámetros de la línea de comandos al núcleo del sistema operativo.
En el ejemplo anterior, especificamos la partición raíz (root=/dev/sda1
) y pasamos tres parámetros del kernel: la partición raíz debe montarse como solo lectura (ro
), la mayoría de los mensajes de registro deben estar deshabilitados (quiet
) y se debe mostrar una pantalla de bienvenida (splash
).
La línea initrd
indica dónde se encuentra el disco RAM inicial. En el ejemplo anterior, el archivo es initrd.img
, ubicado en la raíz del sistema de archivos.
Note
|
La mayoría de las distribuciones de Linux no colocan el núcleo y el initrd en el directorio raíz del sistema de archivos. En cambio, estos son enlaces a los archivos reales dentro del directorio o partición |
La última línea de una entrada de menú debe contener solo el carácter }
.
Interactuando con GRUB 2
Al iniciar un sistema con GRUB 2, verá un menú de opciones. Use las teclas de flecha para seleccionar una opción y Enter para confirmar y arrancar la entrada seleccionada.
Tip
|
Si ve solo una cuenta regresiva, pero no un menú, presione Shift para que aparezca el menú. |
Para editar una opción, selecciónela con las teclas de flecha y presione E. Esto mostrará una ventana del editor con el contenido del menuentry
asociado con esa opción, como se define en /boot/grub/grub.cfg
.
Después de editar una opción, escriba Ctrl+X o F10 para arrancar, o Esc para volver al menú.
Para ingresar al shell de GRUB 2, presione C en la pantalla del menú (o Ctrl+C) en la ventana de edición). Verá un símbolo del sistema como este: grub>
Escriba help
para ver una lista de todos los comandos disponibles, o presione Esc para salir del shell y volver a la pantalla del menú.
Note
|
Recuerde que este menú no aparecerá si |
Arranque desde la consola del GRUB 2
Puede usar el shell GRUB 2 para arrancar el sistema en caso de que una configuración incorrecta en una entrada del menú haga que falle.
Lo primero que debe hacer es averiguar dónde está la partición de arranque. Puede hacerlo con el comando ls
, que le mostrará una lista de las particiones y discos que GRUB 2 ha encontrado.
grub> ls (proc) (hd0) (hd0,msdos1)
En el ejemplo anterior, las cosas son fáciles. Solo hay un disco (hd0)
con solo una partición: (hd0, msdos1)
.
Los discos y particiones enumerados serán diferentes en su sistema. En nuestro ejemplo, la primera partición de hd0
se llama msdos1
porque el disco se particionó utilizando el esquema de partición MBR. Si se particionara usando GPT, el nombre sería gpt1
.
Para arrancar Linux, necesitamos un kernel y un disco RAM inicial (initrd). Veamos el contenido de (hd0, msdos1)
:
grub> ls (hd0,msdos1)/ lost+found/ swapfile etc/ media/ bin/ boot/ dev/ home/ lib/ lib64/ mnt/ opt/ proc/ root/ run/ sbin/ srv/ sys/ tmp/ usr/ var/ initrd.img initrd.img.old vmlinuz cdrom/
Puede agregar el parámetro -l
a ls
para obtener una lista larga, similar a lo que obtendría en un terminal Linux. Use Tab para autocompletar los nombres de disco, partición y archivo.
Tenga en cuenta que tenemos imágenes de kernel (vmlinuz
) e initrd (initrd.img
) directamente en el directorio raíz. Si no, podríamos verificar el contenido de /boot
con list (hd0,msdos1)/boot/
.
Ahora, configure la partición de arranque:
grub> set root=(hd0,msdos1)
Cargue el kernel de Linux con el comando linux
, seguido de la ruta al kernel y la opción root=
para decirle al kernel dónde se encuentra el sistema de archivos raíz para el sistema operativo.
grub> linux /vmlinuz root=/dev/sda1
Cargue el disco RAM inicial con initrd
, seguido de la ruta completa al archivo initrd.img
:
grub> initrd /initrd.img
Ahora, inicie el sistema con boot
.
Arranque desde la consola de rescate
En caso de una falla de arranque, GRUB 2 puede cargar un shell de rescate, una versión simplificada del shell que mencionamos anteriormente. Lo reconocerá mediante el símbolo del sistema, que se muestra como grub rescue>
.
El proceso para iniciar un sistema desde esta consola es casi el mismo que se muestra anteriormente. Sin embargo, deberá cargar algunos módulos GRUB 2 para que todo funcione.
Después de descubrir qué partición es la partición de arranque (con ls
, como se muestra antes), use el comando set prefix=
, seguido de la ruta completa al directorio que contiene los archivos GRUB 2. Usualmente /boot/grub
. En nuestro ejemplo:
grub rescue> set prefix=(hd0,msdos1)/boot/grub
Ahora, cargue los módulos normal
y linux
con el comando insmod
:
grub rescue> insmod normal grub rescue> insmod linux
Luego, configure la partición de arranque con set root=
como se indicó anteriormente, cargue el kernel de Linux (con linux
), el disco RAM inicial (initrd
) e intente arrancar con boot
.
GRUB Legacy
Instalación de GRUB Legacy desde un sistema en ejecución
Para instalar GRUB Legacy en un disco desde un sistema en ejecución, utilizaremos la utilidad grub-install
. El comando básico es grub-install DEVICE
donde DEVICE
es el disco donde desea instalar GRUB Legacy. Un ejemplo sería /dev/sda
.
# grub-install /dev/sda
Tenga en cuenta que debe especificar el device donde se instalará GRUB Legacy, como /dev/sda/
, no la partición como en /dev/sda1
.
Por defecto, GRUB copiará los archivos necesarios al directorio /boot
en el dispositivo especificado. Si desea copiarlos a otro directorio, use el parámetro --boot-directory=
, seguido de la ruta completa a donde se deben copiar los archivos.
Instalación de GRUB Legacy desde un GRUB Shell
Si no puede iniciar el sistema por algún motivo y necesita reinstalar GRUB Legacy, puede hacerlo desde la consola de GRUB en un disco de inicio de GRUB Legacy.
Desde el shell de GRUB (escriba c
en el menú de arranque para acceder al indicador grub>
), el primer paso es configurar el dispositivo de arranque, que contiene el directorio /boot
. Por ejemplo, si este directorio está en la primera partición del primer disco, el comando sería:
grub> root (hd0,0)
Si no sabe qué dispositivo contiene el directorio /boot
, puede pedirle a GRUB que lo busque con el comando find
, como se muestra a continuación:
grub> find /boot/grub/stage1 (hd0,0)
Luego, configure la partición de arranque como se indicó anteriormente y use el comando setup
para instalar GRUB Legacy en el MBR y copie los archivos necesarios en el disco:
grub> setup (hd0)
Cuando termine, reinicie el sistema y debería arrancar normalmente.
Configuración de entradas y ajustes del menú GRUB Legacy
Las entradas y configuraciones de menú de GRUB Legacy se almacenan en el archivo /boot/grub/menu.lst
. Este es un archivo de texto simple con una lista de comandos y parámetros, que puede editarse directamente con su editor de texto favorito.
Las líneas que comienzan con #
se consideran comentarios y las líneas en blanco se ignoran.
Una entrada de menú tiene al menos tres comandos. El primero, title
, establece el título del sistema operativo en la pantalla del menú. El segundo, root
, le dice a GRUB legado desde qué dispositivo o partición arrancar.
La tercera entrada, kernel
, especifica la ruta completa a la imagen del núcleo del sistema operativo que debe cargarse cuando se selecciona la entrada correspondiente. Tenga en cuenta que esta ruta es relativa al dispositivo especificado en el parámetro root
.
A continuación, un ejemplo simple:
# This line is a comment title My Linux Distribution root (hd0,0) kernel /vmlinuz root=/dev/hda1
A diferencia de GRUB 2, en GRUB Legacy ambos discos y particiones están numerados desde cero. Entonces, el comando root (hd0,0)
establecerá la partición de arranque como la primera partición (0
) del primer disco (hd0
).
Puede omitir la instrucción root
si especifica el dispositivo de arranque antes de la ruta en el comando kernel
. La sintaxis es la misma, entonces:
kernel (hd0,0)/vmlinuz root=dev/hda1
es equivalente a:
root (hd0,0) kernel /vmlinuz root=/dev/hda1
Ambos cargarán el archivo vmlinuz
desde el directorio raíz (/
) de la primera partición del primer disco (hd0,0
).
El parámetro root=/dev/hda1
después del comando kernel
le dice al kernel de Linux qué partición debe usarse como sistema de archivos raíz. Este es un parámetro del núcleo de Linux, no un comando GRUB legacy.
Note
|
Para obtener más información sobre los parámetros del núcleo de Linux, visite https://www.kernel.org/doc/html/v4.14/admin-guide/kernel-parameters.html. |
Es posible que deba especificar la ubicación de la imagen de disco RAM inicial para el sistema operativo con el parámetro initrd
. La ruta completa al archivo puede especificarse como en el parámetro kernel
, y también puede especificar un dispositivo o partición antes de la ruta, por ejemplo:
# This line is a comment title My Linux Distribution root (hd0,0) kernel /vmlinuz root=/dev/hda1 initrd /initrd.img
GRUB Legacy tiene un diseño modular, donde los módulos (generalmente almacenados como archivos .mod
en /boot/grub/i386-pc
) se pueden cargar para agregar funciones adicionales, como soporte para hardware inusual, sistemas de archivos o nuevos algoritmos de compresión.
Los módulos se cargan utilizando el comando module
, seguido de la ruta completa al archivo .mod
correspondiente. Tenga en cuenta que, al igual que los núcleos y las imágenes initrd, esta ruta es relativa al dispositivo especificado en el comando root
.
El siguiente ejemplo cargará el módulo 915resolution
, necesario para establecer correctamente la resolución de framebuffer en sistemas con conjuntos de chips de video Intel de las series 800 o 900.
module /boot/grub/i386-pc/915resolution.mod
Carga en cadena de otros sistemas operativos
GRUB Legacy se puede usar para cargar sistemas operativos no compatibles, como Windows, mediante un proceso llamado chainloading. GRUB Legacy se carga primero, y cuando se selecciona la opción correspondiente, se carga el gestor de arranque para el sistema deseado.
Una entrada típica para cargar Windows en cadena se vería como la siguiente:
# Load Windows title Windows XP root (hd0,1) makeactive chainload +1 boot
Pasemos por cada parámetro. Como antes, root (hd0,1)
especifica el dispositivo y la partición donde se encuentra el cargador de arranque para el sistema operativo que deseamos cargar. En este ejemplo, la segunda partición del primer disco.
makeactive
-
establecerá una bandera que indica que esta es una partición activa. Esto solo funciona en particiones primarias de DOS.
chainload +1
-
le dice a GRUB que cargue el primer sector de la partición de arranque. Aquí es donde generalmente se encuentran los gestores de arranque.
boot
-
ejecutará el gestor de arranque y cargará el sistema operativo correspondiente.
Ejercicios Guiados
-
¿Cuál es la ubicación predeterminada para el archivo de configuración GRUB 2?
-
¿Cuáles son los pasos necesarios para cambiar la configuración de GRUB 2?
-
¿En qué archivo se deben agregar entradas de menú personalizadas de GRUB 2?
-
¿Dónde se almacenan las entradas de menú para GRUB Legacy?
-
Desde un menú GRUB 2 o GRUB Legacy, ¿cómo puede ingresar a la consola de GRUB?
Ejercicios Exploratorios
-
Imagine un usuario que configura GRUB Legacy para arrancar desde la segunda partición del primer disco. Escribe la siguiente entrada de menú personalizada:
title My Linux Distro root (hd0,2) kernel /vmlinuz root=/dev/hda1 initrd /initrd.img
Sin embargo, el sistema no se iniciará. ¿Qué está mal?
-
Imagine que tiene un disco identificado como
/dev/sda
con múltiples particiones. ¿Qué comando se puede usar para averiguar cuál es la partición de arranque en un sistema? -
¿Qué comando se puede usar para averiguar el UUID de una partición?
-
Considere la siguiente entrada para GRUB 2
menuentry "Default OS" { set root=(hd0,1) linux /vmlinuz root=/dev/sda1 ro quiet splash initrd /initrd.img }
Cámbiela para que el sistema arranque desde un disco con el UUID
5dda0af3-c995-481a-a6f3-46dcd3b6998d
-
¿Cómo puede configurar GRUB 2 para que espere 10 segundos antes de iniciar la entrada de menú predeterminada?
-
Desde una consola GRUB Legacy, ¿cuáles son los comandos para instalar GRUB en la primera partición del segundo disco?
Resumen
En esta lección aprendimos
-
¿Qué es un gestor de arranque?.
-
Las diferencias entre GRUB Legacy y GRUB 2.
-
¿Qué es una partición de arranque y cuáles son sus contenidos?
-
¿Cómo instalar GRUB Legacy y GRUB 2?
-
¿Cómo configurar GRUB Legacy y GRUB 2?
-
¿Cómo agregar entradas de menú personalizadas a GRUB Legacy y GRUB 2?
-
¿Cómo interactuar con la pantalla del menú y la consola de GRUB Legacy y GRUB 2?
-
¿Cómo arrancar un sistema desde un shell GRUB Legacy o GRUB 2 o una consola de rescate?
Los siguientes comandos se discutieron en esta lección:
-
grub-install
-
update-grub
-
grub-mkconfig
Respuestas a los ejercicios guiados
-
¿Cuál es la ubicación predeterminada para el archivo de configuración GRUB 2?
/boot/grub/grub.cfg
-
¿Cuáles son los pasos necesarios para cambiar la configuración de GRUB 2?
Realice los cambios en el archivo
/etc/default/grub
, luego actualice la configuración conupdate-grub
. -
¿En qué archivo se deben agregar entradas de menú personalizadas de GRUB 2?
/etc/grub.d/40_custom
-
¿Dónde se almacenan las entradas de menú para GRUB Legacy?
/boot/grub/menu.lst
-
Desde un menú GRUB 2 o GRUB Legacy, ¿cómo puede ingresar a la consola de GRUB?
Presione
c
en la pantalla del menú.
Respuestas a ejercicios exploratorios
-
Imagine un usuario que configura GRUB Legado para arrancar desde la segunda partición del primer disco. Escribe la siguiente entrada de menú personalizada:
title My Linux Distro root (hd0,2) kernel /vmlinuz root=/dev/hda1 initrd /initrd.img
Sin embargo, el sistema no se iniciará. ¿Qué está mal?
La partición de arranque está mal. Recuerde que, a diferencia de GRUB 2, GRUB Legacy cuenta las particiones a partir de cero (zero). Entonces, el comando correcto para la segunda partición del primer disco debe ser
root (hd0,1)
. -
Imagine que tiene un disco identificado como
/dev/sda
con múltiples particiones. ¿Qué comando se puede usar para averiguar cuál es la partición de arranque en un sistema?Use
fdisk -l /dev/sda
. La partición de arranque se marcará con un asterisco (*
) en la lista. -
¿Qué comando se puede usar para averiguar el UUID de una partición?
Use
ls -la /dev/disk/by-uuid/
y busque el UUID que apunta a la partición. -
Considere la siguiente entrada para GRUB 2
menuentry "Default OS" { set root=(hd0,1) linux /vmlinuz root=/dev/sda1 ro quiet splash initrd /initrd.img }
Cámbiela para que el sistema arranque desde un disco con el UUID
5dda0af3-c995-481a-a6f3-46dcd3b6998d
Deberá cambiar la instrucción
set root
. En lugar de especificar un disco y una partición, configure el grub de manera que busque la partición con el UUID deseado.menuentry "Default OS" { search --set=root --fs-uuid 5dda0af3-c995-481a-a6f3-46dcd3b6998d linux /vmlinuz root=/dev/sda1 ro quiet splash initrd /initrd.img }
-
¿Cómo puede configurar GRUB 2 para que espere 10 segundos antes de iniciar la entrada de menú predeterminada?
Agregue el parámetro
GRUB_TIMEOUT=10
a/etc/default/grub
. -
Desde una consola GRUB Legacy, ¿cuáles son los comandos para instalar GRUB en la primera partición del segundo disco?
grub> root (hd1,0) grub> setup (hd1)