FAQ sobre Linux para principiantes - es.comp.os.linux: Sobre LILO

Next Previous Contents

## 4. Sobre LILO

## 4.1 ¿Qué es LILO y para qué sirve?

LILO, literalmente, el cargador de linux (LInux LOader) es un gestor de arranque muy versátil que permite iniciar un sistema operativo (SO) cargando el sector de arranque de una partición del disco duro (o de un disquete).

Esto lo pueden hacer otros gestores de botado, pero sólo LILO puede cargar el kernel de linux y arrancar linux presentando además la posibilidad de pasar parámetros al kernel mediante líneas de comando.

LILO tiene una serie de componentes que se cargan de manera secuencial. En primer lugar, se carga la primera parte (el comienzo del código) del cargador en el sector de arranque. Cuando este primer tramo del cargador se ha iniciado, aparece una "L" en el monitor. Entonces, el resto (la mayor parte del código) del cargador (que junto con la primera parte del código se encuentra en el fichero `/boot/boot.b`) procede a iniciarse. Justo antes de que se cargue este segundo tramo de código, se presenta "I" en la pantalla. Si todo ha ido bien, después de haberse cargado, la siguiente letra de LILO, "L", aparecerá en la pantalla. Después de esto, se produce la carga de la tabla de descriptores a partir del fichero `/boot.map`, donde se establecerán las ubicaciones de los posibles kernels de linux así como los sectores de arranque correspondientes a otros SOs que también gestione LILO. Por último, se carga el SO seleccionado, que en principio será el kernel de linux. Si todo ha funcionado sin problemas, aparecerá una "O" en el monitor y se habrá escrito en la pantalla la palabra LILO.

Si hubieren problemas en el proceso de arranque la presencia o ausencia de las letras de LILO junto con algunos otros mensajes serán claves para diagnosticar la causa del fallo.

## 4.2 ¿Dónde se instala LILO?

Dependiendo de las necesidades que tengamos, podremos instalar LILO:

- En el sector de arranque de un disquete (floppy) (`/dev/fd0`)
- En el sector de arranque (superbloque) de una partición raíz de linux (primaria o extendida) (`/dev/hda1`, p.ej. para (E)IDE ó `/dev/sda1` p.ej. para SCSI)
- En el MBR (Master Boot Record) o Sector Maestro de Arranque (primer sector) del primer disco duro (`/dev/hda`, p.ej. para (E)IDE ó `/dev/sda` p.ej. para SCSI)

La opción de instalar LILO en un disquete ("de arranque") es el procedimiento más seguro, pero también el más lento de cargar linux en nuestra máquina.

Si solamente tenemos linux en nuestro ordenador, la opción idónea sería instalar LILO en el MBR del primer disco duro. Si vamos a disponer de otros SOs coexistiendo en nuestra máquina (MS-DOS, Windows), también podemos escoger la instalación de LILO en el MBR, y gestionar con él la carga de los SOs. Pero con esto hay que tener ciertas precauciones.

Si ya tenemos un SO en una partición, p. ej. Windows 95, cuando instalemos LILO en el MBR, sobreescribiremos dicho sector y ya no podremos arrancar Windows 95, si no lo gestiona el propio LILO. Si tenemos linux instalado con LILO en el MBR y después instalamos p. ej., Windows 95, se borrará LILO del MBR y no podremos arrancar linux. En tal caso, para poder usar LILO como gestor común, habría que cargar linux con un disquete de arranque y reinstalar, desde linux LILO en el MBR. Por lo tanto, si vamos a meter varios SOs en nuestra máquina, es mejor instalar primero los otros y luego linux, usando después LILO como gestor de arranque de todos los SOs.

Si nos planteamos iniciar los diversos SOs, incluído linux desde otro gestor de arranque, como por ejemplo el moderno BootMagic del PartitionMagic 4.0 (Englobado ya en El Caldera OpenLinux 2.2), la mejor opción sería escribir LILO en el sector de arranque de la partición linux nativa correspondiente. En tal caso, cuando instalemos linux, deberemos marcar dicha partición raíz como activa (usando el comando "a" de `fdisk` o el "b" de `cfdisk`).

