Создание загрузочного UEFI live-usb с использованием пользовательского ISO

У меня есть устройство с процессором AMD64, но загрузчиком UEFI, который поддерживает только i386.

Я сделал пользовательский установщик Ubuntu 19.04 ISO, используя Cubic , и перенес его на USB, используя usb-creator-gtk (Startup Disk Creator).

Это создает два раздела на USB:

USB Partitions

Первый раздел отформатирован как ISO9660 и содержит содержимое ISO, второй - раздел FAT32, содержащий только загрузочные файлы .EFI.

Второй раздел - это то, с чего планшет будет загружаться. Его содержимое взято из файла efi.img, который хранится в / boot / grub в ISO. Первоначально он содержал только E64-файлы AMD64. с помощью этих команд:

dd if=/dev/zero of=efi.img bs=1M count=5
mkfs.fat efi.img
sudo mount -o loop,rw efi.img /media/efi
sudo cp -r <files> /media/efi

Это успешно делает загрузочный USB, однако он не загружает установщик Grub, он только загружает командную строку Grub.

Я использовал этот bootia32.efi файл для успешной загрузки grub прежде, если вместо этого я вручную отформатирую USB как FAT32, скопирую файлы ISO и поместу пользовательский файл EFI в / EFI / BOOT, после чего устройство загрузится в Grub, как я и ожидал.

Но я бы хотел сделать ISO-образ, который можно прошивать как обычно и нормально загружаться.

У меня вопрос: какой смысл создавать отдельный раздел для хранения загрузочных файлов EFI, как это делает usb-creator-gtk? Как заставить этот раздел загружать конфигурацию Grub установщика, а не только командную строку Grub?

Спасибо

2
задан 24 August 2019 в 00:50

1 ответ

Благодаря @oldfred для объяснения, что разделенные разделы состоят в том, чтобы преодолеть предел размера файла на 4 ГБ для FAT32.

Мне удалось создать загрузочный ISO путем помещения обоих boot папка и EFI папки от ISO в FAT32 (efi.img) раздел.

Я изменил grub.cfg для запуска от другого раздела, чем тот, в котором он находится.

Это не кажется правильным мне, потому что исходный efi.img файл только имел три файла:

BOOTx64.EFI
grubx64.efi
mmx64.efi

Но, это работает так, я счастлив.

Точная структура моего efi.img файла - это:

