Crear un disco de arranque con Grub

Sinopsis:
El objetivo de este pequeño wiki es instalar el grub en un diskette para poder tener un sistema de arranque de emergencia.

Indice:

  1. Introducción
  2. Punto de partida
  3. Preparando un diskette: formateo
  4. Instalemos el GRUB
  5. Concluyendo la tarea

Introducción

Vale, no quedan casi disketeras, pero algunas se ven aún, y es una forma sencilla de colocar el arranque de Grub en un diskette. Eso nos permite tener un sistema de arranque alternativo, por si acaso ocurre algo con el MBR del disco duro principal, donde se suele instalar el Grub por defecto.

¿Para qué? Pues por dos razones al menos:

  • Pura seguridad. Por la misma razón por la que hacemos copias de seguridad... o debiéramos.
  • Por si una instalación de una nueva distro, de Windows u otro sistema operativo afecta al MBR.

No es el único medio, tampoco sé si es el mejor, pero es sencillo y funciona. Si alguien quiere ver otras formas posibles, en la red hay mucha información.

Nota: La creación del disco no sustituye el Grub que tenemos instalado en nuestro sistema (en el MBR del primer disco). No hay ningún riesgo, creo, en este sentido.

El diskette que vamos a crear, nos permitirá arrancar todos los sistemas operativos que tengamos instalados en nuestro sistema, en iguales condiciones que cuando arrancamos de forma habitual, eligiendo el sistema operativo.

Este método está comprobado en un KUBUNTU 8.04 Hardy Heron con escritorio KDE 3.5.

Punto de partida

Partiremos desde nuestro querido Kubuntu.
Por tanto, no estamos en una fase de reparar un arranque perdido, sino de preparar un diskette de arranque "preventivo".

Preparando un diskette: formateo

Necesitamos formatear un diskette. Lo podemos hacer en vfat o en ext2. El sistema de ficheros ext3 no se puede usar en un diskette.
Es vuestra elección, pondré las dos formas, si bien personalmente me decanto por el sistema vfat, pues el diskette será visible para Windows, si comparte ordenador con nuestro querido Kubuntu.

Para formatear en ext2 teclearemos en consola:

usuario@MAQUINA:~$ mkfs.ext2 /dev/fd0

Para formatear en vfat teclearemos en consola:

usuario@MAQUINA:~$ mkfs.vfat /dev/fd0

Hacemos notar que no es necesario ejecutar el comando con sudo. Lo podemos hacer como usuarios normales.
En mi caso la disketera es el dispositivo /dev/fd0. Supongo que esto es la situación más habitual. Si hubiera más de una, podría ser /dev/fd1, etc.
Este formateo también se puede hacer con KFloppy, que es un GUI para lo mismo, pero es muy sencillo de hacer en consola. Tú decides...

Instalemos el GRUB

Lo primero que haremos será montar el diskette:
Si está formateado como ext2:

usuario@MAQUINA:~$ sudo mount -t ext2 /dev/fd0 /media/floppy0

Si está formateado como vfat:

usuario@MAQUINA:~$ sudo mount -t vfat /dev/fd0 /media/floppy0

En mi caso, existen /dev/fd0 (como dije antes) y existe /media/floppy0. Revisa si en tu sistema es igual.

Tampoco he tenido que crear un directorio, pues /media/floppy0/ existe, es de hecho un punto de montaje recogido en fstab para la disketera /dev/fd0

Si quisiéramos montarlo en una carpeta inexistente, debiéramos crearla primero (sudo mkdir /media/Nueva_carpeta/)

A continuación, instalamos el grub:

usuario@MAQUINA:~$ sudo grub-install --root-directory=/media/floppy0 '(fd0)'

O podemos teclear también:

usuario@MAQUINA:~$ sudo grub-install --root-directory=/media/floppy0 /dev/fd0

'(fd0)' es la forma en que llama Grub al diskette y /dev/fd0 es la forma en que lo llama nuestro sistema. En principio, cualquiera de las dos valdría...

Esta será la salida del comando:

Probing devices to guess BIOS drives. This may take a long time.
Installing GRUB to (fd0) as (fd0)...
Installation finished. No error reported.
This is the contents of the device map /media/floppy0/boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.

