重新制作 Ubuntu 20.10 的安装映像

重新制作 Ubuntu 20.10 的安装映像

我确实重新制作了用于在我的计算机上安装 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

相关内容