2

Прежде чем спросить здесь, я попытался выполнить поиск по SU/SE и Google, но безуспешно. Это самая близкая вещь, которую я получил.

По сути, я пытаюсь сделать следующее:
- создать образ диска размером около 128МБ;
- создать GPT;
- создать раздел FAT32 на первых 32 МБ (я назову его UEFI);
- создать раздел FAT32 в оставшихся байтах (я назову это SYSTEM);
- создать следующий подкаталог в разделе UEFI: /EFI /BOOT /;
- скопировать файл в подкаталог;
- скопировать другой файл в разделе SYSTEM.


Это то, что я сделал до сих пор:

дд если =/dev/zero of = disk.img bs = 1M count = 128

расстался disk.img
(расстались) mktable gpt
(разделённый) mkpart primary fat32 2048s 65535s
(расстались) mkpart первичный жир32 65536s 100%
(расстались) оптимальная проверка выравнивания 1
(расстались) оптимальная проверка выравнивания 2
(расстались) имя 1 UEFI
(расстались) имя 2 СИСТЕМА

Это мой вывод:

Disk disk.img: 134MB  
Sector size (logical/physical): 512B/512B  
Partition Table: gpt  
Disk Flags:  

Number  Start   End     Size    File system  Name    Flags  
 1      1049kB  33,6MB  32,5MB               UEFI    msftdata
 2      33,6MB  134MB   101MB                SYSTEM  msftdata



Альтернативный способ - создать два разных раздела, а затем объединить их:

dd if=/dev/zero of=uefi.img bs=1M count=32
mformat -i uefi.img -v UEFI -f 1440 -c 1 ::
mmd -i uefi.img ::/EFI
mmd -i uefi.img ::/EFI/BOOT
mcopy -i uefi.img BOOTX64.EFI ::/EFI/BOOT
dd if=/dev/zero of=system.img bs=1M count=100
mformat -i system.img -v UEFI -f 1440 -c 1 ::
mcopy -i system.img myawesomeOS ::



В первом случае я не могу понять, почему столбец "Файловая система" пуст (следует сказать "fat32") и как создавать подкаталоги и копировать файлы.
В последнем случае я не могу создать правильную файловую систему FAT32 для двух изображений, если я добавляю -F к mformat, я получаю

Слишком мало кластеров для этого размера жира. Пожалуйста, выберите 16-битный жир в вашем файле /etc/mtools.conf или .mtoolsrc

Если бы мне удалось сделать это, я все еще не знаю, как настроить GPT и объединить два изображения в один файл.

Как мне этого добиться? Любая помощь или подсказка приветствуется.

1 ответ1

3

После нескольких часов борьбы я решил это сам. Я опубликую решение здесь, на всякий случай:

# Creates an empty disk image of 256MB, creates its GPT, and then it makes
# two partitions: the first one of approximatively 60MB, the second one fills
# the remaining bytes. Both partitions are aligned.
dd if=/dev/zero of=disk.img bs=1M count=256
parted disk.img
mktable gpt
mkpart primary fat32 2048s 131071s
mkpart primary fat32 131072s 100%
align-check optimal 1
align-check optimal 2
name 1 UEFI
name 2 SYSTEM
quit

# Creates an empty disk image of 33MB.
dd if=/dev/zero of=uefi.img bs=1M count=33
# Formats the disk image as FAT32
mkfs.vfat uefi.img -F 32
# Creates the requested subdirectories.
mmd -i uefi.img ::/EFI
mmd -i uefi.img ::/EFI/BOOT
# Copies the boot file.
mcopy -i uefi.img BOOTX64.EFI ::/EFI/BOOT

# Creates an empty disk image of 100MB.
dd if=/dev/zero of=system.img bs=1M count=100
# Formats the disk image as FAT32
mkfs.vfat system.img -F 32
# Copies the OS file.
mcopy -i system.img SYSTEM.EFI ::

# Enables the kernel module requested by kpartx, just in case.
sudo modprobe dm-mod
# Maps and mounts the two partitions in disk.img to /dev/mapper/loop0p1 and
# /dev/mapper/loop0p2
sudo kpartx -av disk.img
# Copies the UEFI partion into the disk image.
sudo dd if=uefi.img of=/dev/mapper/loop0p1 bs=1M
# Copies the SYSTEM partion into the disk image.
sudo dd if=system.img of=/dev/mapper/loop0p2 bs=1M
# Unmounts the two partitions
sudo kpartx -dv disk.img

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