por que o mkfs.vfat em um arquivo seguido por dd em uma imagem de disco não funciona?

0

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
  1. Se eu montar o /dev/loop0p2 , não há problema.
  2. 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.

    
por deitch 11.08.2017 / 11:54

1 resposta

1

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.

    
por 11.08.2017 / 13:00