(fd0)   /dev/fd0
(hd0)   /dev/sda

(Si tienes más discos, habrá más entradas, tales como

(hd1)   /dev/sdb
(hd2)   /dev/sdc

...etc.)

Concluyendo la tarea

El diskette que hemos creado es ya un disco de arranque que contiene una copia del boot de nuestro disco, pero no completa.
Si abrimos el diskette veremos el directorio /boot/ y dentro de él /grub/.

Pero si arrancaríamos con este diskette, tendríamos una consola de grub. Algo así como esto:

       [ Minimal BASH-like line editing is supported.   For
         the   first   word,  TAB  lists  possible  command
         completions.  Anywhere else TAB lists the possible
         completions of a device/filename. ]

grub>

Para arrancar el sistema, tendríamos que decirle dónde está o cuál es el kernel... No tiene gracia, sobre todo para los principiantes como nosotros.

Haremos algo mejor: copiaremos el menu.lst de nuestro boot al diskete.

El menu.lst lo encontramos en nuestro Kubuntu en /boot/grub/menu.lst

Lo copiamos al diskette mediante consola (ya que estamos.. acabaremos antes). Tecleamos (recuerda que con TAB se autocompletan los comandos):

usuario@MAQUINA:~$ sudo cp /boot/grub/menu.lst /media/floppy0/boot/grub/

En este caso usamos sudo pues /media/floppy0/boot/grub/ tiene permisos de sólo lectura para quien no sea el root.
(cp es el comando copiar y usamos su sintaxis básica: cp archivo_o_directorio_a_copiar carpeta_destino Esto es, copiamos el archivo menu.lst a la carpeta grub del diskette. Sólo que le indicamos la ruta completa donde está cada uno de ellos).

Podemos abrir el diskette y ya encontraremos dentro de /media/floppy0/boot/grub/ el archivo menu.lst.

Para terminar, desmontamos el diskette:

usuario@MAQUINA:~$ sudo umount /media/floppy0

Sacamos el diskette y lo protegemos contra escritura (moviendo la pestañita de tal forma que las dos ventanas queden huecas. Espero que me entiendas...)

Ya podemos probar el arranque.
Más rápido de hacer que de contar :-)

ADVERTENCIA: Ten en cuenta que hemos copiado el menu.lst en el diskette, pero este archivo puede cambiar si se instalan nuevas versiones del kernel. En caso de que se cambie menu.lst en una actualización (te lo advertirá el propio proceso de actualización), deberás copiar de nuevo el menu.lst. No es necesario que instales de nuevo el grub, sólo copiar el nuevo menu.lst.

Si quieres intentar evitar el tener que actualizar en un futuro menu.lst, puedes probar añadiendo estas dos entradas:

title Kubuntu arranque universal
root (hd1,0)
kernel /vmlinuz /dev/sdb1 ro quiet splash
initrd /initrd.img
quiet

title Kubuntu arranque universal (recovery mode)
root (hd1,0)
kernel /vmlinuz /dev/sdb1 ro single
initrd /initrd.img

Expliquemos estas entradas:
title Kubuntu arranque universal es lo que veremos en el menú de arranque. Por supuesto, pon el título que mejor te valga y haciendo, si quieres, referencia a la versión.
(hd1,0) hace referencia, en "lenguaje" Grub", a la partición primera (0) del disco segundo (hd1), esto es, hace referencia a que tenemos nuestro Kubuntu instalado en la primera partición de sdb, o sea, sdb1. Si está en otro lado, adaptémoslo, sabiendo que Grub cuenta desde 0, esto es hd0 es el primer disco, etc.
/vmlinuz y /initrd.img son dos enlaces que cuelgan de / (root) y apuntan a la última versión del kernel y de la imagen dentro de /boot.
Por tanto, aunque no actualicemos el menu.lst de nuestro diskette, mientras existan esos accesos directos, podremos arrancar nuesto sistema.
(Nota: esto es válido en Kubuntu 8.04 al menos)

Por favor, comenta lo que te parezca o corrige lo que te parezca necesario, gracias.
(No señalo "documentación" porque hay muchos sistemas en internet y mucha información, casi demasiada, y esto al final es fruto de tomar de aquí y de allí y un poco de experimentación personal.