El programa de arranque GNU GRUB

Por Jaswinder Singh Kohli

Traducido al Español por: Joan Anglada
el día 14 de Abril 2001, para La Gaceta de Linux.

Que es un programa de arranque?

Un programa de arranque es un programa que reside en los sectores de inicio de un disco, por ejemplo, el MBR (Master Boot Record) del disco duro. Después de probar el sistema durante la inicialización, el BIOS (Basic Input/ Output System) pasa el control al MBR así indica al sistema que se inicie a partir de ese punto. Después, el programa residente en el MBR se ejecuta. Ese programa se llama programa de arranque. Su misión es transferir el control al sistema operativo, y de ese modo ese pasará a controlar el proceso de inicialización.

Hay muchos programas de arranque, incluyendo al GNU GRUB (Grand Unified Boot Loader), Bootmanager, LILO (Linux Loader), NTLDR (boot loader for Windows NT systems), etc. Yo me he decidido por hablar del GNU GRUB y la forma de usarlo.

Que es el GRUB?

GRUB es un potente programa de arranque, que puede cargar una gran variedad de sistemas operativos como Windows, DOS, Linux, GNU Hurd, *BSD, etc.

Actualmente LILO es el programa de arranque mas popular, utilizado por la mayoría de usuarios con arranque múltiple de sistemas. Pero si utilizas LILO, tienes que acordarte de volver a arrancar el LILO cada vez que cambias la configuración del sistema o instalas un Kernel nuevo. LILO también tiene menos flexibilidad que el GRUB.