## 4.3 ¿Qué limitaciones impone el BIOS a LILO?

Excepto en el caso de que LILO sea el gestor de otros SOs, será el BIOS u otro cargador el responsable de ejecutar el sector de arranque de la partición. El BIOS (Basic Input Output System) cuando encendemos el ordenador, lleva a cabo el POST (Power-On Self Test) para comprobar los parámetros de la configuración de hardware que se encuentran permanentemente salvados en el chip CMOS (Complementary Metal Oxyde Semiconductor) RAM (continuamente alimentado por una batería aunque el ordenador se apague): memoria instalada, disqueteras, discos duros, cd-roms,...

Despues del test, BIOS muestra en la pantalla los valores de los parámetros de hardware y procede a arrancar el SO. En el caso de un disco duro toma el MBR del disco primario y de él se cargará el programa gestor de arranque. Antaño, el MBR contenía el sistema de arranque del único sistema operativo instalado. Hoy día como es posible cargar más de un SO, para arrancar, hace falta un gestor de arranque múltiple, como por ejemplo LILO. Por lo tanto, LILO está limitado por las opciones del BIOS. Además, LILO depende del BIOS para cargar los ficheros /boot/boot.b; /boot.map; los diversos kernels; los sectores de arranque de los otros Sos y el mensaje de arranque de LILO si se ha definido.

Las restricciones más importantes que afectan LILO eran en el caso de BIOS antiguos la limitación a los dos primeros discos duros y la imposibilidad de acceder más allá de 1024 cilindros por disco, lo cual se vulneraba en cuanto el disco duro superaba los 504 Mbytes, por lo que convenía tener la partición raíz que contuviera los kernels en las primeras posiciones de la tabla. Los BIOS de las modernas placas base ya soportan hasta cuatro dispositivos (discos duros o cdroms). Así, cuando la partición de arranque de linux se encuentra en el segundo, tercero o cuarto disco duro, LILO imprime un mensaje de precaución pero continúa. El límite de los 1024 cilindros no ha cambiado con los nuevos BIOS, pero los controladores de disco con soporte de LBA (Logical Block Address)o LARGE(IDEs con más de 1024 cilindros, la mayoría de EIDEs y todos los SCSI) pueden "traducir" o "remapear" la geometría del disco en otra equivalente de manera que parezca que el sistema tiene menos de los 1024 cilindros y se puedan gestionar hasta casi 8 Gbytes. Si la información acerca de la geometría del disco que hay en el menú del BIOS (remapeada con p.ej. LBA) no es la misma (en cuanto a cilindros/cabezas/sectores) que la que nos da fdisk, entonces se producirá un problema de "geometry mismatch" (no equivalencia de geometría) y LILO abortará el arranque a menos que se utilice la opción "linear" en la configuración de LILO.

## 4.4 ¿Cómo se configura e instala LILO?

La configuración de LILO se hace en `/etc/lilo.conf`, pero antes que editar y escribir manualmente la configuración en este archivo, existen interfaces o programas capaces de preparar una configuración conveniente para el usuario, de manera que solamente en el caso de incorporar opciones avanzadas tenga que editar y modificar a mano el archivo.

En primer lugar existe un programa llamado "Quickinst" que acompaña la distribución original del programa LILO. Se trata de un guión (shell script) que produce una configuración mínima de LILO que luego conviene actualizar. Por otra parte la mayor parte de las distribuciones proporcionan un asistente durante la instalación que ayuda a la configuración de LILO. RedHat en su "INSTALL" dedica una parte importante a la configuración de LILO. El"SETUP" de Slackware también lo permite. Distribuciones como Caldera OpenLinux o SuSE disponen de herramientas de instalación que permiten una cómoda configuración de LILO para el usuario (LISA y LIZARD para OpenLinux 1.3 y 2.2, y YAST para SuSE). Quizá Debian ha sido un poco más espartana (al menos hasta Hamm 2.0) en su utilidad de instalación para la configuración de LILO: se limita a escribir una configuración básica de LILO sin soporte para otros SOs ni otros kernels.

