liveUSB: Un linux portable en un USB de 2GB

underCons's picture
Dejo por aquí un breve howto que explica batallitas sobre un USB que estoy preparando para un evento:

El siguiente documento explica como crear un liveUSB desde un ordenador con gnu/Linux en 11 pasos.

Al finalizar, vas a disponer de una memoria USB con un gnu/Linux portable, capaz de iniciar tu ordenador en modo liveUSB y de mantener de forma persistente la configuración que ahí apliques.

Requisitos previos:
  • Un ordenador con gnu/Linux (distribución basada en debian)
  • Conexión a internet.
  • Un pendrive de al menos 2GB
Este manual se basa en la información aportada por múltiples fuentes entre las que destacamos los siguientes COMOs (HOWTOs):

0) Haciendo uso de este pendrive (o algún otro USB bootable) confirmamos que nuestra BIOS es capaz de iniciar desde USB.
  • Apagamos el ordenador.
  • Conectamos el USB.
  • Iniciamos el ordenador...
  • ... y esperamos 3 o 4 minutos a que se complete el proceso de arranque.
Si podemos ver el liveUSB de la moot funcionando en gnu/Linux, nuestra BIOS es apta para este tipo de dispositivos.

1) Trabajaremos como usuario administrador (root):
 $ sudo su -

2) Descubrimos el nombre del dispositivo del pendrive:
 $ fdisk -l
Que mostrará alguna línea como:
 Disco /dev/sdb: 2017 MB, 2017525248 bytes
En el ejemplo vemos como el pendrive de 2GB es /dev/sdb, pero en adelante, en este manual usamos sdX para indicar que debe ajustarlo a su caso concreto.

3) Definimos las particiones del disco:

Como se comenta en uno de los enlaces referenciados, Windows sólo muestra la primera de las particiones
 $ fdisk /dev/sdX
Eliminamos todas las particiones existentes con:
  • -> d 1 (hasta eliminar todas las particiones)
  • -> p

Al introducir "p" debe mostrarse un listado vacío como:
 Disposit. Inicio Comienzo Fin Bloques Id Sistema
Creamos las particiones:
Primero la de Windows y datos (1250 MB):
  • -> n p 1
  • -> Inicio: Enter (por defecto)
  • -> Fin: +1250M

Luego la del liveUSB (linux de 750M, reducible a 600M)
  • -> n p 2
  • -> Inicio: Enter (por defecto)
  • -> Fin: Enter (por defecto)

Definimos el tipo de cada una:
  • -> t 1 b (FAT32)
  • -> t 2 6 (FAT16)

Y marcamos desde dónde queremos iniciar el sistema:
  • -> a 2

Si todo ha ido bien, el resultado debe ser similar a:
 Disco /dev/sdb: 2017 MB, 2017525248 bytes
 63 cabezas, 62 sectores/pista, 1008 cilindros
 Unidades = cilindros de 3906 * 512 = 1999872 bytes
 Identificador de disco: 0x1a32ba82

 Disposit. Inicio Comienzo Fin Bloques Id Sistema
 /dev/sdb1 1 626 1222547 b W95 FAT32
 /dev/sdb2 * 627 1008 746046 6 FAT16
Guardamos cambios y salimos:
  • -> w

4) Formateamos las nuevas particiones:
 $ mkfs.vfat -F 32 -n moot /dev/sdX1
 $ mkfs.vfat -F 16 -n xubuntu8 /dev/sdX2

5) Transferimos el sistema a la partición de inicio:
 $ sudo apt-get install syslinux mtools
 (por si no disponemos de las herramientas necesarias).
 $ syslinux -sf /dev/sdX2

6) Montamos las nuevas particiones:
Retirar el disco y volver a insertarlo para que el sistema lo cargue.

7) Creamos un espacio para conservar los cambios de usuario en el liveUSB:

(En vez de usar una partición optamos por un sólo fichero de loopback de 650M que podríamos reducir en un futuro cuando el sistema esté configurado y actualizado)
 $ dd if=/dev/zero of=/media/moot/casper-rw bs=1M count=650

8) Y formateamos el nuevo fichero con la nueva "partición virtual":
 $ mkfs.ext3 /media/moot/casper-rw
Que muestra un mensaje informativo y solicita confirmación:
 mke2fs 1.40.8 (13-Mar-2008)
 /media/moot/casper-rw no es un dispositivo especial de bloques.
 -> ¿Continuar de todas formas? (s,n) s

9) Descargamos una imagen con el liveCD de xubuntu (o su distro preferida) y la montamos para que se comporte como un CD:

 $ cd root
 $ mkdir liveCD
 $ cd liveCD
 $ wget cdimage.ubuntu.com/xubuntu/releases/hardy/release/xubuntu-8.04.1-desktop-i386.iso  $ mount -o loop -tiso9660 xubuntu*.iso /cdrom 

10) Copiamos algunos ficheros del liveCD a nuestro liveUSB:
 $ cd /cdrom
 $ cp -rfv casper dists install pics pool preseed .disk isolinux/* \
 md5sum.txt README.diskdefines install/mt86plus /media/xubuntu8

11) Descargamos algunos archivos de inicio y configuración preparados para el liveUSB persistente:
 $ cd /media/xubuntu8
 $ mv isolinux.cfg isolinux.cfg.ini
 $ wget pendrivelinux.com/downloads/xu8/syslinux.cfg

 $ cd casper
 $ rm initrd.gz
 $ wget pendrivelinux.com/downloads/xu8/initrd.gz

Eso es todo. Ya puede probar su nuevo liveUSB.


Posibles problemas:

Si tras realizar todos estos pasos no logras que el sistema se inicie desde la memoria USB, puede ser debido a una MBR (Master Boot Record) corrupta.

Puede repararla con "lilo":
 $ sudo apt-get install lilo
 $ lilo -M /dev/sdX


Si más adelante deseas modificar el espacio del casper-rw loopback, sólo tienes que crear un nuevo dispositivo con el nuevo tamaño (¿pongamos que recortas a 700MB?):
 $ dd if=/dev/zero of=casper-rw2 bs=1M count=700
 $ mkfs.ext3 casper-rw2
Para luego montar el viejo casper y el nuevo:
 $ mkdir /casper-old
 $ mkdir /casper-new
 $ mount -o loop casper2 /casper-new
 $ mount -o /media/moot/casper-rw /casper-old
Copiar del viejo al nuevo:
 $ cp /casper-old/* /casper-new -a
Desmontar ambos dispositivos:
 $ umount /casper-old
 $ umount /casper-new
Y sobreescribir el antiguo casper-rw con la nueva versión:
 $ chmod user:root casper-rw2
 $ chown 755 casper-rw2
 $ cp casper-rw2 /media/moot/casper-rw -af

Como dice aquel: ¡¡¡ That's all folks !!! :-P