Criando um USB bootavel usando apenas o terminal no Linux

Esse post junta tudo que eu preciso saber para gerenciar as partições e copiar a ISO de uma distro para o pendrive para uso futuro.

Entendendo como funciona o /dev

O /dev é um diretório que representa seus dispositivos (devices). No Linux e em outros sistemas Unix-like, “tudo é um arquivo” é um princípio fundamental, e os dispositivos não são exceção. Os arquivos no diretório /dev são usados para interagir com hardware e dispositivos do sistema.

Assim ficará mais claro de entender com o que estamos mexendo, se você conectar um dispositivo de armazenamento USB ao seu computador, um arquivo especial será criado em /dev para representar esse dispositivo, como /dev/sdb ou /dev/sdc.

Dessa forma, podemos utilizar o comando no Linux lsblk que exibe as informações de espaço de todos os dispositivos:

NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda           8:0    1  29,3G  0 disk 
└─sda1        8:1    1  29,3G  0 part 
nvme0n1     259:0    0 476,9G  0 disk 
├─nvme0n1p1 259:1    0  1000M  0 part /efi
├─nvme0n1p2 259:2    0 459,1G  0 part /var/log
│                                     /var/cache
│                                     /home
│                                     /
└─nvme0n1p3 259:3    0  16,8G  0 part [SWAP]

Aqui é possível ver que eu tenho conectado um pendrive no /dev/sda1, que é normalmente onde fica o disco principal, porém, como a minha partição é um SSD nvme, ela está sendo representada como nvme0n1 e a partição onde estão meus dados está no nvme0n1p2

Também da para ver onde está o mountpoint que é um diretório (ou pasta) no sistema de arquivos onde um dispositivo de armazenamento ou uma partição é associado (montado) de modo a ficar acessível.

Nesse caso, o meu Pendrive não está montado, dependendo da sua distro, isso é feito automaticamente acessando os arquivos no seu gerenciador de arquivos.

Gerenciando as partições

Caso o seu dispositivo USB esteja com algumas partições a mais, ou algo parecido, será necessário gerenciar essas partições para facilitar a cópia da ISO. Se o seu pendrive já estiver vazio e com apenas uma partição, vamos apenas formatar para ter certeza de que irá funcionar.

Você também pode usar essa opção caso não queira mais usar seu dispositivo USB como bootavel mais.

Para gerenciar as partições iremos usar o fdisk, porém, antes disso, nenhuma partição pode estar montada. Use o comando umount para desmontar a partição que está montada:

sudo umount /dev/sdax

Agora, podemos usar o fdisk usando de parâmetro o dispositivo desejável:

sudo fdisk /dev/sdx

Esse comando vai entrar numa linha de comando do fdisk no qual é possível digitar comandos que irão fazer as alterações na partição desejada.

É possível digitar p para imprimir as partições existentes no disco.

Deletando uma partição existente

  • Digite d para deletar uma partição.
  • Escolha o número da partição que deseja excluir.

Criando uma nova partição

  • Digite n para criar uma nova partição.
  • Escolha o tipo de partição primária com p.
  • Siga as instruções para definir o ponto inicial e o tamanho da partição, apertando enter para o padrão.

Gravando as mudanças

Após digitar os comandos das alterações, as mesmas ainda não foram aplicadas. Você pode digitar w para escrever as mudanças ou q para sair.

Formatando a partição

NFTS e FAT32 são os dois formatos que eu acredito que tenham maior compatibilidade com a grande parte dos computadores.

Usando NTFS:

# A flag --fast é para formatação rápida e o --label da um nome para o dispositivo, nesse caso coloquei "Pendrive"
sudo mkfs.ntfs --fast --label Pendrive /dev/sdax

Usando FAT32: Na minha experiência a cópia foi extremamente lenta usando FAT32, mas pode ser diferente para outros sistemas e dispositivos USB e também tem o fato do FAT32 ter um amplo suporte para Mac e Windows mais antigos se quiser uma maior retrocompatibilidade.

sudo mkfs.vfat -n 'Pendrive' /dev/sdax

Verificando a integridade da ISO

Esse processo é apenas para verificar se a ISO não está corrompida ou caso esteja baixando de uma fonte não confiável.

Vou usar de exemplo a ISO do ArchLinux, mas o processo é o mesmo para qualquer distro. Baixe a ISO, signature (.sig) e os dois checksum sha256sums.txt e b2sums.txt.

Verificando os checksums

A flag --ignore missing fará com que os outros arquivos em que não foram baixados não sejam verificados.

b2sum -c b2sums.txt --ignore-missing
# archlinux-2024.01.01-x86_64.iso: OK

sha256sum -c sha256sums.txt --ignore-missing
# archlinux-2024.01.01-x86_64.iso: OK

Verificando a signature com o GnuPG

Nesse caso vai precisar de um sistema com GnuPG instalado e nem toda distro vai ter essa opção.

# Baixa e importa a key pública para verificar a assinatura.
gpg --auto-key-locate clear,wkd -v --locate-external-key pierre@archlinux.org

# Verifica se a assinatura com a key que acabamos de importar é válida.
gpg --verify 

A saída desse último comando vai ser grande mas deve ter alguma linha dizendo:

gpg: Good signature from "Pierre Schmitz <pierre@archlinux.org>" [unknown]

Se esse for o caso, então a ISO está bem para ser copiada.

Copiando o conteúdo da ISO para o Pendrive

E finalmente, podemos copiar o conteúdo da ISO para o USB.

sudo dd if=./archlinux-2024.01.01-x86_64.iso of=/dev/sdax bs=4M status=progress

Referências