Gestores de Arranque
El gestor de arranque es el primer programa que se ejecuta al arrancar una computadora, transfiere el control al núcleo del sistema operativo que a su vez inicia el resto del sistema operativo.
En las computadoras con Windows y Linux, o con sólo Linux, siempre se instala un gestor de arranque permitiendo la selección del sistema operativo a utilizar.
1. GRUB
GNU GRand Unified Boot loader o GRUB es un gestor de arranque que permite al usuario seleccionar el sistema operativo para arrancar, también permite transmitir argumentos al kernel.
Fue escrito en 1995 por Erich Boleyn para el proyecto FreeBSD y en 1999 Gordon Matzigkeit y Yoshinori K. Okuji adoptaron a GRUB como proyecto GNU oficial.
1.1. Proceso de arranque en un sistema x86 y GRUB
Los sistemas operativos Linux generalmente utilizan el método de carga directa sin punto medio entre el gestor de arranque y el kernel, GRUB soporta los métodos de arranque directo y carga encadenada, utilizado por sistemas propietarios como Windows, permitiendo arrancar desde casi cualquier sistema operativo.
Cuando Windows se instala (cualquier versión) sobrescribe completamente el MBR, destruyendo cualquier gestor de arranque existente. Si va a tener sistemas duales en su pc se recomienda primero instalar los sistemas operativos propietarios y luego Linux.
1.2. Características de GRUB
- Reconoce varios formatos ejecutables.
- Soporte para núcleos que no son Multiarranque: principalmente FreeBSD, NetBSD, OpenBSD y Linux.
- Carga de múltiples módulos: carácterística del Multiarranque.
- Carga de un archivo de configuración: archivo simple de texto con órdenes predeterminadas.
- Presenta una interfaz de menú con un tiempo de espera programable.
- Tiene una interfaz de comandos flexible accesible desde el menú.
- Soporte para varios sistemas de archivos: soportados BSD FFS, DOS FAT16 y FAT32, Minix fs, Linux ext2fs, ext3fs, ReiserFS, JFS, XFS, and VSTafs
- Soporte para descompresión automática con gzip: Imagine cargar módulos del núcleo que están comprimidos.
- Acceso a los datos en cualquiera de los dispositivos instalados.
- Independencia de las traducciones de geometría del disco.
- Detecta toda la RAM instalada.
- Admite el modo LBA (Dirección de Bloque Lógico): GRUB detecta automáticamente si el modo LBA está disponible, en modo LBA GRUB puede acceder a todo el disco.
- Soporte para arranque a través de la red usando el protocolo TFTP.
- Soporte para terminales remotas: por el momento implementado el soporte para terminales a través del puerto de serie.
1.3. Instalación de GRUB
GRUB se instala durante el proceso de instalación de Linux, pero en caso no lo haya instalado puede hacerse después. Puede instalarse de 2 maneras:
Instalación rápida con grub-install:
Esta es la forma más sencilla de instalar grub, para que funcione debe tener el archivo menú.lst o grub.conf en el directorio /boot/grub/:
# /sbin/grub-install /dev/hda
/dev/hda : Es el disco duro donde debe ser instalado. hda hace referencia al disco duro primario.
Instalación nativa GRUB:
Para este método de instalación es necesario utilizar la línea de comandos de grub, para ello debemos tener en cuenta los siguientes criterios:
- Identificar la partición en la que está instalado Linux o el directorio /boot.
- Los archivos stage1 y stage2 deben estar en el directorio /boot/grub.
Luego se procederá a la instalación con los siguientes pasos:
- Cargar el shell de gru: # grub
- Desde el shell de grub montar la partición donde está el sistema operativo: grub> root (hd0,2)
- Instalar grub en el MBR del disco duro primario: grub> setup (hd0)
- Salir de grub: grub> quit
Ahora debemos crear el archivo grub.conf con la configuración de arranque (el archivo menú.lst es un enlace blando a grub.conf). Este archivo cuenta con 2 secciones: Preferencias globales y Entradas para los sistemas operativos. El siguiente es un ejemplo de archivo de configuración grub.conf para una Pc con Windows y Linux
# ********** SECCION PREFERENCIAS GLOBALES **********
# Arranca la entrada por defecto
default 0
# Arrancar automáticamente luego de 5 segundos
timeout 5
# Escondemos el menu para que no se visto a menos que se presione cualquier tecla
hiddenmenu
# ********** SECCION ENTRADAS PARA LOS SISTEMAS OPERATIVOS **********
# El titulo para identificar la entrada a un sistema operativo
title CentOS 4.0 (2.6.9-5.0.3.EL)
# montar la partición donde está el sistema operativo
root (hd0,2)
# especificar el kernel a utilizar
kernel /boot/vmlinuz-2.6.9-5.0.3.EL ro root=LABEL=/ rhgb quiet
# especificar imagen INIT a cargar
initrd /boot/initrd-2.6.9-5.0.3.EL.img
# El título para identificar la segunda entrada
title Sistema Propietario
# Fijamos el dispositivo raiz donde está instalado el sistema operativo propietario sin montarlo
rootnoverify (hd0,0)
# Carga en cadena el gestor de este sistema operativo
chainloader +1
La próxima vez que arranque el sistema aparecerá el menú que acabamos de crear.
1.4. Terminología de GRUB
GRUB utiliza diferentes términos para hacer referencia a los dispositivos.
Nombres de dispositivos
GRUB usa las siguientes reglas para nombrar a los dispositivos y las particiones:
- Tanto los discos duros IDE o SCSI empiezan con hd, las unidades de disquete inician con fd.
- Los nombres de los dispositivos deben estar encerrados entre paréntesis.
- (hd0) Así identificamos el disco duro primario, encerrado entre paréntesis. Esto es importante para indicarle a GRUB que configure el MBR del disco duro primario, si colocamos (hd3) estaremos especificando el cuarto disco duro.
Veamos otro ejemplo para señalar a un disco duro:
(hd0,1) => {tipo de dispositivo}{Número de dispositivo},{Número de partición}
- hd significa que es un disco duro (hard disk).
- El número 0 se refiere al número de la unidad, empezando a contar desde cero, así que este es el dispositivo primario.
- El número 1 se refiere a la 2º partición del disco duro.
Nombres de archivos
Para poder especificar la ubicación de un archivo desde GRUB se hace asi:
(hd0,0)/vmlinuz = /dev/hda1/vmlinuz
Esto especifica un archivo llamado vmlinuz en la primera partición del disco duro primario.
1.5. Interfaces de GRUB
GRUB dispone de tres interfaces, cada una permite arrancar el kernel de Linux u otros sistemas operativos.
a) Interfaz de menú
Cuando GRUB se instala por defecto, lo primero que vemos al reiniciar la computadora es una lista de opciones para seleccionar, esa es la interfaz de menú. Presionando la tecla [e] se podrá ingresar a la interfaz del editor de menú de entrada o si presiona la [c] cargará la interfaz de línea de comandos.
b) Interfaz del editor de menú de entrada
Presionando la tecla [e] desde el menú del gestor de arranque se accede a esta interfaz, pudiendo alterar las líneas de comando antes de arrancar el sistema operativo. Tiene algunos comandos como:
- la tecla [o] permite agregar una línea nueva después de la línea actual,
- la tecla [O] inserta una línea nueva después de la línea actual,
- la tecla [e] te sirve para modificar el contenido de una línea y la tecla [d] te sirve para borrar la línea.
La tecla [b] ejecuta los comandos y arranca el sistema operativo. La tecla [Esc] omite los cambios y el usuario vuelve a la interfaz de menú estándar. Con la tecla [c] se carga la interfaz de línea de comandos.
c) Interfaz de línea de comandos
Es la interfaz que proporciona mayor control. Se puede escribir cualquier comando seguido de ENTER para ejecutarlo. Esta interfaz cuenta con algunas funciones similares a las de shell avanzadas, incluyendo el uso de [Tab] para autocompletar, y las combinaciones de teclas con [Ctrl] al escribir comandos, tales como [Ctrl]-[a] para moverse al comienzo de la línea y [Ctrl]-[e] para moverse al final. Además, las teclas de flecha, [Inicio], [Fin], y [Supr] funcionan de forma similar al bash shell.
1.6. Comandos de GRUB
GRUB permite varios comandos en su línea de comandos. A continuación listamos los más útiles:
- boot : Arranca el sistema operativo especificado y cargado previamente.
- chainloader <nombre-archivo> : Carga el archivo especificado como gestor de encadenamiento. Para extraer el archivo en el primer sector de la partición especificada, puede utilizar +1 como nombre de archivo.
- displaymem : Muestra el uso actual de memoria, en función de la información de la BIOS. Esto es útil si no está seguro de la cantidad de RAM que tiene un sistema y todavía tiene que arrancarlo.
- initrd <nombre-archivo> : Le permite especificar un disco RAM inicial para utilizarlo al arrancar. initrd es necesario cuando el kernel necesita ciertos módulos para poder arrancar adecuadamente, tales como cuando la partición se formatea con el sistema de archivos ext3.
- install <stage-1> <install-disk> <stage-2> p <config-file> : Instala GRUB en la MBR del sistema.
Deberá especificar los siguientes valores:
- <stage-1> : Significa un dispositivo, partición y archivo donde el primer gestor de arranque puede ser encontrado, tal como (hd0,0)/boot/grub/stage1.
- <install-disk> : Especifica el disco donde la etapa 1 del gestor de arranque debería ser instalado, tal como (hd0).
- <stage-2> : Pasa la ubicación de la etapa 2 del gestor de arranque a la etapa 1, tal como (hd0,0)/boot/grub/stage2.
- p <config-file> : Esta opción le indica al comando install que busque por el archivo de configuración de menú especificado por <config-file>. Un ejemplo de una ruta válida al archivo de configuración es (hd0,0)/boot/grub/grub.conf.
- kernel <kernel-file-name> <option-1> <option-N> : Especifica el archivo del kernel a cargar desde el sistema de archivos raíz de GRUB cuando se esté usando la carga directa para arrancar el sistema operativo. Las opciones pueden estar después del comando kernel y se pasarán al kernel cuando éste se cargue.
- root <device-and-partition> : Configura la partición raíz de GRUB para que sea el dispositivo y la partición concreta, por ejemplo (hd0,0), y monta la partición de modo que se puedan leer los archivos.
- rootnoverify <device-and-partition> : Realiza las mismas funciones que el comando root pero no monta la partición.
2. LILO
LILO es un acrónimo de LInux LOader (cargador) y ha sido usado para arrancar linux en sistemas x86 por muchos años, muchos prefieren usar LILO porque es más familiar.
2.1. LILO y el proceso de arranque de x86
LILO se carga asímismo en la memoria en dos etapas.
- La etapa 1, donde el gestor de arranque primario se lee en la memoria por la BIOS desde el MBR. Se carga en los primeros 512 bytes dentro del MBR, su función es cargar la etapa 2 del gestor de arranque y pasarle la información de la geometría del disco.
- La etapa 2, donde el gestor de arranque secundario se lee en memoria. El gestor de arranque muestra una pantalla que permite seleccionar el kernel del sistema operativo Linux que desee arrancar, esta etapa carga el kernel y el initrd.
Para acceder a la línea de comandos boot:, presione [Ctrl]+[X] ó [TAB].
2.2. Diferencias entre LILO y GRUB
LILO funciona de forma parecida a GRUB a diferencia de:
- No posee ninguna interfaz del comando interactiva: la línea de comandos de Lilo no es interactiva y sólo permite comandos con argumentos.
- Almacena información sobre la localización del kernel o si otro sistema operativo se debe cargar en el MBR: Cada cambio que se haga debe ser reescrito por lilo debiendo ejecutar: /sbin/lilo –v –v. Si no se tiene una configuración correcta el sistema no podrá arrancar.
- No puede leer las particiones ext2.
2.3. Archivo de Configuración /etc/lilo.conf
Lilo se configura por medio del archivo /etc/lilo.conf, y cada que se realice un cambio deberá ejecutarse el comando /sbin/lilo para escribir los cambios al MBR.
Un archivo de ejemplo para /etc/lilo.conf será así:
# ********** SECCION DEFINICIONES GLOBALES **********
# Instruye a Lilo a que se arranque desde el primer disco duro.
boot=/dev/hda
# Localiza el archivo del mapa, no se debe modificar
map=/boot/map
# Indica a lilo el nuevo sector de arranque
install=/boot/boot.b
# Muestra un mensaje en la línea message
prompt
# Tiempo a esperar antes de arrancar el sistema operativo por defecto. Décimas de segundo.
timeout=50
# Pantalla que Lilo mostrará para escoger el sistema operativo a arrancar.
message=/boot/message
# Describe la geometría del disco duro. Recomendable no cambiarla si esta presente.
lba32
# Sistema operativo por defecto a arrancar luego del timeout
default=linux
# ********** SECCION ENTRADAS PARA SISTEMAS OPERATIVOS **********
# Entrada para un sistema operativo. Especificamos kernel a usar
image=/boot/vmlinuz-2.4.0-0.43.6
# nombre de la entrada
label=linux
# Imagen initial ram disk usada para arrancar los dispositivos requeridos por el kernel
initrd=/boot/initrd-2.4.0-0.43.6.img
# La partición root es de solo lectura
read-only
# Identificando donde está la partición de éste sistema Linux
root=/dev/hda5
# Especifica que existe otra partición con sistema operativo diferente a Linux
other=/dev/hda1
# nombre de la entrada
label=windows
3. Cambiar los niveles de ejecución en tiempo de arranque
Tanto LILO como GRUB permiten cambiar los niveles de ejecución en tiempo de arranque.
LILO
- Presione [Ctrl]-[X] o [TAB] para acceder a la línea de comandos, luego escriba:
linux <runlevel-number>
<runlevel-numer> puede ser de 1 a 5, o también puede usar las palabras single o emergency.
GRUB
- En el menú de arranque seleccionar la entrada correspondiente al sistema Linux, luego pulsar la tecla [e] para modificarla.
- Situarse en la línea del kernel y pulse [e] para modificarla.
- Añadir al final de la línea Kernel un número (desde 1 a 5), o las palabras single o emergency y presione [ENTER].
- Volverá a la pantalla de GRUB con la información sobre el kernel. Pulse [b] para arrancar el sistema.
|