Eu pessoalmente prefiro acrescentar usando dd
.
Estou assumindo setores de 512 bytes aqui. Pode haver um caso para setores de 2048 bytes, portanto, basta trocar os números e fazer as contas.
Em cada caso, estou usando um arquivo de teste de 512MB, por exemplo:
dd if=/dev/zero of=testfs.img bs=512 count=1M
mkfs.ext4 testfs.img
MBR
Compor a imagem
Eu pessoalmente prefiro acrescentar o primeiro MB (2048 setores) ao seu começo:
dd if=testfs.img skip=2048 bs=512 of=full.img
Finalmente, execute o fdisk para criar a tabela de partições (ou copie suas próprias), criei uma partição usando valores padrão.
Verificando
Para verificar, crie partições de loop e autodetectar:
sudo losetup -fP full.img
Execute file
no dispositivo de loopback particionado resultante:
sudo file -s /dev/loop2p1
/dev/loop2p1: Linux rev 1.0 ext4 filesystem data, UUID=ae2945fd-54b5-486f-8dd0-9b18d6ae01b4 (extents) (large files) (huge files)
GPT
Compor a imagem
Eu pessoalmente prefiro acrescentar o primeiro MB (2048 setores, como o gdisk irá padronizar para este número, pois ele está alinhado em 1 MB) ao seu início para o início do MBR e 34 setores para o seu final (ou 2048 para um MB completo) para o final GPT (setor final pode ser diferente). Omitindo o fim, a GPT pode perder seus dados:
dd if=testfs.img skip=2048 bs=512 of=full.img
dd if=/dev/zero seek=1050624 bs=512 of=full.img count=34
Finalmente, execute o gdisk para criar a tabela de partições (ou copie suas próprias), criei uma partição usando valores padrão.
Verificando
Para verificar, crie partições de loop e autodetectar:
sudo losetup -fP full.img
Execute file
no dispositivo de loopback particionado resultante:
sudo file -s /dev/loop2p1
/dev/loop2p1: Linux rev 1.0 ext4 filesystem data, UUID=ae2945fd-54b5-486f-8dd0-9b18d6ae01b4 (extents) (large files) (huge files)
Este método garante nenhuma adivinhação, redimensionamento ou alinhamento manual.