USANDO LILO PARA ACTIVAR/DESACTIVAR, OCULTAR/DESOCULTAR
PARTICIONES EN EL MOMENTO DEL ARRANQUE



Generalmente, las distribuciones instalan una version de lilo sin capacidad de alterar tablas de particiones en el arranque. Esto es asi, porque
fueron compiladas sin esta opcion, no porque lilo no pueda hacerlo.

Esta capacidad si que la tienen otros "bootmanagers" habituales como OS-BS, el Advanced Boot Manager de M. Ranish, los comerciales...

No hay problema, basta con compilar LILO con la opcion REWRITE_TABLE.


Esta capacidad es muy util para situaciones muy habituales: por ejemplo, tenemos o queremos tener en un disco (o en varios) una particion
primaria con W95, otra con W98, otra con DOS y otra con Linux (amen de alguna extendida con varias logicas para alojar FAT-16 con datos a
compartir, swaps, ...).

Sabemos que, por restricciones y particularidades de los arranques de DOS/W9x , si tenemos dos o mas particiones de DOS/W9x en el mismo
disco para poder arrancar una de ellas satisfactoriamente tiene que estar activa (o ser la primera) y estar desactivas las demas. Naturalmente,
esto lo podriamos hacer a mano con fdisk arrancando primero una Linux o un disquete DOS, pero es demasiado latoso. Quisieramos que el
propio LILO u otro "bootmanager" lo hiciera de forma automatica en el momento del arranque. Esto implica alterar un byte de varias de las
entradas de la tabla de particiones principal (lo que es inofensivo para los datos y geometria de las particiones).

Ademas, si vamos a instalar W9x en una de esas particiones primarias que tenemos reservadas para ello, quizas no queramos que se entere de
que hay otras particiones con DOS o Windows, para evitar intervenciones no deseadas. De hecho, si ya existe una particion primaria con
DOS/Win9x y queremos crear otra con el FDISK de DOS/Win9x para instalar DOS/Win9x, tendremos que ocultar las particiones primarias
preexistentes para que el FDISK de DOS/Win9x pueda crear la nueva deseada. Esto es debido a restricciones artificiales impuestas por
Microsoft a su FDISK de DOS/Win9x. O, una vez instaladas, queramos que cada particion de Windows pueda arrancar de tal forma que las
demas le aparezcan "ocultas", para que no se interfieran entre si, y poder hacer practicas tranquilamente. Esto es lo que los "bootmanagers"
suelen llamar "hiding" o "FAT-hiding"

Hay que tener presente que los arranques de DOS/W95 trataran de "montar" automaticamente cualquier particion con formato FAT que
encuentren. No existe la posibilidad de que el SO nos pregunte cuales particiones queremos montar y cuales no.

La solucion, el "FAT hiding", consiste en que en el "bootmanager" altere el byte de identificacion del tipo de particion en las entradas de la
tabla principal de particiones correspondientes a particiones primarias FAT, poniendo, por ejemplo 82 (que la identificaria como "swap" de
Linux) en lugar de 6 (una FAT-16 de mas de 32M) o cualquier otro identificador que los pobres DOS/Windows no reconozcan y no traten de
montar.

Nuevamente, esto podria hacerse mano cada vez, pero es una lata, y nuevamente, este cambio en la tabla de particiones no afecta ni a la
geometria de la particion ni a los datos contenidos en ella.

ATENCION: Por un curioso "bug" del arranque del DOS (y por tanto de Windows 95), si queremos que una primaria DOS tras arrancar vea
correctamente otra primaria DOS del mismo disco, la ultima de las posibles unidades logicas ha de ser FAT. Para mas informacion, pincha aqui.


EJEMPLO DE ACTIVACION Y DESACTIVACION EN EL ARRANQUE

ATENCION: lo que viene en el Linux+DOS+W95 mini-HOWTO solo funcionaba con versiones de lilo realmente viejas (menores o iguales que la
0.17). Ademas no funcionaba adecuadamente en segundos u otros discos. Ahora hay que utilizar change, como puede verse en el ejemplo.


En principio donde pone DOS podemos poner Windows 95 o 98. Igualmente, el ejemplo funciona si hay FAT-32 en lugar de FAT-16

Particiones del unico disco:
1.primaria FAT-16 con Windows 95
2.extendida que "contiene" las logicas 5, 6, y 7
3.primaria FAT-16 con DOS
4.primaria Linux native
5.logica FAT-16
6.logica con Linux swap
7.logica FAT-16

Y queremos que cuando arranque Windows 95 o el DOS de la 3 estos vean todas las particiones FAT

