Multiboot USB drive (Português)

From ArchWiki

Uma unidade flash de múltipla inicialização USB permite inicializar múltiplos arquivos ISO a partir de um único dispositivo. Os arquivos ISO podem ser copiados para o dispositivo e inicializados diretamente sem a necessidade de extraí-los. Existem vários métodos disponíveis, mas eles podem não funcionar para todos arquivos ISO.

Usando GRUB e dispositivos de loopback

Tango-edit-clear.pngThis article or section needs language, wiki syntax or style improvements. See Help:Style for reference.Tango-edit-clear.png

Reason: multiple style issues (Discuss in Talk:Multiboot USB drive (Português))

Vantagens:

  • a necessidade de uma única partição;
  • todos arquivos ISO podem ser localizados no mesmo diretório;
  • adicionar arquivos ISO é muito simples.

Desvantagens:

  • nem todas as imagens ISO são compatíveis;
  • o menu de inicialização original para o arquivo ISO não será exibido;
  • pode ser difícil encontrar uma entrada de inicialização funcional.

Preparação

Tango-view-fullscreen.pngThis article or section needs expansion.Tango-view-fullscreen.png

Reason: Quanto espaço adicional é necessário para o bootloader? (Discuss in Talk:Multiboot USB drive (Português))

Crie pelo menos uma partição e um sistema de arquivos suportado pelo GRUB na unidade USB. Veja Partitioning e File systems#Create a file system. Escolha o tamanho baseado no tamanho total dos arquivos ISO que desejar armazenar na unidade, mais um espaço adicional para o bootloader.

Instalando o GRUB

Instalação única

Monte o sistema de arquivos localizado na unidade USB:

# mount /dev/sdXY /mnt

Crie o diretório /boot:

# mkdir /mnt/boot

Instale GRUB na unidade USB:

# grub-install --target=i386-pc --recheck --boot-directory=/mnt/boot /dev/sdX

No caso de você desejar inicializar ISOs em modo UEFI, terá de instalar grub para o alvo UEFI:

# grub-install --target=x86_64-efi --removable --boot-directory=/mnt/boot --efi-directory=/mnt

Para UEFI, a partição deverá ser a primeira da tabela de partições MBR e deverá ser formatada com FAT32.

inicialização híbrida com UEFI GPT + BIOS GPT/MBR

Esta configuração é útil para criar uma unidade USB universal, teoricamente inicializável em qualquer computador. Em primeiro lugar, você deverá criar uma tabela de partições GPT em seu dispositivo. Serão necessárias, pelo menos, 3 partições:

  1. Uma partição do tipo BIOS boot (código do gdisk EF02). Esta partição deverá ter 1 MiB de tamanho
  2. Uma partição do tipo EFI System partition (código do gdisk EF00 com uma EFI system partition#Formatar a partição|FAT32 filesystem). Esta partição poderá ser pequena, como 50 MiB.
  3. Sua partição de dados (use um sistema de arquivos suportado pelo GRUB). Esta partição poderá ocupar o espaço restante da unidade USB.

Tango-inaccurate.pngThe factual accuracy of this article or section is disputed.Tango-inaccurate.png

Reason: Must create because something might not be enough? (Discuss in Talk:Multiboot USB drive (Português))

A seguir você deverá criar uma tabela de partições MBR híbrida, pois definir uma boot flag no setor protetivo da MBR poderá não ser suficiente em alguns casos.

Exemplo de criação de uma tabela de partições MBR híbrida usando gdisk:

# gdisk /dev/sdX

Command (? for help): r
Recovery/transformation command (? for help): h

WARNING! Hybrid MBRs are flaky and dangerous! If you decide not to use one,
just hit the Enter key at the below prompt and your MBR partition table will
be untouched.

Type from one to three GPT partition numbers, separated by spaces, to be added to the hybrid MBR, in sequence: 1 2 3
Place EFI GPT (0xEE) partition first in MBR (good for GRUB)? (Y/N): N

Creating entry for GPT partition #1 (MBR partition #1)
Enter an MBR hex code (default EF): 
Set the bootable flag? (Y/N): N

Creating entry for GPT partition #2 (MBR partition #2)
Enter an MBR hex code (default EF): 
Set the bootable flag? (Y/N): N

Creating entry for GPT partition #3 (MBR partition #3)
Enter an MBR hex code (default 83): 
Set the bootable flag? (Y/N): Y

Recovery/transformation command (? for help): x
Expert command (? for help): h
Expert command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): Y

Não se esqueça de formatar as partições:

# mkfs.fat -F32 /dev/sdX2
# mkfs.ext4 /dev/sdX3