.
├── boot
│  └── grub
│  ├── font.pf2
│  ├── grub.cfg
│  ├── loopback.cfg
│  └── x86_64-efi
│  ├── acpi.mod
│  ├── adler32.mod
│  ├── ahci.mod
│  ├── all_video.mod
│  ├── aout.mod
│  ├── appleldr.mod
│  ├── archelp.mod
│  ├── ata.mod
│  ├── at_keyboard.mod
│  ├── backtrace.mod
│  ├── bfs.mod
│  ├── bitmap.mod
│  ├── bitmap_scale.mod
│  ├── blocklist.mod
│  ├── boot.mod
│  ├── bsd.mod
│  ├── bswap_test.mod
│  ├── btrfs.mod
│  ├── bufio.mod
│  ├── cat.mod
│  ├── cbfs.mod
│  ├── cbls.mod
│  ├── cbmemc.mod
│  ├── cbtable.mod
│  ├── cbtime.mod
│  ├── chain.mod
│  ├── cmdline_cat_test.mod
│  ├── cmp.mod
│  ├── cmp_test.mod
│  ├── command.lst
│  ├── cpio_be.mod
│  ├── cpio.mod
│  ├── cpuid.mod
│  ├── crc64.mod
│  ├── cryptodisk.mod
│  ├── crypto.lst
│  ├── crypto.mod
│  ├── cs5536.mod
│  ├── ctz_test.mod
│  ├── datehook.mod
│  ├── date.mod
│  ├── datetime.mod
│  ├── diskfilter.mod
│  ├── disk.mod
│  ├── div.mod
│  ├── div_test.mod
│  ├── dm_nv.mod
│  ├── echo.mod
│  ├── efifwsetup.mod
│  ├── efi_gop.mod
│  ├── efinet.mod
│  ├── efi_uga.mod
│  ├── ehci.mod
│  ├── elf.mod
│  ├── eval.mod
│  ├── exfat.mod
│  ├── exfctest.mod
│  ├── ext2.mod
│  ├── fat.mod
│  ├── file.mod
│  ├── fixvideo.mod
│  ├── font.mod
│  ├── fs.lst
│  ├── gcry_arcfour.mod
│  ├── gcry_blowfish.mod
│  ├── gcry_camellia.mod
│  ├── gcry_cast5.mod
│  ├── gcry_crc.mod
│  ├── gcry_des.mod
│  ├── gcry_dsa.mod
│  ├── gcry_idea.mod
│  ├── gcry_md4.mod
│  ├── gcry_md5.mod
│  ├── gcry_rfc2268.mod
│  ├── gcry_rijndael.mod
│  ├── gcry_rmd160.mod
│  ├── gcry_rsa.mod
│  ├── gcry_seed.mod
│  ├── gcry_serpent.mod
│  ├── gcry_sha1.mod
│  ├── gcry_sha256.mod
│  ├── gcry_sha512.mod
│  ├── gcry_tiger.mod
│  ├── gcry_twofish.mod
│  ├── gcry_whirlpool.mod
│  ├── geli.mod
│  ├── gettext.mod
│  ├── gfxmenu.mod
│  ├── gfxterm_background.mod
│  ├── gfxterm_menu.mod
│  ├── gfxterm.mod
│  ├── gptsync.mod
│  ├── grub.cfg
│  ├── gzio.mod
│  ├── halt.mod
│  ├── hashsum.mod
│  ├── hdparm.mod
│  ├── help.mod
│  ├── hexdump.mod
│  ├── hfs.mod
│  ├── hfspluscomp.mod
│  ├── hfsplus.mod
│  ├── http.mod
│  ├── iorw.mod
│  ├── jfs.mod
│  ├── jpeg.mod
│  ├── keylayouts.mod
│  ├── keystatus.mod
│  ├── ldm.mod
│  ├── legacycfg.mod
│  ├── legacy_password_test.mod
│  ├── linux16.mod
│  ├── linuxefi.mod
│  ├── linux.mod
│  ├── loadbios.mod
│  ├── loadenv.mod
│  ├── loopback.mod
│  ├── lsacpi.mod
│  ├── lsefimmap.mod
│  ├── lsefi.mod
│  ├── lsefisystab.mod
│  ├── lsmmap.mod
│  ├── ls.mod
│  ├── lspci.mod
│  ├── lssal.mod
│  ├── luks.mod
│  ├── lvm.mod
│  ├── lzopio.mod
│  ├── macbless.mod
│  ├── macho.mod
│  ├── mdraid09_be.mod
│  ├── mdraid09.mod
│  ├── mdraid1x.mod
│  ├── memrw.mod
│  ├── minicmd.mod
│  ├── minix2_be.mod
│  ├── minix2.mod
│  ├── minix3_be.mod
│  ├── minix3.mod
│  ├── minix_be.mod
│  ├── mmap.mod
│  ├── moddep.lst
│  ├── morse.mod
│  ├── mpi.mod
│  ├── msdospart.mod
│  ├── mul_test.mod
│  ├── multiboot2.mod
│  ├── multiboot.mod
│  ├── nativedisk.mod
│  ├── net.mod
│  ├── newc.mod
│  ├── ntfscomp.mod
│  ├── ntfs.mod
│  ├── odc.mod
│  ├── offsetio.mod
│  ├── ohci.mod
│  ├── part_acorn.mod
│  ├── part_amiga.mod
│  ├── part_apple.mod
│  ├── part_bsd.mod
│  ├── part_dfly.mod
│  ├── part_dvh.mod
│  ├── part_gpt.mod
│  ├── partmap.lst
│  ├── part_msdos.mod
│  ├── part_plan.mod
│  ├── part_sun.mod
│  ├── part_sunpc.mod
│  ├── parttool.lst
│  ├── parttool.mod
│  ├── password.mod
│  ├── password_pbkdf2.mod
│  ├── pata.mod
│  ├── pbkdf2.mod
│  ├── pbkdf2_test.mod
│  ├── pcidump.mod
│  ├── play.mod
│  ├── png.mod
│  ├── priority_queue.mod
│  ├── probe.mod
│  ├── procfs.mod
│  ├── progress.mod
│  ├── raid5rec.mod
│  ├── raid6rec.mod
│  ├── random.mod
│  ├── read.mod
│  ├── reboot.mod
│  ├── regexp.mod
│  ├── reiserfs.mod
│  ├── relocator.mod
│  ├── romfs.mod
│  ├── scsi.mod
│  ├── serial.mod
│  ├── setjmp.mod
│  ├── setjmp_test.mod
│  ├── setpci.mod
│  ├── shift_test.mod
│  ├── signature_test.mod
│  ├── sleep.mod
│  ├── sleep_test.mod
│  ├── spkmodem.mod
│  ├── squash4.mod
│  ├── syslinuxcfg.mod
│  ├── terminal.lst
│  ├── terminal.mod
│  ├── terminfo.mod
│  ├── test_blockarg.mod
│  ├── testload.mod
│  ├── test.mod
│  ├── testspeed.mod
│  ├── tftp.mod
│  ├── tga.mod
│  ├── time.mod
│  ├── trig.mod
│  ├── tr.mod
│  ├── true.mod
│  ├── udf.mod
│  ├── ufs1_be.mod
│  ├── ufs1.mod
│  ├── ufs2.mod
│  ├── uhci.mod
│  ├── usb_keyboard.mod
│  ├── usb.mod
│  ├── usbms.mod
│  ├── usbserial_common.mod
│  ├── usbserial_ftdi.mod
│  ├── usbserial_pl2303.mod
│  ├── usbserial_usbdebug.mod
│  ├── usbtest.mod
│  ├── verify.mod
│  ├── video_bochs.mod
│  ├── video_cirrus.mod
│  ├── video_colors.mod
│  ├── video_fb.mod
│  ├── videoinfo.mod
│  ├── video.lst
│  ├── video.mod
│  ├── videotest_checksum.mod
│  ├── videotest.mod
│  ├── xfs.mod
│  ├── xnu.mod
│  ├── xnu_uuid.mod
│  ├── xnu_uuid_test.mod
│  ├── xzio.mod
│  └── zfscrypt.mod
└── efi
    └── boot
        ├── bootia32.efi
        ├── BOOTx64.EFI
        ├── grubx64.efi
        └── mmx64.efi

Некоторые из тех, вероятно, не необходимы, но я не обеспокоен дополнительными 10 МБ пространства, которое это использует.

Это - мой grub.cfg в img.efi файле, отметьте set root=(hd0):

if loadfont /boot/grub/font.pf2 ; then
    set gfxmode=auto
    insmod efi_gop
    insmod efi_uga
    insmod gfxterm
    terminal_output gfxterm
fi

set menu_color_normal=white/black
set menu_color_highlight=black/light-gray

set timeout=5
menuentry "Install Ubuntu Server" {
    set root=(hd0)
    set gfxpayload=keep
    linux   /casper/vmlinuz  boot=casper only-ubiquity quiet splash ---
    initrd  /casper/initrd
}
menuentry "Run from internal disk" {
    linux    (hd1,gpt2)/boot/vmlinuz root=/dev/mmcblk1p2 intel_idle.max_cstate=0 quiet splash $vt_handoff
    initrd   (hd1,gpt2)/boot/initrd
}

Если кто-либо может пролить дальнейший свет на то, что должно быть в efi.img файле, сообщите мне.

0
ответ дан 2 December 2019 в 06:03

Другие вопросы по тегам:

Похожие вопросы: