sábado, 7 de marzo de 2026

Cómo configurar una memoria USB multiboot con 30+ distribuciones GNU Linux - Parte 2


Continuando con este interesante proyecto, en esta segunda parte veremos el proceso de preparación del dispositivo USB y la configuración de los dos gestores de arranque que tendrá la misma (GRUB2 y Syslinux).

Manos a la obra...

Preparación del dispositivo USB

ADVERTENCIA: LOS COMANDOS QUE USAREMOS A CONTINUACIÓN ELIMINAN PARTICIONES Y DATOS EXISTENTES EN EL DISPOSITIVO USB. POR LO QUE ES IMPORTANTE IDENTIFICARLO PREVIAMENTE ASEGURÁNDONOS DE QUE ESTAMOS TRABAJANDO SOBRE EL DISPOSITIVO DESTINADO PARA ESTE PROYECTO.

Para identificar nuestro dispositivo en /dev usaremos el comando lsblk:

fraterneo@rainbow:~$ lsblk
NAME                                          MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
sda                                             8:0    1 114.6G  0 disk

La salida del comando mostró varios dispositivos, de los cuales solo estoy mostrando sda. Por lo que en los comandos subsiguientes todo apuntará a /dev/sda para crear las particiones /dev/sda1 y /dev/sda2. La salida del comando lsblk no muestra nada en MOUNTPOINTS y debe ser así ya que si esta montado no será posible trabajar sobre él. Si tu dispositivo se encuentra montado debes desmontarlo usando el comando umount.

Eliminamos del dispositivo cualquier filesystem existente:

fraterneo@rainbow:~$ sudo wipefs -a /dev/sda

Dado que el dispositivo cuenta con un espacio de 114.6G, crearemos las dos particiones para que cada una cuente con el 50% del almacenamiento disponible (más o menos):

fraterneo@rainbow:~$ sudo parted /dev/sda --script mklabel msdos
fraterneo@rainbow:~$ sudo parted /dev/sda --script mkpart primary fat32 1MiB 62GiB
fraterneo@rainbow:~$ sudo parted /dev/sda --script mkpart primary ext4 62GiB 100%

Creamos los filesystems en las particiones correspondientes, FAT32 para sda1 y Ext4 para sda2. Incluimos la opción -E root_owner=$UID:$GUID en la creación del filesystem Ext4, asignando como propietario al usuario del entorno actual, para evitar inconvenientes con los permisos a la hora de crear archivos en dicha partición:

fraterneo@rainbow:~$ sudo mkfs.vfat -F32 -n multiboot /dev/sda1
fraterneo@rainbow:~$ sudo mkfs.ext4 -L iso -E root_owner=$UID:$GID /dev/sda2

Aprovechamos completamente el tamaño del filesystem Ext4, pasando a 0 el espacio reservado (el mismo no es necesario cuando se usa solo para almacenamiento):

fraterneo@rainbow:~$ sudo tune2fs -m 0 /dev/sda2


Instalación de GRUB2

Montamos la partición sda1:

fraterneo@rainbow:~$ sudo mount /dev/sda1 /mnt

Instalamos GRUB2 para EFI:

fraterneo@rainbow:~$ sudo grub2-install --target=x86_64-efi --removable --efi-directory=/mnt/multiboot/ --boot-directory /mnt/multiboot/boot --no-nvram --force

Instalamos GRUB2 para BIOS (Legacy Support):

fraterneo@rainbow:~$ sudo grub2-install --target=i386-pc --removable --boot-directory /mnt/multiboot/boot /dev/sda

Por alguna razón grub2-install no copia el archivo lnxboot.img, pero lo haremos manualmente:

fraterneo@rainbow:~$ cp /usr/lib/grub/i386-pc/lnxboot.img /mnt/multiboot/boot/grub2/i386-pc/

Lo podríamos dejar hasta éste punto y todo funcionaría bien: GRUB2 como gestor de arranque tanto para EFI como para BIOS. Sin embargo, agregaremos el gestor de arranque Syslinux (sólo funciona para BIOS) y dentro de él una opción en el menú para cargar GRUB2 y, dentro de GRUB2 una opción en el menú para volver a Syslinux.


Instalación de Syslinux

Creamos el directorio donde residirá Syslinux. Si no tienes Syslinux instalado en tu distribución, puedes buscarlo en el gestor de aplicaciones, instalarlo, localizar dónde fue instalado y sustituir las rutas en donde sea necesario:

fraterneo@rainbow:~$ sudo mkdir /mnt/multiboot/boot/syslinux

Instalamos Syslinux en su ruta y también lo copiamos al MBR:

fraterneo@rainbow:~$ sudo syslinux --install --directory boot/syslinux /dev/sda1
fraterneo@rainbow:~$ sudo dd if=/usr/share/syslinux/mbr.bin of=/dev/sda bs=440 count=1

Agregamos los demás archivos de Syslinux necesarios para su funcionamiento:

fraterneo@rainbow:~$ cp /usr/share/syslinux/chain.c32 /mnt/multiboot/boot/syslinux/
fraterneo@rainbow:~$ cp /usr/share/syslinux/memdisk /mnt/multiboot/boot/syslinux/
fraterneo@rainbow:~$ cp /usr/share/syslinux/menu.c32 /mnt/multiboot/boot/syslinux/
fraterneo@rainbow:~$ cp /usr/share/syslinux/vesamenu.c32 /mnt/multiboot/boot/syslinux/
fraterneo@rainbow:~$ cp /usr/share/syslinux/libcom32.c32 /mnt/multiboot/boot/syslinux/
fraterneo@rainbow:~$ cp /usr/share/syslinux/libutil.c32 /mnt/multiboot/boot/syslinux/
fraterneo@rainbow:~$ cp /usr/share/syslinux/reboot.c32 /mnt/multiboot/boot/syslinux/
fraterneo@rainbow:~$ cp /usr/share/syslinux/libmenu.c32 /mnt/multiboot/boot/syslinux/

Finalmente establecemos el boot flag del dispositivo USB, sin ésto no hay arranque:

fraterneo@rainbow:~$ sudo parted /dev/sda set 1 boot on


En ésta segunda parte vimos cómo preparar nuestro dispositivo para éste proyecto estableciendo las particiones y sus respectivos filesystems. También instalamos GRUB2, tanto para EFI como para BIOS (legacy), instalamos Syslinux (un gestor de arranque BIOS legacy) desde el que nos podremos mover a GRUB2 legacy y viceversa.

Para la siguiente entrega veremos los archivos de configuración de GRUB2 y Syslinux y la estructura de directorios que vamos a formar para comenzar a colocar las distribuciones y sus respectivas entradas en los menús de los gestores de arranque.

Si tienes alguna duda o sugerencia, no dudes dejármelo saber en los comentarios.



Artículos relacionados



Widget by Hoctro | Jack Book

0 comments:

Publicar un comentario