Aqui está uma maneira de criar uma unidade USB ao vivo Debian com persistência. Ele permitirá instalar os pacotes ausentes, que a partir de então estarão disponíveis em cada inicialização ao vivo usando a persistência. Como recriamos o conteúdo do sistema de arquivos de imagem ISO ao vivo em um sistema de arquivos com capacidade de leitura e gravação, podemos alterar as configurações do carregador de inicialização para permitir persistência e definir o layout do teclado na inicialização.
As etapas descritas aqui foram testadas para trabalhar no alongamento e buster do Debian para criar uma imagem ao vivo do alongamento do Debian.
Existem muitas etapas envolvidas, mas parece que esse método ainda é bastante eficiente.
Isenção de responsabilidade: você perderá os dados na unidade USB de destino e, se você estragar os comandos abaixo, poderá sentir muito depois. Eu não sou responsável por suas ações.
Sentindo-se sortudo
Se você se sente particularmente sortudo hoje, pode tentar um script bash automatizando o processo para você. Dê a ele o caminho da imagem ISO como primeiro parâmetro e o nome do dispositivo do bloco da unidade USB como o segundo. Observe que esse script é incrivelmente perigoso e que você não deve executá-lo sem ler e entender primeiro.
TL; DR
Obtenha a imagem ISO ao vivo da Debian e faça o seguinte:
umount /dev/sdX*
parted /dev/sdX --script mktable gpt
parted /dev/sdX --script mkpart EFI fat16 1MiB 10MiB
parted /dev/sdX --script mkpart live fat16 10MiB 3GiB
parted /dev/sdX --script mkpart persistence ext4 3GiB 100%
parted /dev/sdX --script set 1 msftdata on
parted /dev/sdX --script set 2 legacy_boot on
parted /dev/sdX --script set 2 msftdata on
mkfs.vfat -n EFI /dev/sdX1
mkfs.vfat -n LIVE /dev/sdX2
mkfs.ext4 -F -L persistence /dev/sdX3
mkdir /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
mount /dev/sdX1 /tmp/usb-efi
mount /dev/sdX2 /tmp/usb-live
mount /dev/sdX3 /tmp/usb-persistence
mount -oro live.iso /tmp/live-iso
cp -ar /tmp/live-iso/* /tmp/usb-live
echo "/ union" > /tmp/usb-persistence/persistence.conf
grub-install --no-uefi-secure-boot --removable --target=x86_64-efi --boot-directory=/tmp/usb-live/boot/ --efi-directory=/tmp/usb-efi /dev/sdX
dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/mbr/gptmbr.bin of=/dev/sdX
syslinux --install /dev/sdX2
mv /tmp/usb-live/isolinux /tmp/usb-live/syslinux
mv /tmp/usb-live/syslinux/isolinux.bin /tmp/usb-live/syslinux/syslinux.bin
mv /tmp/usb-live/syslinux/isolinux.cfg /tmp/usb-live/syslinux/syslinux.cfg
sed --in-place 's#isolinux/splash#syslinux/splash#' /tmp/usb-live/boot/grub/grub.cfg
sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 persistence/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg
sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 keyboard-layouts=de locales=en_US.UTF-8,de_DE.UTF-8/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg
umount /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
rmdir /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
Em detalhes e com alguma explicação
Você precisará executar a maioria dos comandos a seguir com privilégios elevados, ou seja, usar sudo
na maioria dos sistemas GNU / Linux.
Baixar
Faça o download de uma imagem ISO ao vivo do Debian com o gerenciador de janelas de sua escolha:
https://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/
Vamos nos referir à imagem ISO baixada simplesmente como "live.iso".
Determinar unidade de destino
Encontre o dispositivo que sua unidade USB está usando lsblk
. Vamos ligar assim /dev/sdX
.
Desmontar
Desmonte as partições existentes na sua unidade usando umount /dev/sdX*
Criar partições
Precisamos de uma partição de inicialização EFI para PCs UEFI para inicializar a partir da unidade USB. Então precisamos de uma partição suficientemente grande para armazenar o conteúdo original da imagem do sistema de arquivos ISO ao vivo. Essa partição deve ter o legacy_boot
sinalizador definido. Em seguida, adicionamos a partição de persistência, utilizando todo o espaço restante da unidade USB. Você pode fazer isso com qualquer ferramenta de particionamento compatível com GPT (lembre-se do legacy_boot
sinalizador). Aqui está um exemplo usando parted
:
parted /dev/sdX --script mktable gpt
parted /dev/sdX --script mkpart EFI fat16 1MiB 10MiB
parted /dev/sdX --script mkpart live fat16 10MiB 3GiB
parted /dev/sdX --script mkpart persistence ext4 3GiB 100%
parted /dev/sdX --script set 1 msftdata on
parted /dev/sdX --script set 2 legacy_boot on
parted /dev/sdX --script set 2 msftdata on
Isso cria uma tabela de partição GPT e uma tabela de partição protetora MBR.
Criar sistemas de arquivos
Queremos o FAT na partição EFI e ao vivo e queremos ext4
na partição de persistência e exigimos o rótulo persistence
para que o recurso de persistência funcione.
mkfs.vfat -n EFI /dev/sdX1
mkfs.vfat -n LIVE /dev/sdX2
mkfs.ext4 -F -L persistence /dev/sdX3
Montando os Recursos
Precisamos montar o ISO de origem e as partições de destino em pontos de montagem temporários.
mkdir /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
mount /dev/sdX1 /tmp/usb-efi
mount /dev/sdX2 /tmp/usb-live
mount /dev/sdX3 /tmp/usb-persistence
mount -oro live.iso /tmp/live-iso
Instalar sistema ativo
Copie o conteúdo do sistema de arquivos ISO ativo para a partição LIVE.
cp -ar /tmp/live-iso/* /tmp/usb-live
persistence.conf
Prepare o sistema de arquivos de persistência com o arquivo de configuração necessário. O recurso de persistência não funcionará sem esse arquivo.
echo "/ union" > /tmp/usb-persistence/persistence.conf
Grub para suporte UEFI
Instale o grub2 para suporte à inicialização UEFI (isso requer o grub-efi-amd64-bin
pacote no Debian). Nós forçamos grub-install
a não usar a inicialização segura UEFI, que aparentemente não funciona com a --removable
opção.
grub-install --no-uefi-secure-boot --removable --target=x86_64-efi --boot-directory=/tmp/usb-live/boot/ --efi-directory=/tmp/usb-efi /dev/sdX
Syslinux para suporte a BIOS herdado
Instale o gptmbr.bin
carregador de inicialização syslinux na unidade (faça o download do syslinux ou instale o pacote syslinux-common
). Em seguida, instale o syslinux na partição ativa.
dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/mbr/gptmbr.bin of=/dev/sdX
syslinux --install /dev/sdX2
Fixação do Isolinux
Reutilize a configuração do isolinux da ISO ao vivo original para trabalhar com o syslinux.
mv /tmp/usb-live/isolinux /tmp/usb-live/syslinux
mv /tmp/usb-live/syslinux/isolinux.bin /tmp/usb-live/syslinux/syslinux.bin
mv /tmp/usb-live/syslinux/isolinux.cfg /tmp/usb-live/syslinux/syslinux.cfg
Parâmetros do kernel
Agora que copiamos os arquivos do sistema ativo para um sistema de arquivos de leitura / gravação real, podemos manipular a configuração do grub e do syslinux.
Adicione o parâmetro do persistence kernel a menu.cfg
e grub.cfg
. Nos dois arquivos, adicione a palavra persistence
- chave no final da respectiva primeira linha boot=live
.
sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 persistence/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg
Defina o parâmetro do kernel do layout do teclado. Nos dois arquivos, adicione as palavras-chave no final da respectiva primeira linha boot=live
.
sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 keyboard-layouts=de locales=en_US.UTF-8,de_DE.UTF-8/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg
Respingo de Grub
Corrija a imagem inicial do grub (opcional; a movemos para outro diretório).
sed --in-place 's#isolinux/splash#syslinux/splash#' /tmp/usb-live/boot/grub/grub.cfg
Desmontagem e Limpeza
umount /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
rmdir /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
Por que isso deve funcionar para UEFI e BIOS
Ao iniciar no modo UEFI, o PC varrerá as partições FAT definidas na tabela de partições GPT. A primeira partição FAT carrega o UEFI grub bootloader, encontrado porque está localizado no caminho especificado pela UEFI para unidades removíveis (a --removable
opção para grub-install
isso). Nenhuma entrada de inicialização UEFI é necessária para que isso funcione, precisamos apenas fazer o PC tentar inicializar a partir da unidade USB. Esse grub está configurado para levá-lo a partir daí (carregue o grub.cfg, mostre o menu etc.).
Ao iniciar no modo BIOS e selecionar a inicialização a partir da unidade USB, o PC executará o gptmbr.bin
código do carregador de inicialização que escrevemos no MBR de proteção da unidade USB. Esse carregador de inicialização procura a partição GPT marcada com o legacy_boot
sinalizador e o syslinux de carregamento em cadeia dessa partição. O Syslinux assume o controle (carrega menu.cfg, mostra o menu etc.).
Persistência Criptografada
Em vez de usar ext4 simples na partição de persistência, é possível primeiro criptografar a partição de persistência com LUKS (usando cryptsetup
) e depois formatar isso com ext4 (usando o rótulo apropriado). No entanto, como diz a documentação , o sistema ativo deve incluir o cryptsetup
pacote. Caso contrário, a partição criptografada não poderá ser descriptografada pelo sistema ativo. Isso significa que é preciso criar um ISO ao vivo personalizado primeiro. Isso está, no entanto, fora do escopo desta resposta.
História
A --no-uefi-secure-boot
opção anteriormente não fazia parte da chamada para grub-install
. O stick funcionou bem para mim, mas isso parou com o Debian buster, mesmo que a inicialização segura ainda esteja desativada na minha máquina.