En esta guia explicare paso a paso como crear un cd de arranque para maquinas que no tengan soporte para arrancar discos desde usb. Actualmente me veo obligado a usar este metodo en mi maquina porque no tengo discos duros (los quemé) y utilizo uno externo. Como mi placa no tiene soporte para arrancar desede usb ya que es algo antigua, arranco el grub desde un cd y este me lanza un init y un kernel que crean el sistema minimo que esta compilado con los modulos usb para que pueda leer el sistema de ficheros y cargar el resto de programas. La imagen no llega a los 15 megabytes por lo que la podeis grabar en un cd mini de 8 cm (unos 50 megabytes). Como tener el arranque en un cd nos impide poder actualizar el kernel, ya que habria que volver a grabar un nuevo cd con el init y el kernel de la nueva version, yo utilizo un cd rw, y asi para cambiar algo simplemente tengo que borrar el cd y volver a crear una imagen. En la imagen meteremos un menu.lst para tener una configuracion minima de grub.
Pulsa leer mas ver entera la guia
[break]

Lo primero de todo mencionar que esta guia la cree a partir de:
-Lista de correo Debian En este mensaje se hace para arrancar un sda desde un hda
-Manual de Grub Como instalar grub en un cd

Que necesitamos:
-grub (realmente solo necesitamos la stage2_eltorito)
-mkisofs (para crear la imagen)
-init y vmlinuz de nuestro linux

Todo esto lo hago sobre debian, ya que en la instalacion me reconoce el disco externo, pero sentiros libres de probar otras distros. Una vez lo teneis instalado, como se supone que no podeis arrancar vuestro propio linux, podeis meter un live cd, y desde hay con chroot compilar el init con el soporte usb. Por tanto, empezare suponiendo que estais en un live cd y que debian esta instalado en el disco externo (sda).

1º. Montamos el disco externo donde tenemos debian instalado:
# mkdir /debian
# mount -t ext3 /dev/sda1 /debian

-cambia ext3 por el sistema de ficheros que tengais

# mount -o bind /dev /debian/dev
# mount -o bind /proc /debian/proc
# mount -o bind /sys /debian/sys

-esto es para tener los dispositivos, y ram que creo el live cd en debian

# chroot /debian

- entramos ahora en nuestro debian (u otra distro que tengais instalada)

2º. Crear el init
# ls /boot/initrd*

-Esto te mostrara el initrd que tengas. Si tienes una version < 2.6.15 usaras initrd (opcion A), pero si tienes una version > 2.6.15 usa initramfs (opcion B). Recuerda que ahora estas como si hubieras arrancado debian.

-KERNEL_VERSION es el numerito que aparece al final de cuando hiciste el ls /boot/initrd*. te hara falta para el resto de cosas.

A.- Para initrd
# vim /etc/mkinitrd/mkinitrd.conf

cambiar la variable DELAY a 12 (DELAY=12)

#vim /etc/mkinitrd/modules

Añadir:
usb-storage
scsi_mod
sd_mod
sr_mod
ehci-hcd
ohci-hcd
usbcore


# mkinitrd -o /boot/initrd.img-KERNEL_VERSION KERNEL_VERSION 


B.- Para initramfs
# vim /etc/initramfs-tolls/initramfs.conf

y si no lo encuentras
# vim /etc/mkinitramfs/initramfs.conf

añadir a la variable WAIT 12 (WAIT=12)

# vim /etc/initramfs-tools/modules.conf

Añadir:
usb-storage
scsi_mod
sd_mod
sr_mod
ehci-hcd
ohci-hcd
usbcore


# mkinitramfs -o /boot/initrd.img-KERNEL_VERSION KERNEL_VERSION


El wait=12 o delay=12 es para que al arrancar le de tiempo al kernel a crear los /dev/sda y tener los dispositivos disponibles, vamos que se para el proceso de arranque unos 12 segundos, hay ya estaran disponible los discos y se prosigue con la carga del sistema que esta en el disco externo.

