USB mágica

Cómo llevar varias distros linux en una USB.

Opción sencilla que inutiliza el USB

Esta opción funciona para cualquier distro varias distros 1 pero hace que la USB parezca ser el CD, dejándolo inútil para todo lo demás. No la recomiendo, pero generalmente funciona cuando lo demás falla.

sudo dd if=/DONDE/ESTÁ/EL/archivo.iso of=/dev/sd[x]

Iniciar GNU/Linux desde una ISO en una USB

Hay tres cosas necesarias para correr una distro desde la ISO:

  • El programa que cargador de arranque debe poder leer la USB.
  • El núcleo (linux) debe compilarse con soporte para montar archivos (loop-mount).
  • El initrd debe tener instrucciones para cargar desde el ISO (o contener todo el sistema).

Desde hace un tiempo, ubuntu y derivadas ofrecen esa posibilidad. También es posible con Parabola GNU/Linux.

Usando Grub2

Preparar la USB

El primer paso es preparar la USB. Si el USB tiene nombre, puede usarse para identificar la USB:

ls -l /dev/disk/by-label
total 0
[...]
lrwxrwxrwx 1 root root 10 May 21 13:15 xihh -> ../../sdc1

Aquí veo mi usb que se llama xihh, en el disco sdc.

Luego con lsblk obtenemos más información. La opción -o +UUID es para conocer su identificador único.

lsblk -o +UUID
NAME                  MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT              UUID
[...]
sdc                     8:32   1  29.1G  0 disk
└─sdc1                  8:33   1  24.4G  0 part  /run/media/user/label 9806-B364

La USB debe tener al menos una partición en formato FAT32 que tenga la opción boot. Este arreglo funciona tanto para usar EFI como para el modo anterior para iniciar la compu (MBR).

La mayoría de las USB se venden con una sola partición FAT32, así que sólo falta agregar la etiqueta boot, usando gparted:

  • Dar click derecho en la partición,
  • click en la opción Manage Flags,
  • click en la opción boot y
  • click en OK.

Instalar GRUB

Una vez preparado el USB, se necesita instalarle grub. Las computadoras nuevas utilizan EFI para bootear, así que conviene utilizar este formato:

grub-install --target=x86_64-efi --efi-directory=/run/media/joshpar/xihh/ --bootloader-id=grub --recheck --debug

Sin embargo, si también pensamos utilizar la USB para computadoras más viejas, también conviene instalar grub para MBR (la forma anterior de iniciar la máquina).

sudo grub-install --target=i386-pc --grub-setup=/bin/true --recheck --boot-directory=/run/media/joshpar/xihh/EFI /dev/sdc

Aquí usé el mismo directorio de EFI para la otra instalación para que todo quede en el mismo sitio.

Descargar las imágenes del sistema operativo

Se descargan las imágenes (.iso) de la distro que se va a probar. Yo hago una carpeta en /donde/está/el/USB/iso y allí pongo las imágenes.

Hay que recordar dónde para generar el archivo de configuración.

Configurar GRUB para iniciar desde la USB

Lo más recomendable, es que GRUB reconozca la USB según su identificador único (UUID), para evitar errores.

Aquí hay un ejemplo de cómo debe quedar el archivo /donde/está/el/USB/EFI/grub.cfg

# partition tables
insmod part_gpt
insmod part_msdos
# efi mode
insmod efi_gop
insmod efi_uga
# solve some output problems
insmod gfxterm
terminal_output gfxterm
# use the USB as root for all commands
set UUID=9806-B364
search --no-floppy --fs-uuid --set=root $UUID
submenu "Parabola" {
    set isofile="/iso/parabola-2013.09.01-dual.iso"
    loopback loop $isofile
    menuentry "parabola Linux Netinstall x86_64" {
        linux (loop)/parabola/boot/x86_64/vmlinuz img_loop=$isofile img_dev=/dev/disk/by-uuid/$UUID parabolaisolabel=PARA_201309 earlymodules=loop
        initrd (loop)/parabola/boot/x86_64/parabolaiso.img
    }
    menuentry "parabola Linux Netinstall i686" {
        linux (loop)/parabola/boot/i686/vmlinuz img_loop=$isofile img_dev=/dev/disk/by-uuid/$UUID parabolaisolabel=PARA_201309 earlymodules=loop
        initrd (loop)/parabola/boot/i686/parabolaiso.img
    }
}
menuentry "Trisquel" {
    set isofile="/iso/trisquel_6.0.1_amd64.iso"
    loopback loop $isofile
    linux   (loop)/casper/vmlinuz.efi root=UUID=$UUID boot=casper iso-scan/filename=${isofile} file=/cdrom/preseed/ubuntu.seed noprompt noeject --
    initrd  (loop)/casper/initrd.lz
}
menuentry "Ubuntu" {
    set isofile="/iso/ubuntu-14.04-desktop-amd64.iso"
    loopback loop $isofile
    linux   (loop)/casper/vmlinuz.efi root=UUID=$UUID boot=casper iso-scan/filename=${isofile} file=/cdrom/preseed/trisquel.seed noprompt noeject --
    initrd  (loop)/casper/initrd.lz
}

Ocultar las carpetas en windows

Para que desde windows no se muestren las carpetas del SO en windows, se puede usar fatattr (es muy probable que deba instalarse primero):

fatattr +s +h /donde/está/el/USB/{EFI,boot,iso}

Problemas comunes

La última vez que intenté instalar en mi USB tuve dificultades para iniciar desde la USB. El problema puede deberse a varias razones:

  • El sistema de archivos está corrupto:

    • Realizar una revisión (yo usé gparted para arreglarlo).
  • El usb se quemó.

    • Conseguir uno nuevo.

Programa relacionado

Yo no he probado este software, pero lo comento porque parece prometedor. http://multibootusb.org/

Más lecturas

El archivo web del sitio en que se basó este post.

El script original en que se inspiró este post.

http://www.muktware.com/2011/08/create-bootable-usb-of-arch-linux/1668

Tutorial que revisa varios programas para multiboot.

Tutorial que revisa cómo guardar datos para una distro que corre desde una USB.


  1. Porque la mayoría hacen imágenes híbridas considerando este caso de uso. [return]
More Reading