Para ello, LILO debe activar de forma automatica la particion que arranque y desactivar las demas FAT primarias (debido a las restricciones que
impone el arranque de los SO's de Microsoft). Para ello y como se explica mas arriba, lilo debe estar compilado con la opcion de
REWRITE_TABLE.

Se instala un LILO adecuado ejecutando lilo con el siguiente /etc/lilo.conf:

# Comienzo del /etc/lilo.conf
boot=/dev/hda # LILO a la MBR . Si queremos hacer
# pruebas, mejor poner /dev/fd0, y
# meter un disquete

# map=/boot/map # si estan en esas rutas, son innecesarias
# install=/boot/boot.b # estas dos lineas


# prompt # Si lo prefieres, descomenta estas dos
# timeout=500 # lineas y comenta las dos siguientes
delay=30
default=redhat5

# Seccion dedicada a la primera particion primaria
other=/dev/hda1
label=win95
# table=/dev/hda # No hace falta
change
partition=/dev/hda1 # i.e: si se elige "arrancar" esta seccion
activate # se activa la part con win95 y se
partition=/dev/hda3 # desactiva la part con DOS
deactivate


# Seccion dedicada a la "segunda" particion primaria, que
# en este caso es la tercera de la tabla de particiones y del disco
other=/dev/hda3
label=dos
# table=/dev/hda
change
partition=/dev/hda3 # Ahora se activaria la part con DOS
activate # y se desactivaria la part con Win95
partition=/dev/hda1
deactivate

# Seccion que contiene la imagen de un kernel de Linux
image=/boot/vmlinuz
label=redhat5
root=/dev/hda4 # particion que tras arrancar el kernel
read-only # ha de tomarse como root de Linux

# Seccion que contiene la imagen de otro kernel del linux
image=/boot/nuevo.kernel-2.0.32
label=mikernel
root=/dev/hda4
read-only

# Fin del /etc/lilo.conf


Ah!, naturalmente la particion de Microsoft que arranque siempre se autoasignara la C:


EJEMPLO CON FAT-HIDING EN EL ARRANQUE

ATENCION: para que funcione esto seguro, es necesaria al menos la v. 0.20 de lilo (que es la que viene en todas las distribuciones recientes)


En principio donde pone DOS podemos poner Windows 9x SOBRE FAT 16 y viceversa. Si una de las primarias contiene Win9x sobre FAT32
ver el ejemplo general de mas abajo.

Particiones:
1.primaria FAT-16 con Windows 95
2.extendida que "contiene" las logicas 5, 6, y 7
3.primaria FAT-16 con DOS, de tipo BIGDOS, i.e. mayor de 32M
4.primaria Linux native
5.logica FAT-16
6.logica con Linux swap
7.logica FAT-16

Y queremos que cuando arranque:
1.Windows 95 NO "vea" o monte la particion DOS (la 3) pero si todas las logicas FAT-16 (entonces, para W95, 1 -> C:, 5 -> D:,
7 -> E:)
2.el DOS de la particion 3 vea todas las particiones FAT INCLUSO la de Windows 95 (entonces, 3 -> C:, 5 -> D:, 7 -> E: y
1 -> F:)

Para ello, LILO debe, de forma automatica en el arranque, activar en la tabla de particiones la particion que arranque y escribir en la tabla su
identidad correcta, y desactivar las demas FAT primarias asi como dotar de una identidad desconocida para el DOS/Win9x que arranca a las
particiones primarias que deseamos que dicho DOS/Win9x "no vea". (Eso es debido a las restricciones que impone el arranque de los SO's de
Microsoft). Para ello y como se explica mas arriba, lilo debe estar compilado con la opcion de REWRITE_TABLE.

(Quiza se pregunte, si es el caso de dos Win95 en particiones primarias, como es posible instalar esto dos Win95 sin que uno pise al otro ?
Naturalmente, instalando uno en la primera primaria, "ocultando" luego esta particion a mano con fdisk de Linux o con el Partition Manager, e
instalando a continuacion el segundo Win95 en la ahora unica particion primaria tipo FAT16. Mas detalles en esta seccion.)

Se instala un LILO adecuado ejecutando lilo con el siguiente /etc/lilo.conf:

# Comienzo del /etc/lilo.conf
boot=/dev/hda # LILO a la MBR . Si queremos hacer
# pruebas, mejor poner /dev/fd0, y
# meter un disquete

# map=/boot/map # si estan en esas rutas, son innecesarias
# install=/boot/boot.b # estas dos lineas


# prompt # Si lo prefiere, descomente estas dos
# timeout=500 # lineas y comente la siguiente
delay=30 # Mas info sobre el tema en 3.3
default=redhat5

# Seccion dedicada a la primera particion primaria
other=/dev/hda1
label=win95
# table=/dev/hda
change
partition=/dev/hda1
activate # Activa la particion 1 !!!!
partition=/dev/hda3
deactivate # Desactiva y oculta la 3 (realmente
set=DOS16_big_hidden # la identifica como de tipo 86) !!

# Seccion dedicada a la "segunda" particion primaria
other=/dev/hda3
label=dos
# table=/dev/hda
change
partition=/dev/hda3
activate # Activa e identifica como BIGDOS
set=DOS16_big_normal # la particion 3 !!!
partition=/dev/hda1
deactivate # y desactiva la particion 1 !!!

# Secciones con imagenes de kernels
image=/boot/vmlinuz
label=redhat5
root=/dev/hda4
read-only
image=/boot/nuevo.kernel-2.0.32
label=mikernel
root=/dev/hda4
read-only
# Fin del /etc/lilo.conf


Notese el uso de la palabra reservada set y de los nombres de tipos de particiones DOS16_big_normal y DOS16_big_hidden, que ya
vienen predefinidos por lilo. Junto con los correspondientes DOS12 y DOS16_small, son los UNICOS predefinidos.

Si se desea "ocultar/desocultar" otros tipos de particiones, lease la seccion siguiente.


EJEMPLO CON OCULTACION DE CUALQUIER TIPO DE PARTICION

En el ejemplo anterior, puede verse como LILO puede "ocultar/desocultar" particiones primarias FAT 16, en las que tendremos DOS o Windows
95's.

En el fondo lo que LILO puede hacer es cambiar en el momento del arranque la identidad de las particiones, es decir, el byte que identifica a
cada particion en la tabla de particiones. Si a una particion se le pone una identidad que un SO no conoce, aparecera oculta a este.

Por defecto, la configuracion de LILO, el /etc/lilo.conf, entiende nombres "amigables" predefinidos, como DOS16_big_normal.

Pero el usuario puede definir con type otros nombres arbitrarios para cualquier tipo de particion; nombres que luego usara, si quiere, en cada
seccion other dentro de un comando change.

Solo hay que saber la numeracion en hexadecimal de los tipos de particion necesarios, y, ademas, cuales conoce cada SO. Por supuesto, esto
solo es necesario si se pretende arrancar SO's limitados, que no poseen la capacidad de que el usuario decida que particiones "montar" o no.

La sintaxis es la siguiente:

change-rules
# reset # Si se descomenta, borra los tipos
# predefinidos. Da igual.

type = nombre_que_yo_elijo_para_este_tipo_de_particion
normal=0x_identidad_de_la_particion_del_SO_X
hidden=0x_id_de_una_part_que_X_no_monta_automaticamente
type = otro_nombre_para_otra_particion
normal=0x_identidad_de_la_particion_del_SO_Y
hidden=0x_id_de_una_part_que_Y_no_monta_automaticamente

# _y_asi_sucesivamente

Escribiendo subsecciones change dentro de cada seccion other del /etc/lilo.conf puede "programarse" cualquier regla de cambio
entre particiones, siendo dependiente estos cambios de que seccion other se arranque. Esto se apreciara mejor con el siguiente EJEMPLO:

Particiones del primer disco:
1.primaria FAT-16 con un simpatico DOS
2.extendida que "contiene" las logicas 5, 6, y 7
3.primaria FAT-16 con Windows95, de tipo BIGDOS, i.e. mayor de 32M
4.primaria FAT-32 con Windows98
5.logica FAT-16
6.logica con Linux swap
7.logica FAT-16

Particiones del segundo disco:
1.primaria Linux native con el / de una Red Hat Eurielec
2.primaria Linux native para /home
3.primaria Linux native con el / de una Debian

Y queremos que cuando arranque:
1.DOS "vea" o monte todas las particiones que el pobre pueda (entonces, para DOS, 1->C:, 5 -> D: 7 -> E:, 3 -> F:)
2.Windows 95 NO monte ni la particion DOS (la 1) ni la Win98 (la 4) pero si todas las logicas FAT-16 (entonces, para W95, 3 -> C:, 5
-> D:, 7 -> E:)
3.Windows 98 NO monte ni la particion DOS (la 1) ni la Win95 (la 3) pero si todas las logicas FAT-16 (entonces, para W98, 4 -> C:, 5
-> D:, 7 -> E:)
4.Cualquier Linux del segundo disco monte lo que el administrador haya elegido en el correspondiente archivo de configuracion de este
buen sistema operativo :-)

