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 un ordenador se enciende, el primer software no vinculado al hardware 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 del sistema operativo 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 este tema 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 en que es diferente a GRUB 2.
¿Dónde se ubica el cargador de arranque y cómo entra en escena?
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. Actualmente existen
muchos sistemas que mantienen este
esquema de particionado, bien por
herencia del pasado o bien porque el
sysadmin ha creido conveniente
particionar de esta forma.
En este esquema, y suponiendo que la
máquina sólo cuenta con un disco duro,
el primer sector (sector 0) de 512 bytes
del disco se llama Master Boot
Record y contiene el código de
arranque, llamado cargador de arranque y
una tabla que describe las particiones
en el disco (la tabla de particiones).
Los 512 bytes del MBR se reparten así:
en el espacio comprendido entre el byte
0 y el 445 se encuentra el código del
cargador de arranque (446 bytes de
ocupación), entre el 446 y el 511 está
la tabla de particiones (66 bytes de
ocupación). Para los primeros cargadores
de arranque (caso de LILO) bastaban
estos 446 bytes para codificar todas la
funcionalidades del bootloader, pero con
la aparición de GRUB y GRUB2, cuyas
funcionalidades "no caben" en 446 bytes,
hubo que hacer un nuevo planteamiento
sin romper las especificaciones del
particionado MBR, quedando el escenario
como se describe a continuación:
Cuando se enciende el ordenador, el
primer segmento de código de GRUB
(conocido como stage1 y materializado en
un archivo de nombre boot.img),
el cual se aloja en los primeros 446
bytes de MBR, se carga, se ejecuta y
pasa el control a un segundo segmento de
código (conocido como stage 1.5 y
materializado en un archivo de nombre core.img),
el cual, se aloja en un espacio de 32 KB
entre el MBR y la primera partición.
Este segundo segmento monta la partición
del disco donde se aloja el grueso del
código de GRUB y su fichero de
configuración (grub.cfg). A
partir de aquí, GRUB ya tiene
instrucciones suficientes para saber
cuales son y donde están los sistemas
operativos existentes en la máquina. Con
esta información, ofrece un menú de
opciones en pantalla además de estar en
condiciones de interactuar con el
operador del sistema ofreciéndole todas
las funcionalidades con las que cuenta
GRUB. Elegida una opción del menú y
pulsando enter sobre ella GRUB procede a
cargar el núcleo del sistema operativo
seleccionado y pasarle el control.
El esquema de particionado MBR tiene limitaciones en el número de particiones (originalmente un máximo de 4 particiones primarias, más adelante en el tiempo un máximo de 3 particiones primarias mas 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 particionado 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 BIOS, si es GRUB el cargador de arranque, el stage 1 se almacena el la cabecera de la tabla GPT (lo primeros 512 bytes de dicha tabla están reservados para emular el MBR) y el stage 1.5 de GRUB se almacena en una partición especial de arranque del BIOS.
En los sistemas con firmware UEFI, los
dos segmentos iniciales de GRUB (boot.img
+ core.img) se unen en un único
archivo y 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
independiente, la cual se monta en el
sistema de archivos raíz en el ramal /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
que relacionan más abajo. La mayoría
de estos se nombran con un sufijo -VERSION
,
donde -VERSION
es la
versión del núcleo de Linux
correspondiente; 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
.
En caso de aparecer el en ninguna
partición el *
habrá que ir montando cada una de
ellas con el comando mount
hasta encontrar el material de
arranque.
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)