Я отметил, что файл ISO Ubuntu загружаем в системах с BIOS и с UEFI. Я обновил Ubuntu с нуля, и я хотел бы, чтобы мой файл ISO был загрузочным в обоих случаях.
Мое обновление Ubuntu сделано первой установкой debootstrap в chroot тюрьму и затем постепенно добавление файлов, пока я все не требовал программ. Однако получающийся файл ISO только загружаем в системе с BIOS.
Я полагаю, что мне нужно некоторое другое волшебство с mkisofs, но что относительно файлов в EFI/BOOT? Каков источник тех файлов? Есть ли что-либо еще, в чем я нуждаюсь?
Спасибо!
AndyS
Можно генерировать ESP (Системный Раздел EFI) изображение, подходящее для начальной загрузки на UEFI с:
#! /bin/sh
BOOT_IMG_DATA=$(mktemp -d)
BOOT_IMG=efi.img
mkdir -p $(dirname $BOOT_IMG)
truncate -s 4M $BOOT_IMG
mkfs.vfat $BOOT_IMG
mkdir -p $BOOT_IMG_DATA/efi/boot
grub-mkimage \
-C xz \
-O x86_64-efi \
-p /boot/grub \
-o $BOOT_IMG_DATA/efi/boot/bootx64.efi \
boot linux search normal configfile \
part_gpt btrfs fat iso9660 loopback \
test keystatus gfxmenu regexp probe \
efi_gop efi_uga all_video gfxterm font \
echo read ls cat png jpeg halt reboot
mcopy -i $BOOT_IMG -s $BOOT_IMG_DATA/efi ::
Это генерирует отформатированный FAT файл (измените местоположение файла путем изменения $BOOT_IMG
переменная), который является, в свою очередь, изображением ESP.
Можно использовать сгенерированное изображение путем добавления флага -append_partition 2 0xef efi.img
к xorriso
команда.
Получающееся xorriso
команда может быть чем-то вроде этого:
xorriso -as mkisofs \
-r -V <ISO_LABEL> \
-o <OUTPUT_ISO_IMAGE> \
-J -J -joliet-long -cache-inodes \
-isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin \
-b isolinux/isolinux.bin \
-c isolinux/boot.cat \
-boot-load-size 4 -boot-info-table -no-emul-boot \
-eltorito-alt-boot \
-e --interval:appended_partition_2:all:: \
-append_partition 2 0xef efi.img \
-no-emul-boot -isohybrid-gpt-basdat \
<ISO_DIRECTORY>
Примите во внимание, что также необходимо использовать ISOLINUX, если Вы хотите, чтобы Ваше изображение загрузилось в системах BIOS. GRUB2 для UEFI.
Кроме того, необходимо использовать последнюю версию xorriso
(флаг --interval:appended_partition_2:all::
была добавленная пара несколько лет назад, таким образом, старые версии не поддерживают ее).
Для дальнейшего руководства также смотрите к этому вопросу.