Você deve usar 4096 para seek = e skip =, porque a segunda partição inicia a partir do LBA 4096, o que significa que há 4096 blocos antes, ou seja, LBA 0 - 4095.
Eu crio uma img de disco de 100M e a particiono com sgdisk
para criar uma inicialização de BIOS e uma partição ESP.
dd if=/dev/zero of=file.img bs=1M count=100
sgdisk --clear -n 1:2048:4095 -t 1:ef02 -c 1:'BIOS Boot' -n 2:4096:17983 -t 2:ef00 -c 2:'EFI System Partition'
Eu então crio uma partição e formato para FAT:
losetup -f file.img -P
mkfs.vfat /dev/loop0p2
/dev/loop0p2
, não há problema. Se eu copiar a partição do disco img e montá-la, não há problema:
dd se = arquivo.img de = part2.img bs = 512 contagem = 13888 ignorar = 4095
Agora, part2.img
é montável diretamente. É claro que, se eu dd
voltar para a imagem, ela permanece montável
dd if=part2.img of=file.img bs=512 count=13888 seek=4095 conv=notrunc
A montagem de /dev/loop0p2
funciona bem.
No entanto, se eu criar uma partição com tamanho idêntico img:
mkfs.vfat -C directpart.img 13888
dd if=directpart.img of=file.img bs=512 count=13888 seek=4095 conv=notrunc
O arquivo directpart.img
pode ser montado, assim como part2.img
(que foi extraído da imagem do disco) pode. No entanto, a montagem /dev/loop0p2
não funciona mais.
O que mkfs.vfat
faz de maneira diferente quando aplicado a uma partição em um arquivo img de disco (ou dispositivo de bloco real) de um arquivo autônomo ?
Curiosamente, se eu usar losetup
para obter a imagem de disco completo, o dd if=<new_file> of=/dev/loop0p2
funciona com ambos o arquivo mkfs.vfat -C <new_file>
criado e o arquivo criado por dd
do disco.
Tags mount partitioning fat32 linux