Я создаю 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
- Если я смонтирую
/dev/loop0p2
, нет проблем. Если я скопирую раздел с диска 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
из диск.