# exit

# umount /debian/dev
# umount /debian/proc
# umount /debian/sys

Nos salimos de nuestro debian y volvemos al cd live (no desmontes /debian que nos va a hacer falta ahora).

3º. Creamos la imagen con los correspondientes archivos.
# mkdir /iso
# mkdir -p /iso/boot/grub

Ahora tenemos que copiar el stage2_eltorito que es el grub para cd

#cp /usr/lib/grub/i386-pc/stage2_eltorito /iso/boot/grub


Si no esta ahí buscalo por carpetas de usr, o en /boot/grub o bajatelo desde aqui
Copiamos el kernel y el init generado anteriormente:
#cp /debian/boot/initrd.img-2.6.8-3-386 /iso/boot
#cp /debian/boot/vmlinuz-2.6.8-3-386 /iso/boot
Ahora necesitaremos unos cuantos archivos para meter en el cd (puedes modificarlos a tu gusto).
- menu.lst -> Configuracion del grub
- background.xpm.gz -> Fondo personalizado del grub
Y teniendo estos dos archivos deberia quedarnos unos directorios asi:

/iso/boot
  -initrd.img-2.6.8-3-386
  -vmlinuz-2.6.8-3-386

/iso/boot/grub
   -background.xpm.gz
   -menu.lst
   -stage2_eltorito

3.5º.Antes de crear la imagen hay que crear el archivo de configuracion de grub:

#Entrada por defecto a cargar
# 0 es la primera, 1 es la segunda, 2 es la tercera....
default 0

#Imagen de fondo
splashimage=(cd)/boot/grub/background.xpm.gz

#Tiempo de espera antes de cargar la entrada por defecto
timeout    30

#Entrada para cargar el disco usb
title        Debian GNU/Linux 2.6.8-3-386
#con cd lo que hacemos es decir que estamos leyendo los archivos desde esa ubicacion
root       (cd)
# si actualizais el kernel, simplemente hay que grabar una imagen con el kernel nuevo, y el initrd nuevo y cabiar
# aqui los nombres de los archivos, aunque si pones un nombre generico luego no tendras que modificar este archivo.
kernel    /boot/vmlinuz-2.6.8-3-386 root=/dev/sda1 ro
initrd     /boot/initrd.img-2.6.8-3-386
boot

#Una entrada para windows por si necesitamos entrar en el.
#Por defecto en el primer disco que halla
title        Microsoft winbug
#Esto se debe cambiar por donde se tenga el disco duro con windows, no pasa nada si no
# se hace porque grub da la opcion de editar estas lineas antes de cargar
root        (hd0,0)
chainloader    +1


Una vez tenemos el archivo de configuracion ya solo nos queda crear la imagen
Si hacemos un man mkisofs podemos averiguar:

   mkisofs [ options ] [ -o filename ] pathspec [pathspec ...]

[-R: algo del rock-ridge protocol (ni puta idea, pero funciona asi)]
[-b: eltorito boot image. Donde esta el stage2 (ruta relativa al ultimo parametro)]
[-no-emul-boot: no emula la imagen] [-boot-load-size: numero de sectores para cargar en el modo no-emulation, 4 para mayor compatibilidad]
[-boot-info-table: tabla con informacion de la especificacion "el torito" (ni puta idea de esto, pero asi funciona)]
[-o: archivo de salida]
[el ultimo parametro es la carpeta raiz de donde estan los archivos de la imagen]

Entonces hacemos:
# mkisofs -R -b boot/grub/stage2_eltorito -no-emul-boot \ -boot-load-size 4 -boot-info-table -o grub.iso /iso


Esto te dara una imagen, grabala con el k3b o con lo que quieras y con ese cd podremos arrancar desde cd, cualquier disco. Tambien vale por si no quieres poner el grub en un disco y lo prefieres en un cd (valdria con que hicieses desde el punto 3).