martes, 16 de febrero de 2010

Obsesiones surtidas: Mejorando la compatibilidad de Grub4dos en el pendrive

Grub4dos es una herramienta increíble: puede bootear directamente linux, xp, vista y seven, puede montar diskettes o imagenes iso, y tiene una linea de comandos poderosa, que nos permite buscar las opciones corectas en vivo.

En mi pendrive de laburo el grub4dos se encarga de bootear un par de mini XP, el Hirens 10, la consola de recuperacion de XP, las ISO de Acronis TrueImage y Puppy 4.21 y el Slitaz, una mini distro que es rápida y maneja bien NTFS.

Lamentablemente para nosotros, los habitantes del subdesarrollo, algunas máquinas de las que son mayoría por estos lares (maquinas con DDR y sin SATA, sin muchas opciones para bootear desde usb) tienen problemas para llegar al menú.

PROBLEMAS Y SOLUCIONES

El primer problema es en el booteo. El síntoma es que al arrancar desde el pendrive el sistema se queda colgado con un cursor parpadeante en la esquina superior izquierda, y es incapaz de cargar el grub. La solución que nos propone la gente del Hirens es cargar grub.exe desde syslinux, que es un arranque mucho más amigable. El archivo que descargamos de la página de hirens no hace mas que instalar el syslinux, copiar a la raiz del pen el grub.exe y el archivo syslinux.cfg, que contiene solo la sentencia “default /grub.exe”. Elegante y conciso. Y funciona. Por supuesto, nosotros no podemos dejar tranquilo ese syslinux.cfg, pero eso es de otros posts que ya pasaron!

El otro problema, con el que me encuentro mas veces de las que quisiera, nos deja en la línea de comandos de grub sin mostrarnos nuestro menú. Esto sucede porque la bios esta reconociendo el pendrive como un diskette, y nuestro grub4dos esta seteado explícitamente para no buscar en floppies.

Cómo sabemos si es esa la causa? Buscando nuestro menu.lst desde la linea de comandos con find /menu.lst el comando nos devuelve un bonito (fd0).

La solución más directa es hacer a mano lo que el grub no quizo hacer automáticamente.

Tipeamos:

find --set-root /menu.lst
configfile /menu.lst


Y tendremos nuestro menú. Hay que tener en cuenta que estamos booteando con fd0 como root, lo cual no suele gustarle al hirens, pero los chainloaders del xp o las iso no tienen mayores problemas para arrancar.

Pero... para los enfermos como yo existe una solucion más permanente, que nos evita el delay de cargar a mano el menú. Podemos modificar las opciones de arranque del grub4dos.

Parte de la magia de este bootloader está en su capacidad de cargar automáticamente el menu.lst. Si lo arrancamos en una máquina lenta, y tocamos las teclas del cursor al iniciar, podemos entrar en un menú intermedio, cuyas entradas buscan al archivo menu.lst en el directorio raiz /, en /grub y en /boot/grub. Al editar estas entradas vemos al culpable de nuestras desdichas. La línea que busca el menu.lst es así:
find --set-root --ignore-floppies --ignore-cd /menu.lst

y la siguiente

configfile /menu.lst

Bien! Ahora sólo nos queda sacar la parte de “ignore floppies” del menú intermedio, para que el boot funcione de primera.

Pero dónde está ese menú? Esta es la parte divertida del procedimiento. El menú está en el archivo grub.exe (y en el grldr, pero como usamos syslinux ese no nos importa), y podemos editarlo directamente con un editor hexadecimal.

Voy a usar el TinyHexer, que es el que llevo en el pendrive. No por nada en particular.

El truco es buscar la cadena de texto “--ignore-floppies --ignore-cd /menu.lst” en el archivo, seleccionar la parte de “--ignore-floppies“ y eliminarla. Acá una muestra de cómo se ve en mi editor:



That´s all folks!

PD: Para los que quieren todo cocinado, aca les dejo mis Grub.exe y grldr modificados.

PD2: Calmadas nuestras obsesiones, ya podemos seguir viendo los capitulos de Fringe que nos quedan. Hasta luego!

11 comentarios:

CoskiBukowski dijo...

Bah yo hace poquito me fui al once y me compré un portacd de 40 por 3 pesitos, y ya fue, ahi pongo el hirens, el winxp y todo eso, y chau xD jajaa

Un abrazo

486 dijo...

