КАК СОЗДАТЬ ЗАГРУЗОЧНЫЙ ISO ДЛЯ UEFI/BIOS

Вопрос или проблема

Я заметил, что 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:: был добавлен пару лет назад, поэтому старые версии не поддерживают его).

Для получения дополнительной информации также ознакомьтесь с этим вопросом.

Ответ или решение

Как создать загрузочный ISO для UEFI/BIOS

Создание загрузочного ISO-образа, который будет совместим как с системами BIOS, так и с UEFI, может показаться сложной задачей, особенно если вы только что провели переработку системы, как в вашем случае с Ubuntu. В этом посте мы предоставим пошаговую инструкцию, которая поможет вам решить данную задачу.

1. Предпосылки

Перед тем как начать, убедитесь, что вы установили необходимые инструменты: debootstrap, grub, mtools (включая mcopy) и xorriso. Эти инструменты помогут вам создать базовую файловую структуру и форматировать конечный ISO-образ.

2. Подготовка образа EFI

Для начала вам нужно создать образ EFI, который будет служить системным разделом EFI (ESP). Используйте следующий скрипт:

#! /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-форматированный файл efi.img, который будет вашим ESP-образом.

3. Создание ISO-образа

Теперь вам нужно использовать xorriso для создания ISO-образа. Вот пример команды:

xorriso -as mkisofs \
    -r -V <ISO_LABEL> \
    -o <OUTPUT_ISO_IMAGE> \
    -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>

4. Важные моменты

  1. ISOLINUX для BIOS: Не забывайте, что для загрузки на системах BIOS вам понадобится ISOLINUX. GRUB2 подходит только для UEFI. Вам необходимо удостовериться, что файлы ISOLINUX находятся в каталоге, который вы указываете в команде -b.

  2. Современная версия xorriso: Используйте последнюю версию xorriso, так как некоторые параметры, такие как --interval:appended_partition_2:all::, были добавлены только в более поздних версиях.

  3. Структура каталогов: Обязательно создайте необходимые каталоги и файлы, чтобы структура ISO соответствовала стандартам, необходимым для загрузки обеих систем.

Заключение

Создание загрузочного ISO-образа, совместимого с BIOS и UEFI, требует внимательного соблюдения всех шагов, начиная от создания образа EFI до использования правильных инструментов для создания ISO. Следуя этой инструкции, вы сможете достичь своей цели и создать универсальный загрузочный образ для системы Ubuntu.

Если у вас возникнут дополнительные вопросы или потребуется помощь, не стесняйтесь обращаться за поддержкой в профессиональные сообщества или форумы. Успехов в вашем проекте!

Оцените материал
Добавить комментарий

Капча загружается...