GRUB es otro nombre por la flexibilidad. Su ultima versión, 0.5.96.1, soporta ext2 (un archivo de sistema que utiliza el Linux), FAT16 y FAT32 (utilizado por el Win9x y ME), FFS (Fast File System utilizador por *BSD UNIX), ReiserFS (un Nuevo archivo de sistema especializado, y creado por Linux e integrado en el Linux Kernel 2.4.1), y minix (un Viejo archivo de sistema creado para el MINIX OS, también usado por los primeros Linux). Con el GRUB, puedes “ver” esos archivos de sistema sin necesidad de cargar un sistema operativo. Por ejemplo, si quieres ver la fecha y la hora almacenada en un fichero de texto y no tienes tiempo para cargar el sistema operativo, puedes usar el shell del GRUB (prompt "grup>) i escribe:

grub> cat (partition number)/home/god/filename.txt.  
Y obtendrás todo lo que fichero del sistema contiene, incluyendo la fecha y el tiempo.

El mejor uso del GRUB es que puedes cargar cualquier Kernel en cualquier partición. Por ejemplo, si te olvidas de añadir a la lista el nuevo kernel compilado, normalmente necesitarías inicializar el sistema, añadirlo en la lista, y después volver a arrancar el sistema. Pero con el GRUB, tu simplemente utilizas el shell y cargas el archivo “image” del kernel deseado.

Ahora explicaré los tres pasos primarios para usar el GRUB: compilación, instalación, y configuración.

PASO 1: Compilación e instalación del GRUB

Descárgate el código del GRUB desde ftp://alpha.gnu.org/pub/gnu/grub.

Extrae el archivo comprimido como "tar -xvzf filename.tar.gz"/ En mi caso, el nombre del archivo era grub-0.5.96.1.tar.gz, así que hice

# tar -xvzf grub-0.5.96.1.tar.gz
Esa orden extrae muchos archivos i directorios a un directorio llamado grub-0.5.96.1 Ahora haz lo siguiente:
[root@heaven ~/grub-0.5.96.1 ]# ./configure

Si quieres personalizar el GRUB para incluir tus ficheros particulares de sistema, y la tarjeta de red, o para borrar el soporte de las tarjetas de red que no necesites, ejecuta:

[root@heaven ~/grub-0.5.96.1 ]# ./configure --help

Esa orden te mostrará todas las opciones. Ahora utiliza los prefijos de activar y desactivar (en Inglés Enable y Disable) para añadir o borrar el soporte para tarjetas de red específicas.

(NOTA: GRUB soporta la inicialización de la red.)

Para empezar el proceso de compilación, escribe:

[root@heaven ~/grub-0.5.96.1 ]# make

Para instalar los archivos en sus debidos puestos, escribe:

[root@heaven ~/grub-0.5.96.1 ]# make install

Ahora estás preparado para instalar realmente el GRUB.

Ahora sería una buena idea para guardar todos los archivos relacionados con la inicialización del GRUB en un directorio como /boot/grub. Para hacer eso, sigue ese procedimiento:

1. Por defecto todos los archivos del GRUB están instalados en el /usr/share/grub/i386-pc o /usr/local/share/grub/i386-pc en función de como las variables de tu shell hayan sido establecidas.

2. Haz un nuevo directorio llamado /boot/grub. Después copia los siguientes archivos en el directorio:

stage1
stage2
*_stage1_5

Definiré esos archivos mas tarde. También copia el programa del GRUB (que tendría que estar en /usr/sbin o /usr/local/sbin) en el directorio de /boot/grub.

Antes de instalar el GRUB, necesitas saber como GRUB entiende tu disco duro i la información de las particiones. Primero de todo, empieza contando los las particiones desde 0, no a partir de 1. En el Linux, tu primer disco duro adjunto al master primario es nombrado “hda”. En el GRUB se convierte en el “hd0”. De la misma forma, tu primer disco flexible en el GRUB es “fd0”. Pero la primera, segunda y tercera partición en el primer disco duro (hda1, hda2 y hda3), se convierten en “hd0,0”, “hd0,1” y hd0,2” en GRUB. Nota: la coma es una parte integral de la nomenclatura del GRUB.

Para integrar los dos campos (el número del disco i de la partición) al alrededor de la coma, utiliza los paréntesis. Por ejemplo: (hd0,0) (hd0,1) (hd0,2) y así sucesivamente. (hd0,0) es la primera partición en el primer disco duro. De forma parecida és el (hd1,5) és la sexta partición en el Segundo disco duro y (hd2,0) es la primera partición en el tercer disco duro.

Paso 2: Instalando el GRUB

La instalación del GRUB puede separarse en tres partes:

  1. Instalación del "stage1" en el MBR.
  2. Montar la dirección i la localización, "stage2".
  3. Establecer un menu de inicio o organizar las opciones para escoger cual es el sistema a inicializar.

Empieza instalando el GRUB mediante la siguiente orden:

[root@heaven /boot/grub ]# ./grub

Esa orden explora los recursos del sistema para adivinar los recursos de la BIOS y producir un mensaje de salida. Ese procedimiento tarda un poco en completarse.

end_request: I/O error, dev 02:00 (floppy), sector 0 GRUB version 0.5.96.1 (640K lower / 3072K upper memory)

NOTA: Aunque pueda parecer sorprendente, GRUB puede soportar unas ordenes mínimas parecidas al Bash. Para la primera palabra, la tecla TAB muestra la lista para completar los comandos posibles. TAB muestra los posibles terminaciones de dispositivos y nombres de ficheros. Puede que te sorprenda ese aspecto. Aparece una línea como esta:

grub> 

Ahora, doy por hecho que has instalado tu Linux en la primera partición extendida en el primer disco o /dev/hda5. Recuerda el convención de nombres del GRUB y renombra la partición citada a (hd0,4). Escribe el siguiente comando:

grub> install (hd0,4)/boot/grub/stage1 (hd0) (hd0,4)/boot/grub/stage2 p (hd0,4)/boot/grub/menu.conf
Ahora examinaremos detalladamente esa orden:
install
Una orden incorporada que indica al GRUB que instale el (hd0,4)/boot/grub/grub/stage1 en el (hd0), el Master Boot Record (MBR).
(hd0,4)/boot/grub/stage2
dice al grub donde está localizada la imagen del stage2.
p con las siguientes opciones: (hd0,4)/boot/grub/menu.conf
establece la configuración del archivo para que se muestren los simpáticos menús.

También podemos resumir las ordenes siguientes:

  1. instalación
  2. código_del_stage1
  3. donde_instalar
  4. código_del_stage2
  5. p codigo_del_archivo_de_configuración

Ahora has completado la instalación del disco duro básico.

Instalación en el disco flexible (floppy):

Para instalar el GRUB en un disco flexible, necesitas conocer y saber como trabaja la orden ‘dd’. Para la inicialización del disco flexible mediante el GRUB, necesitarás poner los archivos stage1 y el stage2 en los sectores de arranque del disco flexible.

Instalando el stage1 en un disco flexible (floppy)

Inserta un disco formateado en la disquetera y escribe:

[root@heaven /boot/grub ]# dd if=stage1 of=/dev/fd0 bs=512 count=1

De nuevo examinaremos la orden en detalle:

if=input file
i.e., stage1
of=output file
i.e., el disco flexible (tendría que ser diferente en tu ordenador)
bs=bytes para leer y escribir
Aquí 512 bytes.
count= Número de veces que se realiza esa operación
Cada iteración copia el siguiente número de bloques "bs" en su destinación, consecutivamente.

Instala el stage2 en el disco flexible (floppy)

[root@heaven /boot/grub ]# dd if=stage2 of=/dev/fd0 bs=512 seek=1

Este procedimiento es parecido al stage1 exceptuando un nuevo ítem llamado “seek”. Seek esquiva el valor 1 "bs". Por ejemplo, en el comando anterior, el bs es 512, pero el seek=1 esquivará los primeros 512 bytes de espacio en el disco flexible y continuará en el byte 513rd. Eso preserva la primera operación para no sobrescribir los primeros 512 bytes escribidos en el stage1.

Y así acabas de completar la instalación básica del disco flexible.

PASO 3: Configurar el GRUB

En esa sección veremos como inicializar varios sistemas operativos y crear el archivo menu.conf.

Empecemos con los procedimientos de arranque soportados por el GRUB. El arranque puede ser hecho de dos formas:

Hacer el procedimiento de arranque mediante el método A:

  1. Establece el dispositivo root o dile al GRUB como es tu sistema de ficheros de root.
  2. Dice al GRUB donde está tu imagen de arranque del Kernel y pasa los parámetros al Kernel.
  3. Reinicia y pruébalo.

Para iniciar el Linux, tengo mi kernel en /boot/ como bzImage y mi sistema de archivos root en /dev/hda5, o (hd0,4) en el GRUB. Y el procedimiento de arranque es el siguiente:

  1. root (hd0,4)   [Eso establece la partición root]
  2. kernel /boot/bzImage root=/dev/hda5   [Establece el Kernel]
  3. boot   [Eso empieza a arrancar el Linux]

Procedimiento de arranque mediante el método B (ese método asume que tienes otro programa que se ocupa del arranque como el LILO o el NTLDR, instalados en la partición):

  1. Establece partición root, pero no la montes.
  2. Haz la partición activa
  3. Establece el primer sector del dispositivo, el control del que tiene que ser transferido con la orden del chain loader (cargador de cadenas)
  4. Reinicia y pruébalo.

Ahora probaremos con otro ejemplo con Windows instalado en el /dev/hda1 o (hd0,0). El procedimiento para arrancar con el Windows es el siguiente:

  1. rootnoverify (hd0,0)
  2. makeactive
  3. chainloader +1   [+1 establece el primer sector de la partición root actual ]
  4. boot   [transfiere el control i cierra el GRUB]

El archivo menu.conf es utilizado para un arranque múltiple de sistemas operativos y construcción de menús. Crear el archivo menu.conf no es difícil., este utiliza el inglés corriente, como verás en esa sección.

Todas lo que se entra en el menú, empiece con “title TITLENAME” (Titlename se refiere al título que le quieras dar, N del T) sin comas. Puedes dar el TITLENAME a cualquier cosa que quieras.

Para hacer el menú que inicie el Linux:

  1. Establece el título.
  2. Establece la partición root.
  3. Establece el kernel con los parámetros correctos.
  4. Arranca

>Para hacer un menu activo:

title Debian GNU/Linux 2.2 kernel 2.4.1
root (hd0,4)
kernel /boot/bzImage.2.4.1
boot
#----

(Un corchete (#) delante de una línea es un comentario.)

Para hacer un menu para Windows o DOS:

title Windoze 
rootnoverify (hd0,0)
makeactive
chainloader +1
boot
#----

Y si quieres tener dos versiones del Windows instalados - digamos que uno es para ti, y otro para tu familia - pero el segundo te indica que no se puede instalar, porque el Windows ya está instalado?

Hay una forma fácil para instalar dos versiones ocultando una partición durante el arranque y después usando la otra. Como opción puedes poner una simple contraseña, pero después la partición no se carga si cometes algún error. Aquí está la forma de como crear dos instalaciones de Windows, hda1 y hda2 o (hd0,0) y (hd0,1) utilizando las ordenes de bloqueo (lock), contraseña (password), ocultar (hide) y mostrar (unhide).

Por Windows "Mi acceso":

title Mi acceso
lock
unhide (hd0,0)
hide (hd0,1)
rootnoverify (hd0,0)
makeactive
chainloader +1
boot
#----

Para utilizar la orden de bloqueo (lock) eficazmente necesitas especificar la orden de password cerca del inicio de la configuración del archivo. La sintaxis de la orden de password es la siguiente: password secret ("secret" es el password o contraseña). En cualquier momento puedes introducir la contraseña presionando la p.

Por Windows "Acceso Familiar"

title Acceso Familiar
unhide (hd0,1)
hide (hd0,0)
rootnoverify (hd0,1)
makeactive
chainloader +1
boot
----

Cualquiera puede arrancar con este acceso, porque no se requiere la contraseña.

Aquí hay otro truco interesante para utilizar en la orden de password o contraseña. Para ocultar los accesos en el menú por defecto o en el archivo de configuración, puedes cargar una lista personal utilizando la siguiente orden:

password secret

password secret (hd0,4)/boot/grub/secret-list.conf

Una orden importante es el “map”, el que puedes usar cuando tienes dos discos duros y un sistema operativo como el Windows, el que no quiere ser arrancado des del Segundo disco duro. Por ejemplo, puedes mapear el hd0 como el hd1 y el hd1 como el hd0. En otras palabras, puedes intercambiar virtualmente los dos discos duros y cargar el sistema operativo deseado. La orden es la siguiente:

grub> map (hd0) (hd1)
grub> map (hd1) (hd0)

Para arrancar el FreeBSD:

title FreeBSD 4.0
root (hd0,4,a)
kernel /boot/loader
boot
#---- 

Lo llamamos “el FreeBSD’s loader”. Puedes ver que el root (hd0,4,a) tiene tres argumentos ya que el FreeBSD hace particiones virtuales de una partición simple. Llamamos a la partición root “a”. Si el FreeBSD ocupa todo un Segundo disco en tu sistema, este tendria que ser el root (hd0,a). Y en lugar de llamar al kernel, llamamos al cargador del FreeBSD, que es mejor para esa misión que el propio kernel.

(NOTA: Recomiendo que antes de probar el OpenBSD y el GNU/Hurd, guardes lo que estés haciendo mediante un “chain loading”.)

Ahora has completado la compilación básica del GRUB, instalación y también la configuración. Las otras cosas que puedas saber de mas sobre el GRUB te servirán como una poderosa forma de controlar el arranque del sistema.

Miscelánea de ordenes del GRUB: :

default xx
Donde xx es el acceso por defecto para arrancar.
timeout yy
Donde yy es el tiempo (en segundos) después que el acceso por defecto arranque.
fallback zz
Donde zz es el acceso que se arrancará si el primer arranque (el establecido por defecto) no funciona.
color
Este es usado para colorear el menu. La sintaxis es: color normal selección_actual. Los dos campos pueden tener dos valores com color_de_primer_plano/color_de_fondo. Por ejemplo:
color green/black o light-gray/blue
También puedes usar los números correspondientes a los colores.

RECUERDA: todo los valores empiezan de 0, y el 0 es el primer valor.

En mi próximo articulo, quiero probar el Fire GNU/Hurd y el OpenBSD y es posible que algún sistema de arranque mediante red. Pero tendréis que esperar 3 meses o hasta mas, ya que tendré exámenes por el medio. Mientras tanto, estad a la espera.

Para qualquier comentario o error: http://us.f7.mail.yahoo.com/ym/[email protected].

Copyright © 2001, Jaswinder Singh Kohli.
Copying license http://us.f7.mail.yahoo.com/copying.html
Publicado en el número 64 de Linux Gazette, Marzo 200

Hosted by www.Geocities.ws

1