Criação de partições
Para criar uma tabela de partições, você pode usar suas ferramentas comuns diretamente no arquivo em vez do dispositivo. A maioria das ferramentas padrão deve suportar esse uso, como fdisk
e parted
. parted
é ótimo para ser integrado em um script, pois pode usar os comandos como argumento.
parted -s testing.img mklabel gpt
parted -s -a none testing.img mkpart ESP fat32 0 4M
parted -s -a none testing.img mkpart linux ext4 4M 10M
Criação do sistema de arquivos
Eu não tenho uma solução limpa para montar ou criar um sistema de arquivos em uma partição virtual. A coisa certa a fazer provavelmente seria ter um driver fuse
(Filesystem in Userspace) para tabelas de partição. Mas eu não encontrei um no momento.
No entanto, mke2fs
pode usar a opção -E offset=1234
para criar um sistema de arquivos ext2
, ext3
ou ext4
em um deslocamento arbitrário dentro do arquivo. Você pode dar o deslocamento de sua partição. No entanto, lembre-se de fornecer também o tamanho do sistema de arquivos, pois o comportamento padrão parece estar com defeito e, por padrão, gravar um sistema de arquivos com o tamanho do disco virtual, estendendo o arquivo, se necessário.
mke2fs -E offset=4000256 testing.img 6316k
Infelizmente, nem todos os mkfs
têm essa opção. mkfs.vfat
não. Portanto, outra solução pode ser criar um arquivo separado do tamanho da partição, usar mkfs
e, em seguida, usar dd
para copiar o conteúdo para o disco virtual completo.
dd if=testing.img of=testing.fat32.img bs=512 skip=34 count=7779
mkfs -t vfat testing.fat32.img
dd if=testing.fat32.img of=testing.img bs=512 seek=34 count=7779 conv=notrunc
Não é a solução mais limpa ou mais rápida, mas funciona, é bastante genérica e não requer privilégios de root. A opção de conversão sparse
também pode ser usada para acelerar um pouco as coisas, não escrevendo sequências longas de zeros.
Montando sistemas de arquivos
Você pode montar um sistema de arquivos em uma partição com a ajuda de fuse
, desde que ele tenha suporte para o seu sistema de arquivos. Há um suporte padrão para sistemas de arquivos ext
sob o nome fuse-ext2
e um para FAT
com o nome fusefat
. Eles infelizmente não aceitam uma opção offset
no momento. Então, eu acho que você é obrigado a usar mount
ou o mesmo truque de dd
como antes.
O método padrão com partx
ou kpartx
, (ou a opção -o offset
de mount
) requer privilégios de root. A solução dd
é lenta, complexa e pronta para erros.