(Quiza se pregunte: como es posible instalar Win95 y Win 98 sin que uno pise al otro ? Naturalmente, instalando uno en una primaria,
"ocultando" luego esta particion a mano con fdisk de Linux o con el Partition Manager, e instalando a continuacion el segundo Win95 o 98 en
otra primaria tipo FAT16, tipo FAT32 o hueco. Mas detalles en esta seccion.)

Supongamos que hemos arrancado la Debian. Primero hacemos una copia de seguridad del viejo /etc/lilo.conf si nos servia para algo:
# cp /etc/lilo.conf /etc/lilo.conf.anterior

Despues, y esto ES IMPORTANTE, ejecutamos como root fdisk, damos a la opcion p, que nos imprimira la tabla de particiones. Y miramos
muy bien cual es la identidad de cada particion. Las FAT 16 de un DOS o Windows 95 van a ser 0x06, y la de Windows 9x sobre FAT 32 sera,
probablemente, 0x0b, pero tambien podrian darse los casos, 0x0c, 0x0e y 0x0f. En tales casos, el lector encontrara elemental las substituciones
correspondientes que debe realizar en el /etc/lilo.conf de mas abajo.

Despues, se instala un LILO adecuado ejecutando lilo con el siguiente /etc/lilo.conf:


boot=/dev/fd0 # LILO a un disquete mientras hacemos
# pruebas. Cuando todo vaya bien,
# ponemos /dev/hda

