我确实重新制作了用于在我的计算机上安装 Ubuntu 的映像,以便进行自定义预置。但对于 20.10,我之前使用的流程和命令不起作用
这是我在 20.04 中使用的命令:
xorriso -as mkisofs -r -V "$disk_title" -J -joliet-long -cache-inodes -l -isohybrid-mbr "$MBR_FILE" -c isolinux/boot.cat -b isolinux/isolinux.bin -boot-load-size 4 -iso-level 3 -boot-info-table -eltorito-alt-boot -e boot/grub/efi.img -no-emul-boot -isohybrid-gpt-basdat -o Image.iso unpackedImageDirectory
但是 20.10 似乎根本不使用 isolinux(syslinux),因为我找不到该目录。boot
目录中的文件也发生了变化。
新的正确流程是什么?
答案1
Ubuntu 的 ISO 发生了很多变化:
BIOS 启动映像和 MBR 现在来自 GRUB。
EFI 系统分区不再是 ISO 中的文件。
分区表现在是 GPT。但是 ISO 保留了其旧的 jackalope 样式,增加了一个类型为 00、大小为 1 的 MBR 分区。这个几乎不存在的分区保存了一些旧 BIOS 机器的启动标志,只有当某些 MBR 分区条目中存在此标志时,这些机器才会启动。EE 类型的保护性 MBR 分区不允许带有此标志。
$ /sbin/fdisk -l ubuntu-20.10-desktop-amd64.iso
...
Disklabel type: gpt
...
Device Start End Sectors Size Type
ubuntu-20.10-desktop-amd64.iso1 64 5735483 5735420 2.8G Microsoft basic da
ubuntu-20.10-desktop-amd64.iso2 5735484 5745435 9952 4.9M EFI System
ubuntu-20.10-desktop-amd64.iso3 5745436 5746035 600 300K Microsoft basic da
您可以从原始 ISO 中提取 MBR 和 EFI 分区映像。
orig=ubuntu-20.10-desktop-amd64.iso
mbr=ubuntu-20.10-desktop-amd64.mbr
efi=ubuntu-20.10-desktop-amd64.efi
# Extract the MBR template
dd if="$orig" bs=1 count=446 of="$mbr"
# Extract EFI partition image
skip=$(/sbin/fdisk -l "$orig" | fgrep '.iso2 ' | awk '{print $2}')
size=$(/sbin/fdisk -l "$orig" | fgrep '.iso2 ' | awk '{print $4}')
dd if="$orig" bs=512 skip="$skip" count="$size" of="$efi"
现在你可以打包新的 ISO:
new=Image.iso
xorriso -as mkisofs \
-r -V "$disk_title" -J -joliet-long -l \
-iso-level 3 \
-partition_offset 16 \
--grub2-mbr "$mbr" \
--mbr-force-bootable \
-append_partition 2 0xEF "$efi" \
-appended_part_as_gpt \
-c /boot.catalog \
-b /boot/grub/i386-pc/eltorito.img \
-no-emul-boot -boot-load-size 4 -boot-info-table --grub2-boot-info \
-eltorito-alt-boot \
-e '--interval:appended_partition_2:all::' \
-no-emul-boot \
-o "$new" \
unpackedImageDirectory
我从运行中获取了启动准备选项
xorriso -indev "$orig" -report_el_torito as_mkisofs
遗憾的是,xorriso <= 1.5.2 在使用 --mbr-force-bootable 的 ISO 中,此命令的输出存在错误,同时报告了 -as mkisofs 选项
-part_like_isohybrid
这会破坏从新的联想笔记本电脑启动的 ISO。最新的 GNU xorriso-1.5.3 tarball 已修复此错误。
祝你今天过得愉快 :)
托马斯
根据要求编辑:
关于新的启动设备。
启动诱饵集与旧 ISO 一样挤满了人:来自光学介质的 BIOS 和 EFI 的 El Torito、来自 USB 记忆棒的 BIOS 的 MBR x86 代码、来自 USB 记忆棒的 EFI 的带有 EFI 分区的分区表。
放弃 SYSLINUX/ISOLINUX 的原因可能是其维护状态不佳,而且无论如何都需要 GRUB 才能通过光学介质上的 EFI 进行启动。在某些现代 EFI 笔记本电脑上,ISOLINUX 和 GRUB 的旧分区布局组合无法与 GRUB+GRUB 配合使用。我怀疑它们只有在存在 ISOLINUX MBR 的情况下才能容忍 MBR 分区表。从 UEFI 规格来看,这种旧布局相当糟糕。
因此 Ubuntu 转而使用附加分区和 GPT 作为分区表。一些旧的 HP 笔记本电脑无法使用,必须通过 MBR 分区表中的启动标志来恢复。
这种改变是费力的,甚至有些痛苦。 https://bugs.launchpad.net/ubuntu-cdimage/+bug/1886148 https://bugs.launchpad.net/ubuntu-cdimage/+bug/1899308