En un comentario en la entrada sobre
grub4dos en el menu de arranque de vista, Reirok nos recomendó un
manual de grub4dos mas completo que el wiki oficial.
De ahí saque la clave para manejarme mejor en la consola de grub, y aprendí un par de comandos que me resultaron útiles para hacer lo que siempre trato de hacer: bootear todo lo que se me ocurra. Aqui se los voy dejando, por si alguien con mi misma enfermedad quiere jugar un poco.
Primero los básicos: root : sirve para decirle al grub desde que particion queremos bootear. La primera particion del primer disco rígido es (hd0,0) , y de ahi en adelante. El comando nos devuelve amablemente una linea donde nos indica el tipo de particion y el sistema de archivos: "Filesystem type is fat, partition type 0xb".
kernel : indica el nucleo de sistema a cargar. Se usa principlamente para bootear linux.
initrd: tambien para linux, indica el nombre de la imagen de sistema base que se usa.
boot : arranca el sistema usando los parametros dados antes
Y ahora los mágicos; los que nos resuelven los problemas:Problema uno: no me acuerdo cómo de llama el kernel que tengo que bootear, en que disco se encuentra o en que directorio lo puse.find nos devuelve el disco en el que se encuentra el archivo buscado. No hace búsqueda recursiva, por lo que necesitamos decirle en que directorio buscar, pero en caso de que no sepamos bien ese dato podemos usar TAB para autocompletar.
Por ejemplo, si queremos encontrar el archivo de imagen de floppy de win98, que esta en una carpeta img, o imagen, o images etc, basta con poner:
find / +TAB, nos da el listado de lo que hay en / en el disco (hd0,0). De ahi sacamos el nombre del directorio (imagenes, por ejemplo).
find /imagenes/ +TAB nos lista el contenido del directorio imagenes en (hd0,0), para saber el nombre de la imagen.
find /memdisk nos devuelve (hd0,0) (porque copie el archivo ahí para probar)
Ahora podemos bootear el diskette colocando
root (hd0,0)kernel /memdiskinitrd /imagenes/win98.imgbootPara ahorrarnos un paso, podemos combinar find y root colocando
find --set-root /memdisk ; lo que nos devuelve la salida de ambos comandos.
Problema dos: me cargué el arranque de xp/vista/win98 y necesito bootearlo.chainloader hace lo que su nombre indica: encadena el arranque del grub con otro cargador a nuestro antojo. Así podemos bootear win98 sin instalar el boot, copiando io.sys, msdos.sys y command,com al disco (hd0,0) y corriendo
chainloader /io.sys, o xp con
chainloader /ntldr o el menu de arranque de vista con
chainloader /bootmgr.
Hay que tener en cuenta que este método requiere que el disco de arranque sea el (hd0).
Para los que vienen siguiendo el blog, esto simplifica enormemente el trabajo de colocar el hirens, el livexp y cualquier linux en el pendrive. Basta con copiar todo a la raíz del pen, instalar grub4dos y modificar el menu.lst. Quizas haga un mini howto paso a paso en otro post.chainloader también sirve para bootear desde una particion (bootsector) o disco (mbr). Así, si queremos bootear desde el mbr del disco (hd0) usamos
chainloader (hd0)+1, que le indica a grub que botee del disco hd0, el sector1 (que es donde se encuentra el mbr); y si queremos iniciar desde lilo, instalado en el bootsector del (hd0,3),. basta con poner
chainloader (hd0,3)+1Problema tres: mi disco de windows no aparece como (hd0), y no me funciona el chainloader/ntldr.map es un comando muy útil que nos permite solucionar este tema. Basicamente nos permite engañar al sistema que queremos arrancar para que crea que el disco X esta en la posición Y. Por ejemplo, si tenemos la particion de windows xp en (hd1,1) y queremos hacer
chainloader /ntldr, tenemos que decirle a grub que haga aparecer el disco hd1 como hd0:
map (hd1) (hd0)Si ahora usamos
find /ntldr el comando nos devuelve
(hd0,1)(hd1,1)Esto es porque el disco 1 esta mapeado en hd0, y esta realmente en hd1.
Ahora, si queremos volver a tener acceso al disco 0 anterior, o necesitamos verlo en dos, lo mejor es hacer el cambio completo
map (hd1) (hd0)map (hd0) (hd1)y por fin, si queremos ver los cambios antes de bootear, podemos salir de esta ambigua situacion con
map --hookeste comando hace efectivos los mapeos anteriores, con lo que el resultado de
find /ntldr pasa a ser
(hd0,1)map es una instrucción muy potente, que aparte nos permite montar una imágen de floppy o de disco rigido como (fd0) o (hd0). Lamentablemente, esta funcion requiere que la imagen en cuestión sea contigua en el disco (no fragmentada), con lo que muchas veces el mapeo nos da un error.
Para solucionar esto podemos usar el modificador
--mem, que carga la imagen en memoria antes de bootear (para imágenes de disco, hay que tener en cuenta que necesitamos tener ram al menos del tamaño de la imagen).
Por ejemplo, para montar nuestra imagen del disco de inicio de win98:
map --mem (hd0,0)/images/win98.ima (fd0) Como dato adicional, el comando
map --mem puede montar imagenes comprimidas con gzip (así como memdisk puede bootear zip).
Nota extra: todos los que nos obsesionamos tratando de crear cds/pendrive multiarranque soñamos con la utilidad que nos permita montar una imagen iso y arrancarla desde un menú. Mejor aún: una que busque en el pendrive todas las iso que pongamos adentro, y nos de un menú desde el que elegir cuál queremos bootear. Bueno, grub4dos no hace eso todavía, y es posible que no lo haga. Pero la posibilidad de
mapear una iso como (hd32) y bootearla con chainloader es lo mas cercano que ví hasta ahora.
Problema cuatro: tuve que reinstalar windows y me cargué el boot de linux.Este problema podría solucionarse con una vuelta larga: bootear windows, acceder a la particion de linux con el plugin ext2 de totalcommander, extraer el menu.lst, imprimirlo, bootear grub4dos e ingresar a mano los parametros de kernel e initrd con todos sus append. O más corta, ubicar el menu.lst anterior en el disco, listarlo con
cat y copiar a mano los parametros. En lugar de eso tenemos un comando que nos permite cargar el menu.lst de nuestro linux como menu de grub4dos.
configfile le indica a grub4dos cual es el archivo de configuracion que debe usar. Así, si teníamos nuestro linux en (hd1,5), que vendría a ser la primera unidad lógica de la partición extendida del segundo disco, podemos buscarla con:
find /boot/grub/menu.lst(hd1,5)y después cargar el menu con
configfile (hd1,5)/boot/grub/menu.lst, con lo que tendremos todas las opciones que habíamos perdido. Hay que tener en cuenta que es posible que las opciones de arranque no funcionen sin laburo extra. Por ejemplo, si booteamos grub desde un pendrive; este se pone como (hd0,0), desplazando la nomenclatura de los discos internos, por lo que debemos hacer algo de edición "en vivo" sobre las opciones para sacarlas andando.
El comando
configfile también es útil para hacer submenuses, solamente haciendo entradas que apunten a distintos archivos de configuración. Si quieren ver un excelente ejemplo vean
SGD. Un estudio de los archivos de menú les va a dar una idea más clara.
Ya escribí demasiado. Chau, que lo disfruten!
PD: cada comando tiene un link a la guia del amigo diddy, en la que todo está mucho (mucho) mejor explicado. Les recomiendo que lo sigan, para hacerse una idea de que tan mala es esta mini guia.