#map=/boot/map # No hacen falta, pues son los
#install=/boot/boot.b # valores por defecto
# pero si no se desea "pisar" el viejo archivo /boot/map,
# poner map=/boot/map.nuevo por ejemplo
# Esto NO es necesario. Si queremos recrear el viejo map
# basta con usar el viejo /etc/lilo.conf

# prompt # Si lo prefiere, descomente estas dos
# timeout=500 # lineas y comente la siguiente
delay=30 # Mas info sobre el tema en 3.3

default=redhat # Por supuesto !!



change-rules # Aqui damos nombres a los tipos de
# reset # particiones. Son completamente
# arbitrarios. Lo unico importante
# son las identidades de cada tipo de
# particion. Se dan en hexadecimal.
type = FAT16
normal=0x06 # aqui defino FAT16_normal
hidden=0x16 # aqui defino FAT16_hidden
# 0x16 no la conoce ni DOS ni Win9x
type = FAT32
normal=0x0b # FAT32_normal es una FAT_32 de Windows 9x
hidden=0x1b # 0x1b no la conoce DOS ni Win9x

# Y asi sucesivamente ...
# Podriamos haber tomado como hidden en los dos casos por ejemplo
# 0x82 o 0xFF. Hubiera sido igual. Ni DOS ni Win9x las conocen.
# Pero ya hay alguna convencion no oficial establecida: asi
# si tambien ejecutamos el OS/2 Boot Manager o el Partition Manager
# de Michael Ranish, si hay una 0x16, estos la tomaran como
# una FAT16 oculta; si hay una 0x1b, como una FAT32 oculta

# Seccion dedicada a la primera particion primaria con el DOS
other=/dev/hda1
label=dos
# loader=/boot/chain.b
# table=/dev/hda
change
partition=/dev/hda1
activate # No es necesario, al ser la primera primaria
set=FAT16_normal # Por si estaba oculta...
partition=/dev/hda3
deactivate # Si hay varias activas, DOS pitara
set=FAT16_normal # A si DOS la "vera"
partition=/dev/hda4
deactivate # pa que DOS no se queje
set=FAT32_normal # Da igual: DOS no monta las FAT32


# Seccion dedicada a la particion primaria con Windows 95 en FAT16

other=/dev/hda3
label=win95
# loader=/boot/chain.b
# table=/dev/hda
change
partition=/dev/hda1
deactivate # Es necesario
set=FAT16_hidden # No queremos que Win9x acceda aqui
partition=/dev/hda3
activate # Es neceario: pues no es la primera
set=FAT16_normal # Por si estaba "oculta"
partition=/dev/hda4
deactivate # Necesario
set=FAT32_hidden # No queremos que vea a Win98

# Seccion dedicada a la particion primaria con Windows 98 en FAT32

other=/dev/hda4
label=win98
# loader=/boot/chain.b
# table=/dev/hda
change
partition=/dev/hda1
deactivate # Necesario
set=FAT16_hidden # No queremos que moleste aqui
partition=/dev/hda3
deactivate # Necesario
set=FAT16_hidden # No queremos que Win98 crea que exista
partition=/dev/hda4
activate # Necesario: no es la primera primaria
set=FAT32_normal # Por si estaba oculta....


# Seccion dedicada a la particion primaria con Redhat Eurielec
# El que sea primaria no es importante. Arrancaria igual de bien
# si fuera /dev/hdb9 :-)

image=/boot/vmlinuz # Suponemos que instalamos LILO desde la eurielec
label=debian # con la particion /dev/hdb3 montada en /mnt/debian/
root=/dev/hdb1
read-only
image=/mnt/Debian/boot/vmlinuz
label=redhat
root=/dev/hdb3
read-only

# FIN DEL LILO.CONF