Я создаю 100M диск img и делю его на разделы с помощью sgdisk чтобы создать загрузочный BIOS и раздел 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'

Затем я создаю раздел и форматирую его для FAT:

losetup -f file.img -P
mkfs.vfat /dev/loop0p2
  1. Если я смонтирую /dev/loop0p2 , нет проблем.
  2. Если я скопирую раздел с диска img и смонтирую его, нет проблем:

    dd if = file.img of = part2.img bs = 512 count = 13888 skip = 4095

Теперь part2.img монтируется напрямую. Конечно, если я dd изображение обратно , оно останется монтируемым

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

/dev/loop0p2 работает нормально.

Однако, если я создаю раздел одинакового размера, img:

mkfs.vfat -C directpart.img 13888
dd if=directpart.img of=file.img bs=512 count=13888 seek=4095 conv=notrunc

Файл directpart.img может быть смонтирован так же, как part2.img (который был извлечен из образа диска). Однако монтирование /dev/loop0p2 больше не работает.

Что делает mkfs.vfat иначе, когда применяется к разделу в файле img диска (или к реальному блочному устройству) из отдельного файла?

Интересно, что если я использую losetup для получения полного образа диска, dd if=<new_file> of=/dev/loop0p2 работать как с прямым mkfs.vfat -C <new_file> и с файлом, созданным dd из диск.

1 ответ1

1

Вы должны использовать 4096 для поиска = и пропуска =, потому что второй раздел начинается с LBA 4096, что означает, что перед ним 4096 блоков, а именно LBA 0 - 4095.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .