создать чистый загрузочный iso uefi из каталога

Я создал живую систему Linux, и я хочу создать iso-файл, который может загружать uefi, старый BIOS не нужен.

У меня есть одна папка с файлами EFIBOOT (содержащая диспетчер загрузки Refind и мое загрузочное ядро ​​efi (Linux-Sytem.efi))

EFITBOOT

efi
    ├── boot
    │   ├── bootx64.efi
    │   └── refind.conf
    └── gentoo
        └── Linux-Sytem.efi

и одна папка, содержащая образ системы:

system/
└── Linux-Sytem.img

Я предполагаю, что теперь мне нужно создать efi-совместимый (fat16 / 32) efi.img, содержащий структуру EFIBOOT.

Затем мне как-то нужно создать iso, объединяющий efi.img и структуру системы ...

Я видел различные учебники с использованием grub для этого, но все они используют параметры двойной загрузки (для uefi и bios) ...

Как я могу это сделать без инструментов grub и чистого uefi?

(Я уверен, что EFIBOOT и структура системы работают, если скопировать их на соответствующий разделенный / отформатированный USB-накопитель. Он загружается без проблем)


person Paul G.    schedule 07.08.2019    source источник


Ответы (1)


У меня это работает, но может ошибаться:

Сначала я создаю disk.iso с двумя разделами на нем, раздел EFI и раздел SYSTEM, весь img будет 1,4 ГБ (100 МБ для раздела EFI, остальное для раздела SYSTEM):

dd if=/dev/zero of=disk.iso bs=1M count=1400

Затем я разделяю файл disk.iso с помощью таблицы fdisk GPT:

fdisk disk.iso
# press
g # create GPT-Table
n # new partition
1 # partition number
ENTER # select default
+100M # set size to 100MB
t # set partition type
1 # to EFI SYSTEM
n # new partition
ENTER # default partition number
ENTER # default 1st sector
ENTER # default last sector
w # write changes to file and exit

Затем покажите схему раздела:

fdisk -l disk.iso
Disk disk.iso: 1.4 GiB, 1468006400 bytes, 2867200 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: D7DD43FA-30B6-2445-B34C-F4DB7B5D6F37

Device      Start     End Sectors  Size Type
disk.iso1    2048  206847  204800  100M EFI System
disk.iso2  206848 2867166 2660319  1.3G Linux filesystem

Используйте losetup для циклического монтирования обоих разделов с disk.iso, чтобы отформатировать оба раздела в желаемый формат (fat16 для EFI и ext4 для SYSTEM) и дополнительно назначить им метки, если необходимо ... Используйте значения fdisk START END, умноженные на размер сектора, чтобы установить границы:

losetup --offset $((512*2048)) --sizelimit $((512*206847)) --show --find disk.iso
# /dev/loop0
losetup --offset $((512*206848)) --sizelimit $((512*2867166)) --show --find disk.iso
# /dev/loop1
mkfs.fat -F16 /dev/loop0
mkfs.ext4 /dev/loop1
tune2fs -L "SYSTEM" /dev/loop1  # assign label SYSTEM to SYSTEM-Partition

Смонтируйте оба раздела и скопируйте в них соответствующий контент:

mkdir /mnt/p1 /mnt/p2
mount /dev/loop0 /mnt/p1/
mount /dev/loop1 /mnt/p2/
cp -a efi /mnt/p1/
cp -a system/* /mnt/p2/
umount /mnt/p1 /mnt/p2

Размонтируйте оба петлевых устройства:

losetup -d /dev/loop0 /dev/loop1 

Теперь disk.iso готов к загрузке. ISO тестировался с qemu-kvm и virt-manager, вставленным как носитель CDROM. Не тестировалось на реальных сгоревших дисках!

person Paul G.    schedule 09.08.2019
comment
Идеально! Намного проще, чем все сложные загрузочные образы. В моем случае мне просто понадобились инструменты EFI, поэтому я просто fdisk использовал весь диск как один раздел, смонтировал, скопировал и загрузился через мой IODD. Спасибо! - person eduncan911; 24.03.2021