Boot

為什麼我的自定義建構 iso 不能在 EFI 中啟動?

  • September 28, 2020

我正在 mkisofs 模式下使用 xorriso 建構自定義 iso。建構似乎是正確的,之後檢查 iso 顯示 2 個啟動映像(1 個 BIOS,2 個 UEFI),但使用 OVMF 韌體從 qemu 啟動到 ISO 時找不到任何可啟動媒體。

如果我在 qemu 中嘗試完全相同的引導,​​但使用乾淨下載的 ubuntu 16.04 伺服器 iso,它可以毫無問題地引導。

如果我使用 BIOS(不是 UEFI),兩者都可以正常啟動。

xorriso 命令:

xorriso -as mkisofs \
  -l -J -R -V version \
  -no-emul-boot -boot-load-size 4 -boot-info-table \
  -b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat \
  -isohybrid-mbr isohhdpfx.bin \
  -eltorito-alt-boot -e EFI/BOOT/BOOTX64.EFI -no-emul-boot \
  -isohybrid-gpt-basdat \
  -o testos.iso ./cddir/

檢查 2 iso(ubuntu 和我定制的)的詳細資訊xorriso -report_el_torito plaincmd以下要點中https://gist.github.com/deitch/e069268f92402d6a2b1c7e060ddba622

謝謝你飛xorriso

問題出在您讓 xorriso 標記為 EFI 系統分區的圖像文件中。它應該是一個 FAT 文件系統映像,其中包含一個名為/EFI/BOOT/BOOTX64.EFI(或…/BOOTIA32.EFI對於 32 位 x86)以及可能的其他文件的二進製文件。從 Ubuntu ISO 掛載文件 /boot/grub/efi.img 以了解其內容。

Ubuntu 和其他人使用的 FAT 文件系統可能是由 GRUB2 程序 grub-mkimage 生成的。無法使用 ISOLINUX/SYSLINUX EFI 軟體,因為它在看到 CD-ROM 設備時會退出。

獲取可引導 ISO 的一種非常方便的方法是程序grub-mkrescue。如果為 BIOS 和 EFI 配置了 GRUB2(例如,通過安裝二進制包grub-pcgrub-efi-amd64grub-efi-ia32),那麼grub-mkrescue 將生成一個在 32 位和 64 位 x86 機器的 BIOS 和 EFI 上啟動的 ISO:El Torito BIOS 和 EFI 啟動映像,EFI 映像具有 BOOTX64.EFIBOOTIA32.EFI,MBR 用於硬碟的 BIOS,GPT 用於硬碟的 EFI。

引用自:https://unix.stackexchange.com/questions/283846