Eu pessoalmente prefiro acrescentar usando dd
.
Estou assumindo setores de 512 bytes aqui. Pode haver um caso para setores de 2048 bytes, portanto, troque os números e faça as contas.
Em cada caso, estou usando um arquivo de teste de 512 MB, por exemplo:
dd if=/dev/zero of=testfs.img bs=512 count=1M
mkfs.ext4 testfs.img
MBR
Compondo a imagem
Pessoalmente, prefiro acrescentar o primeiro MB (2048 setores) ao seu início:
dd if=testfs.img skip=2048 bs=512 of=full.img
Finalmente, execute o fdisk para criar a tabela de partições (ou copie por conta própria), criei 1 partição usando valores padrão.
Verificando
Para verificar, crie partições de loop e detecção automática:
sudo losetup -fP full.img
E 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
Compondo a imagem
Pessoalmente, prefiro anexar o primeiro MB (2048 setores, já que o gdisk assumirá o padrão deste número, pois está alinhado com 1 MB) ao início do MBR inicial e 34 setores ao final (ou 2048 para um MB completo) no final. GPT (setor final pode ser diferente). Omitir a GPT final 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 por conta própria), criei 1 partição usando valores padrão.
Verificando
Para verificar, crie partições de loop e detecção automática:
sudo losetup -fP full.img
E 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 não adivinhar, redimensionar ou alinhar manualmente.