El fichero `/etc/lilo.conf` solo debería ser leído por el superusuario administrador, ya que podría contener contraseñas. En caso de duda, deberíamos hacer (como root)

      chmod 600 /etc/lilo.conf

Escribiendo /etc/lilo.conf

El fichero `/etc/lilo.conf` comienza con una "global section" (sección general) seguida de una o más "system sections" (secciones para cada SO que LILO gestione) que comenzarán por image= (si es un kernel linux) u other= (si es otro SO). Los comentarios en el fichero comienzan con el símbolo de la almohadilla (#).

Consideremos a continuación las líneas más importantes de `/etc/lilo.conf`:

Seccion general

- `boot=dispositivo` indica el dispositivo donde se instalará LILO. dispositivo puede ser un disquete (`/dev/df0`), una partición (p.ej. `/dev/hdc2`) o el disco completo (p.ej `/dev/hda`) que corresponde a la instalación en el MBR

- `install=ficheroarranque` instala el fichero especificado como nuevo sector de arranque. Por defecto es `/boot/boot.b`

- `map=ficheromapa` establece la ubicación del fichero de mapeado. Por defecto es `/boot/map`.

- `prompt` ordena a LILO que muestre un indicador (boot:) al momento de iniciarse el arranque que permita seleccionar el SO a iniciar. Si en este punto pulsamos la tecla TAB, aparecerán los nombres dados a los correspondientes SOs.

- `timeout=tiempo` indica el tiempo en décimas de segundo que LILO debe mostrar el indicador anterior. Si pasado ese tiempo, no se indicase nada, LILO cargaría el primer SO configurado.

Seccion linux

- `image=kernelimagen` donde introducimos el fichero que contiene el kernel, incluyendo la ruta de directorio. Lo más normal es que sea `/vmlinuz` o `/boot/vmlinuz`

- `label=nombre` donde escribimos un nombre para el SO en cuestión, p. ej., "linux" para linux, pero para otros, puede ser "DOS", "win98"...como máximo pueden ser cadenas de 15 caracteres. Introduciendo ese nombre cuando LILO presenta el indicador (boot:) se selecciona el SO a iniciar.

- `root=partición root` donde indicamos el nombre de la partición linux nativa de nuestro sistema linux, p. ej., /dev/hdc2.

- `read-only` indica al kernel que ha de montar inicialmente la partición raíz en modo de sólo lectura. Es necesario indicar esta opción para la partición donde se montará el sistema de ficheros raíz.

Seccion otros SOs

- `other=partición` donde indicamos esta vez la partición de inicio del SO en cuestión, p.ej., `/dev/hda1`.

- `label=nombre` tal como se indicó antes, será el nombre con que etiquetemos dicho SO.

- `loader=gestor de arranque` Para cargar el SO, LILO construye un pseudo MBR en su fichero de mapeo. Esta opción especifica el fichero donde tomar el código del pseudo MBR. Por defecto el fichero es `/boot.chain.b`

- `table=tabla` establece el dispositivo fuente para la tabla de partición escrita en el pseudo MBR, usualmente `/dev/hda` o `/dev/sda`.

Otras opciones interesantes (solo algunas)

- `vga=modo` selecciona el modo VGA al inicio. Los modos válidos son "normal" (80x25), "ext" (extendido, 80x50) o "ask" (preguntar).

- `linear` hace que las referencias a los sectores se escriban como direcciones lógicas en lugar de físicas. Se emplea cuando LILO no reconoce correctamente la geometría del disco duro (debido a un remapeado por parte del BIOS).

- `message=ficheromensaje` establece el fichero cuyo texto se mostraría durante el arranque. No debe tener más de 24 líneas.

- `append=parámetro` permite pasar parámetros y componentes de hardware al kernel como cadena de caracteres. Por ejemplo, si nuestra memoria RAM es superior a 64 Mbytes, por ejemplo, 128, debemos pasarle el dato al kernel durante el arranque mediante (no necesario a partir de la serie 2.2.x)

        append="mem=128M"

- `delay=tiempo` establece el tiempo en décimas de segundo que LILO esperará antes de arrancar el primer SO. Generalmente se usa cuando se arranca un único SO, pues si no, la opción prompt es mucho mejor. Por defecto (sin la opción) LILO no espera y se inicia el SO inmediatamente.

Después de haber escrito el fichero `/etc/lilo.conf`, es necesario lanzar el "map installer" haciendo:

      /sbin/lilo

con lo cual LILO escribe un backup del sector de arranque, escribe la primera parte de su código en él y crea un nuevo fichero de mapeado (/boot/map). LILO anuncia entonces por la pantalla los SOs que gestiona, añadiendo una estrella al que se arrancará por defecto. Hay que recalcar que si cualquiera de los componentes de LILO cambia o se modifica su configuración mediante /etc/lilo.conf, es necesario volver a reinstalar LILO con /sbin/lilo.

Configuración mínima de LILO y configuración para gestionar linux y otro sistema operativo (win95)

Consideremos el siguiente fichero `/etc/lilo.conf` únicamente para arrancar linux:

      #
      #Fichero de configuración /etc/lilo.conf
      #
      # Sección general
      boot=/dev/hda
      delay=100
      vga=normal

      # Partición linux

        image=/vmlinuz
        root=/dev/hda1
        label=linux
        read-only

Este ejemplo se interpreta de la siguiente forma:

LILO se va a instalar en el MBR del disco duro `/dev/hda`. El modo de video EGA es 80x25, el sistema linux nativo se encuentra en la primera partición del disco duro (`/dev/hda1`) y la imagen del kernel se encuentra en el fichero /vmlinuz. Despues de 10 segundos, arrancará el sistema linux, cuyo nombre es "linux". Si hacemos `/sbin/lilo`, entonces aparecerá en el monitor:

      Added linux*

Veamos ahora otro fichero de configuración para gestionar linux y win95:

      #
      # Fichero de configuración /etc/lilo.conf
      #
      # Sección general

      boot=/dev/hda
      prompt
      timeout=100
      vga=normal

      # Partición linux

        image=/vmlinuz
        root=/dev/hdc1
        label=linux
        read-only

      # Partición Windows 95

        other=/dev/hda1
        label=win95
        table=/dev/hda

En este caso, LILO también está en el MBR del primer disco duro (`/dev/hda`) y hay dos sistemas operativos: linux en la partición `/dev/hdc1` y Windows 95 en la partición `/dev/hda1`. La tabla de partición para el gestor de arranque corresponde al dispositivo `/dev/hda`.

si hacemos `/sbin/lilo`, aparecerá el mensaje:

      Added linux*
      Added win95

lo que significa que LILO va a gestionar los dos sistemas operativos y que por defecto el primero en arrancar será linux.

Cuando reinicialicemos el sistema, si todo ha ido bien aparecerá la palabra LILO seguida del indicador de arranque

      LILO boot:

y así permanécera durante unos 10 segundos, pasados los cuales si no hemos escrito el nombre de uno de los SOs, cargará por defecto linux.

Si antes del tiempo, pulsamos la tecla TAB, entonces aparecerán en pantalla los nombres de los SOs gestionados:

      linux       win95

## 4.5 ¿Cómo desinstalo LILO?

Hay razones para desear desinstalar LILO. Una, desinstalar el sistema linux de nuestra máquina. Otra imperativa: porque algo va mal. LILO es un programa que, mal manejado, puede hacer al sistema no arrancable si se instala en el MBR. Mal configurado, impedirá el acceso al cualquier SO. En tales casos es indispensable disponer de disquetes de arranque para dichos SO. Por lo tanto es conveniente hacer el disco de arranque de Windows y el de arranque de linux (en el momento adecuado de la instalación del sistema) de manera que nos permita acceder via disquetera al sistema correspondiente en caso de imposibilidad de arrancar. Nótese que en el BIOS el arranque deberá comenzar por defecto en la disquetera A:.

Una vez que hemos arrancado el SO, hay muchas maneras de desinstalar LILO del MBR. Si nos encontramos en DOS o Windows, basta con ejecutar el comando MS-DOS

      FDISK /MBR (ó SYS C: si C: es el disco duro en cuyo MBR se instaló LILO)

si estamos en OS/2

      FDISK /NEWMBR

que escriben los primeros 446 bytes (el código de arranque) en el MBR y dejando las particiones ilesas.

si estamos en linux, basta con hacer

      /sbin/lilo -u

para restaurar el MBR anterior a la instalación de LILO

Además de todo esto puede hacerse otra cosa: Cuando LILO sobreescribe el MBR, salva una copia de backup en `/boot/boot.xxxx`, donde `xxxx` es un número mágico del dispositivo donde se ha instalado. Veamos algunos ejemplos

      Disco         /dev/zzz                xxxx
      IDE primario  /dev/hda                0300
      SCSI primario /dev/sda                0800
      floppy        /dev/fd0                0200

así, si queremos desinstalar LILO del sector de arranque de alguno de estos dispositivos, bastará con hacer:

      dd if=/boot/boot.xxxx of=/dev/zzz bs=446 count=1

Si LILO se ha instalado en una partición raíz, no hará no arrancable ningún otro sistema operativo. Únicamente, si está mal instalado, hará que no arranque linux. Si deseamos restaurar el sector de arranque de la partición /dev/yyyy (p.ej. /dev/hda1) podemos reescribir el sector de botado haciendo:

      dd if=/dev/yyyy of=New-file bs=512 count=1
      dd if=Backup-Date of=/dev/yyyy

si lo que queremos es desinstalar linux, borraremos la partición root con fdisk.

## 4.6 LILO no funciona bien. Diagnóstico de errores.

Cuando LILO se inicia, si todo ha ido bien, presenta en la pantalla las cuatro letras "LILO". Como ya vimos, cada letra correspondía a una acción. Si LILO no ha funcionado, las letras que presente en pantalla junto con ciertos mensajes, serán la clave para saber donde está el problema. Veamos los más comunes:

- "L" error: El primer tramo del código ha sido cargado pero no el segundo. Esto se debe generalmente a un error físico en el sector de botado o a un problema de geometría del disco.

- "LI":El segundo tramo del código ha sido invocado, pero no ha podido iniciarse. Esto sucede cuando hay un error de geometría de disco o se ha movido `/boot/boot.b` sin reinstalar LILO (`/sbin/lilo`).

- "LIL":El segundo tramo del código se ha iniciado pero no puede ubicar los datos que necesita en el fichero de mapeado. Esto puede deberse a un error físico del dispositivo de arranque o a un problema en la geometría del disco.

- "LIL?":El segundo tramo del código se ha cargado en una dirección de memoria equivocada. Esto se debe a un error en la geometría del disco o cuando se ha movido `/boot/boot.b` sin reinstalar LILO (`/sbin/lilo`).

- "LIL-":Los datos en el fichero de mapeado no son válidos. Las causas son las mismas que en el caso anterior.

La mayor parte de las veces, no se trata de un problema físico del dispositivo de botado, sino errores debidos a la no equivalencia entre la geometría del disco que fdisk presenta y que el BIOS ha remapeado. En tal caso el uso del parámetro "linear" en `/etc/lilo.conf` puede funcionar. Otras veces puede deberse a que se ha intentado instalar LILO en una partición lógica. Y otras veces a causas más sutiles. Por ejemplo: Yo arranco linux junto a otros sistemas operativos con el gestor de arranque de Partition Magic y tengo LILO en una partición raíz. Una vez hice un "resize" y cambié el tamaño de mi partición linux nativa porque necesitaba espacio para instalar nuevos programas. Al terminar e intentar arrancar linux de su partición, apareció en la pantalla "LI". Eso se debió a que después de haber hecho el cambio de tamaño, había movido `/boot/boot.b` y no había lanzado el map installer `/sbin/lilo`. Cogí mi disquete de arranque de linux, y cuando entré ejecuté la orden y reinicié el sistema. Todo funcionó.

Next Previous Contents