Multiboot USB drive (Português)
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
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
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:
- Uma partição do tipo BIOS boot (código do gdisk
EF02
). Esta partição deverá ter 1 MiB de tamanho - 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. - 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.
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-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
Lançamento mensal do Arch Linux
Veja também archiso (Português).
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#BIOS systems.
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.
- 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.
- 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.
Veja também
- GRUB:
- https://help.ubuntu.com/community/Grub2/ISOBoot/Examples
- https://help.ubuntu.com/community/Grub2/ISOBoot
- GRUB Live ISO Multiboot - GRUB configurations for booting ISO images
- Syslinux: