Creo un img del disco 100M e lo partiziono con sgdisk
per creare un avvio del BIOS e una partizione 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'
Quindi creo una partizione e la formatta per FAT:
losetup -f file.img -P
mkfs.vfat /dev/loop0p2
- Se monto il
/dev/loop0p2
, nessun problema. Se copio la partizione dal disco img e la monto, nessun problema:
dd if = file.img di = part2.img bs = 512 count = 13888 skip = 4095
Ora part2.img
è montabile direttamente. Certo, se dd
lo ritroverò nell'immagine, rimarrà montabile
dd if=part2.img of=file.img bs=512 count=13888 seek=4095 conv=notrunc
Monte di /dev/loop0p2
opere bene.
Tuttavia, se creo una partizione di dimensioni identiche img:
mkfs.vfat -C directpart.img 13888
dd if=directpart.img of=file.img bs=512 count=13888 seek=4095 conv=notrunc
Il file directpart.img
può essere montato, proprio come part2.img
(estratto dall'immagine del disco). Tuttavia, il montaggio /dev/loop0p2
non funziona più.
Cosa fa mkfs.vfat
diversamente se applicato a una partizione in un file img del disco (o dispositivo a blocchi reali) da un file autonomo ?
È interessante notare che, se uso losetup
per ottenere l'immagine dell'intero disco, dd if=<new_file> of=/dev/loop0p2
funziona sia con il mkfs.vfat -C <new_file>
file creato direttamente che con il file creato dal dd
disco.