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