Coski: podés hacerla completa, comprarte varios mini cd de esos de 210Mb y llevarlos en un mini estuche. Cuando lo sacas y te preguntan que es, podes contestar "es mi pendrive"!
Saludos che

CoskiBukowski dijo...

Jaja, claro, me compro esas CD-card, y las tengo todas en la billetera :P

Anónimo dijo...

Yo uso un cd booteable hecho con easyboot porque tengo unos athlon que no bootean por usb, una lastima, pero tambien es verdad que muchas maquinas nuevas vienen sin cd y sin dvd, no se cual sera la solucion en este caso para Coski jaja. Muy bueno el blog, el mejor que encontre en internet y me alegro que sea de Bs As. Suerte. Demian

486 dijo...

Gracias Che! L{astima que el blog se actualize tan poco, no?
Yo debo confesar que adem{as de mis pendrives llevo un portacds con el hirens9, instalaciones de wx y seven y todas esas cosas. Nos vemos por acá!

CoskiBukowski dijo...

Che loco te quedó el teclado en inglés :P jejeje

V_N dijo...

Buenas!! Muy bueno esto aunque me parece llegue tarde.
Linux... Uso linux.
Menu.lst... Lo conozco.
Windows... Y lamentablemente.
Bootear desde un pen drive un SO... Todo bien. (bueh maso, pero bien XD )
Ahora no tengo absolutamente ninguna idea para saber como es esto de bootear varios SO, y tan diferentes, me leí todo el blog y creo que algo entendí, pero ni idea por donde empezar.
Me mande sólito y le tire un Hiren Boot, como es lógico hasta acá, todo bien, ahora ni idea por donde seguir. Si me podes guiar un cachito, nada, apenas seria buenísimo.
Gracias y muy bueno el blog (lo que entendí XD )

486 dijo...

V_N: ando algo desconectado estos días, asi que llego tarde a responderte. Igual por si te sirve:
Si pusiste el hirens >9.7 entonces tenes gran parte hecha. Si lo pusiste con syslinux mejor todavía. Ahora deberías tener en la raiz del pen los archivos syslinux.cfg y menu.lst Esos son lo que hay que editar para agregar mas sistemas. En el blog hay algun procedimiento general para agregar varios linux (en grub o syslinux) o para bootear windows (por chainload desde grub). BUscate el manual de grub y empeza por ahi, cualquier cosa avisá. Y si seguis perdido, podés preguntar en concreto qué queres agregar y te ayudamos. Suerte!

V_N dijo...

Esta es la tercera ves que quiero responder pero por alguna razón no puedo (debe ser el windows, siempre va a ser el windows aunque no lo sea realmente)
Por ahora te digo... Gracias, muchas gracias.
Ya te volveré loco.

V_N dijo...

Ahora si, es el 4to mensaje que respondo. (vamoss a ver si era la cuenta de gmail la que no agarraba)
Hago una consulta, quiero meter un XP personalizado en el multiboot, pero no consigo hacerlo botear.
¿Tenemos pasos (tuto) para hacer esto?
y la otra (dije una, ¿No? je), es da lo mismo en terminos de memoria, botear una ISO que botear el contenido de esta?
Eso es todo por ahora.
Saludos..
PD: Falta el aviso de L Arruga!

486 dijo...

V_N: Te respondo suponiendo algunas cosas:
1)Si lo que querés poner en el pendrive es una instalacion de xp personalizada (nliteada etc) tenes un problema: los métodos para instalar desde pendrive no funcan bien con esas (te pide el cluf y se cuelga ahi).
2)Si hiciste un xp booteable y queres arrancarlo desde el pen, vas mejor: a veces basta con encontrar el loader (ntldr, o setupldr, u otro segun el caso) y cargarlo con chainload desde grub4dos. Te conviene hacer las pruebas desde la consola y después armar las lineas del menu.lst.

Sobre lo segundo: si tenes mucha memoria esta bueno cargar la iso en memoria y bootearla desde ahí. Pero eso, usas ponele 700 mb para la iso y el resto para el funcionamiento.
Si descomprimis la iso y la booteas con un bootloader el sistema toma el pen como raíz, y lee desde ahí lo que leería del cd. Por ahí desgasta mas el pendrive y es mas lento, pero es así.
Avisá como te fue.
PD: Falta, tenés razón!
PD2:Todo no se puede!