perché mkfs.vfat su un file seguito da dd nell'immagine del disco non funziona?


0

Creo un img del disco 100M e lo partiziono con sgdiskper 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
  1. Se monto il /dev/loop0p2, nessun problema.
  2. 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 ddlo ritroverò nell'immagine, rimarrà montabile

dd if=part2.img of=file.img bs=512 count=13888 seek=4095 conv=notrunc

Monte di /dev/loop0p2opere 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.imgpuò essere montato, proprio come part2.img(estratto dall'immagine del disco). Tuttavia, il montaggio /dev/loop0p2non funziona più.

Cosa fa mkfs.vfatdiversamente 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 losetupper ottenere l'immagine dell'intero disco, dd if=<new_file> of=/dev/loop0p2funziona sia con il mkfs.vfat -C <new_file> file creato direttamente che con il file creato dal dddisco.


Che cosa esattamente intendi / hai fatto "immettendolo nella partizione esatta nell'immagine del disco originale"?
Tom Yan,

E in che modo è coinvolto quel file.img nel primo paragrafo? Il tuo post è abbastanza confuso per essere onesti ...
Tom Yan,

OK, posso aggiornarlo.
Deitch

È più chiaro?
Deitch

Dovresti cercare = 4096, coz inizia la partizione da LBA 4096, il che significa che ci sono 4096 blocchi prima di essa (LBA 0 - LBA 4095).
Tom Yan,

Risposte:


1

Dovresti usare 4096 per seek = e skip =, perché la seconda partizione inizia da LBA 4096, il che significa che ci sono 4096 blocchi prima di essa, vale a dire LBA 0 - 4095.


Conosciuto anche come PEBKAC aka "l'utente ha commesso un errore stupido nella copia e non ha realizzato ciò che ha fatto." Grazie a TomYan per averlo trovato.
Deitch
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.