
Прежде чем задать вопрос здесь, я пытался искать на SU/SE и в Google, но безуспешно.Это самое близкое, что я нашел.
В общем, я пытаюсь сделать следующее:
- создать образ диска размером около 128 МБ;
- создать GPT;
- создать раздел FAT32 в первых 32 МБ (назову его UEFI);
- создать раздел FAT32 в оставшихся байтах (назову его SYSTEM);
- создать следующий подкаталог в разделе UEFI: /EFI/BOOT/;
- скопировать файл в подкаталог;
- скопировать другой файл в раздел SYSTEM.
Вот что я делал до сих пор:
dd if=/dev/zero of=disk.img bs=1M count=128
parted disk.img
(parted) mktable gpt
(parted) mkpart primary fat32 2048 с 65535 с
(parted) mkpart primary fat32 65536 с 100%
(parted) align-check optimize 1
(parted) align-check optimize 2
(parted) имя 1 UEFI
(parted) имя 2 СИСТЕМА
Вот мой вывод:
Диск disk.img: 134 МБ Размер сектора (логический/физический): 512Б/512Б Таблица разделов: gpt Флаги диска: Номер Начало Конец Размер Файловая система Имя Флаги 1 1049 КБ 33,6 МБ 32,5 МБ UEFI msftdata 2 33,6 МБ 134 МБ 101 МБ СИСТЕМА 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, я получаю
Слишком мало кластеров для этого размера fat. Выберите 16-битный fat в файле /etc/mtoolsrc или .mtoolsrc
Если бы мне это удалось, я бы все равно не знал, как настроить GPT и объединить два изображения в один файл.
Как мне этого добиться? Любая помощь или подсказка будет оценена по достоинству.
решение1
После пары часов мучений я решил ее сам. На всякий случай выложу решение здесь:
# Создает пустой образ диска размером 256 МБ, создает его GPT, а затем делает # два раздела: первый размером около 60 МБ, второй заполняет # оставшиеся байты. Оба раздела выровнены. dd if=/dev/zero of=disk.img bs=1M count=256 разделил disk.img mktable gpt mkpart первичный fat32 2048s 131071s mkpart первичный fat32 131072s 100% выравнивание-проверка оптимальное 1 выравнивание-проверка оптимальное 2 имя 1 UEFI имя 2 СИСТЕМА покидать # Создает пустой образ диска размером 33 МБ. dd if=/dev/zero of=uefi.img bs=1M count=33 # Форматирует образ диска как FAT32 mkfs.vfat uefi.img -F 32 # Создает запрошенные подкаталоги. mmd -i uefi.img ::/EFI mmd -i uefi.img ::/EFI/BOOT # Копирует загрузочный файл. mcopy -i uefi.img BOOTX64.EFI ::/EFI/BOOT # Создает пустой образ диска размером 100 МБ. dd if=/dev/zero of=system.img bs=1M count=100 # Форматирует образ диска как FAT32 mkfs.vfat system.img -F 32 # Копирует файл ОС. mcopy -i system.img СИСТЕМА.EFI :: # Включаем модуль ядра, запрошенный kpartx, на всякий случай. sudo modprobe dm-mod # Отображает и монтирует два раздела в disk.img в /dev/mapper/loop0p1 и # /dev/mapper/loop0p2 sudo kpartx -av disk.img # Копирует раздел UEFI в образ диска. sudo dd if=uefi.img of=/dev/mapper/loop0p1 bs=1M # Копирует раздел SYSTEM в образ диска. sudo dd if=system.img of=/dev/mapper/loop0p2 bs=1M # Размонтирует два раздела sudo kpartx -dv disk.img