Вопрос или проблема
Я заметил, что 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. Важные моменты
-
ISOLINUX для BIOS: Не забывайте, что для загрузки на системах BIOS вам понадобится ISOLINUX. GRUB2 подходит только для UEFI. Вам необходимо удостовериться, что файлы ISOLINUX находятся в каталоге, который вы указываете в команде
-b
. -
Современная версия xorriso: Используйте последнюю версию
xorriso
, так как некоторые параметры, такие как--interval:appended_partition_2:all::
, были добавлены только в более поздних версиях. -
Структура каталогов: Обязательно создайте необходимые каталоги и файлы, чтобы структура ISO соответствовала стандартам, необходимым для загрузки обеих систем.
Заключение
Создание загрузочного ISO-образа, совместимого с BIOS и UEFI, требует внимательного соблюдения всех шагов, начиная от создания образа EFI до использования правильных инструментов для создания ISO. Следуя этой инструкции, вы сможете достичь своей цели и создать универсальный загрузочный образ для системы Ubuntu.
Если у вас возникнут дополнительные вопросы или потребуется помощь, не стесняйтесь обращаться за поддержкой в профессиональные сообщества или форумы. Успехов в вашем проекте!