Agora será possível instalar GRUB para suportar ambos EFI + GPT e BIOS + GPT/MBR. A configuração do grub (--boot-directory) poderá ser mantida no mesmo lugar.

Primeiro, você deverá montar a partição do tipo 'EFI system' e a partição de dados da unidade USB.

Um exemplo disso poderia ser como a seguir:

# mount /dev/sdX3 /mnt
# mkdir -p /mnt/boot/EFI
# mount /dev/sdX2 /mnt/boot/EFI

Então, você poderá instalar GRUB para UEFI com:

Nota: na maioria dos casos EFI_MOUNTPOINT corresponde ao subdiretório /mnt/boot/EFI na unidade USB montada.

# grub-install --target=x86_64-efi --recheck --removable --efi-directory=/EFI_MOUNTPOINT --boot-directory=/DATA_MOUNTPOINT/boot

E para BIOS com:

# grub-install --target=i386-pc --recheck --boot-directory=/DATA_MOUNTPOINT/boot /dev/sdX

Como opção de reserva, você poderá também instalar o GRUB na sua partição MBR inicializável:

# grub-install --target=i386-pc --recheck --boot-directory=/DATA_MOUNTPOINT/boot /dev/sdX3

Configurando GRUB

Usando um modelo

Existem alguns projetos no git que fornecem alguns arquivos de configuração do GRUB preexistentes, e um grub.cfg genérico que poderá ser usado para carregar outras entradas de inicialização sob demanda, exibindo-as somente caso os arquivos ISO especificados - ou pastas que contenham-nos - estiverem presentes na unidade.

Multiboot USB: https://github.com/hackerncoder/multibootusb

GLIM (GRUB2 Live ISO Multiboot): https://github.com/thias/glim

Configuração manual

Para a proposta de uma unidade USB inicializável, é mais fácil editar o arquivo grub.cfg manualmente do que gerá-lo. Alternativamente, faça as seguintes alterações em /etc/grub.d/40_custom ou /mnt/boot/grub/custom.cfg e gere o /mnt/boot/grub/grub.cfg usando GRUB#Gerar o arquivo de configuração principal|grub-mkconfig.

Como é recomendado usar um nome persistente ao invés de /dev/sdxY para identificar a partição na unidade USB onde estarão as imagens, defina uma variável conveniente para manter o valor. Se as imagens ISO estiverem na mesma partição do GRUB, use o seguinte para ler o UUID na inicialização:

/mnt/boot/grub/grub.cfg
# caminho para a partição onde estão as imagens ISO (usando UUID)
probe -u $root --set=rootuuid
set imgdevpath="/dev/disk/by-uuid/$rootuuid"

Ou especifique explicitamente a UUID:

/mnt/boot/grub/grub.cfg
# caminho para a partição onde estão as imagens ISO (usando UUID)
set imgdevpath="/dev/disk/by-uuid/UUID_value"

Alternativamente, use a LABEL do dispositivo ao invés da UUID:

/mnt/boot/grub/grub.cfg
# caminho para a partição onde estão as imagens ISO (usando LABEL)
set imgdevpath="/dev/disk/by-label/label_value"

A UUID ou LABEL necessária poderá ser encontrada usando lsblk -f. Não use a mesma LABEL do Arch ISO para a unidade USB, caso contrário o processo de inicialização falhará.

Para finalizar a configuração, uma entrada de inicialização para cada imagem ISO deverá ser adicionada abaixo deste cabeçalho, veja exemplos na próxima seção.

Entradas de inicialização

Assume-se que as imagens ISO estão armazenadas no diretório boot/iso/ e no mesmo sistema de arquivos onde o GRUB está instalado. Do contrário, será necessário prefixar o caminho para o arquivo ISO com a identificação do dispositivo ao usar o comando loopback, por exemplo loopback loop (hd1,2)$isofile. Como esta identificação de dispositivos não é persistente, não será usada em exemplos nesta seção.

Pode-se usar a nomenclatura de dispositivo de bloco persistente dessa forma. Substitua a UUID de acordo com a UUID do seu sistema de arquivos ISO.

# define globalmente (isto é, fora de qualquer menu de entrada)
insmod search_fs_uuid
search --no-floppy --set=isopart --fs-uuid 123-456
# depois, usa dentro de cada menu de entrada
loopback loop ($isopart)$isofile
Dica: For a list of kernel parameters, see the kernel's command-line parameter documentation. For more examples of boot entries, see the GRUB upstream documentation or the documentation for the distribution you wish to boot.

Lançamento mensal do Arch Linux

Veja também archiso.

menuentry '[loopback]archlinux-2020.10.01-x86_64.iso' {
	set isofile='/boot/iso/archlinux-2020.10.01-x86_64.iso'
	loopback loop $isofile
	linux (loop)/arch/boot/x86_64/vmlinuz-linux img_dev=$imgdevpath img_loop=$isofile earlymodules=loop
	initrd (loop)/arch/boot/intel-ucode.img (loop)/arch/boot/amd-ucode.img (loop)/arch/boot/x86_64/initramfs-linux.img
}

Veja README.bootparams para opções de archiso suportados pela linha de comando do kernel.

Memtest86+

Memtest86+ está incluido na ISO mensal.

menuentry '[loopback]archlinux-2020.10.01-x86_64.iso' {
	set isofile='/boot/iso/archlinux-2020.10.01-x86_64.iso'
	loopback loop $isofile
	linux16 (loop)/arch/boot/memtest
}

archboot

Veja também archboot.

menuentry '[loopback]archlinux-2014.11-1-archboot' {
	set isofile='/boot/iso/archlinux-2014.11-1-archboot.iso'
	loopback loop $isofile
	linux (loop)/boot/vmlinuz_x86_64 iso_loop_dev=$imgdevpath iso_loop_path=$isofile
	initrd (loop)/boot/initramfs_x86_64.img
}

Usando Syslinux e memdisk

Usando o módulo memdisk, a imagem ISO é carregada na memória, e seu bootloader é carregado. Certifique-se de que o sistema que irá inicializar esta unidade USB tem uma quantidade de memória suficiente para o arquivo de imagem e para executá-la como um sistema operacional.

Preparação

Certifique-se de que a unidade USB está adequadamente Partitioning#particionada e que é uma partição com um sistema de arquivos suportado pelo Syslinux, como por exemplo FAT32 ou ext4. Então, instale o Syslinux nesta partição, veja Syslinux#Installation on BIOS.

Instalação do módulo memdisk

O módulo memdisk não foi instalado no ato da instalação do Syslinux, portanto deverá ser instalado manualmente. Monte a partição onde o Syslinux está instalado para /mnt/ e copie o módulo do memdisk para o mesmo diretório onde o Syslinux estiver instalado:

# cp /usr/lib/syslinux/bios/memdisk /mnt/boot/syslinux/

Configuração

Após copiar os arquivos ISO para a unidade USB, edite o Arquivo de configuração do Syslinux e crie as entradas de menu para as imagens ISO. Uma entrada básica corresponde a algo como:

boot/syslinux/syslinux.cfg
LABEL some_label
    LINUX memdisk
    INITRD /path/to/image.iso
    APPEND iso

Veja memdisk on Syslinux wiki para mais opções de configuração.

Caveat para sistemas 32-bit

Ao inicializar um sistema 32-bit a partir de uma imagem maior do que 128MiB, é necessário aumentar o uso máximo de memória de vmalloc. Isto é feito adicionando vmalloc=valorM aos parâmetros do kernel, onde valor é maior do que o tamanho da imagem ISO, em MiB. [1]

Por exemplo, ao inicializar um sistema 32-bit a partir da Arch installation ISO, pressione a tecla Tab sobre a entrada Boot Arch Linux (i686) no menu e adicione vmalloc=768M ao final. Pular este passo resultará no seguinte erro durante a inicialização:

modprobe: ERROR: could not insert 'phram': Input/output error

Ferramentas automatizadas

  • GRUB2 Live ISO Multiboot (GLIM) — Um conjunto de arquivos de configuração do GRUB para transformar uma unidade USB formatada em VFAT com imagens ISO de distribuições GNU/Linux em uma unidade USB de inicialização múltipla.
https://github.com/thias/glim || not packaged? search in AUR
  • liveusb-builder — Um conjunto de scripts para criar uma unidade USB de inicialização múltipla para distribuições GNU/Linux.
https://github.com/mytbk/liveusb-builder || liveusb-builder-gitAUR
  • MultiBootUSB — Um software Python cross-platform com interfaces CLI e GUI interfaces que permitem instalar e remover múltiplas imagens live do Linux em uma unidade USB.
https://github.com/mbusb/multibootusb || multibootusbAUR
  • MultiSystem — Ferramente gráfica que permite installar, gerenciar e remover múltiplas imagens ISO em uma unidade USB.
http://liveusb.info/dotclear/ || multisystemAUR
  • Ventoy — Uma ferramenta de código aberto para criar uma unidade USB inicializávelpara arquivos ISO/WIM/IMG/VHD(x)/EFI. Não é necessário formatar o disco várias vezes, apenas copiar os arquivos para a unidade USB e inicialize-a diretamente.
https://www.ventoy.net || ventoy-binAUR

Veja também