使用 grub-mkrescue 进行重新旋转以制作实时 USB

使用 grub-mkrescue 进行重新旋转以制作实时 USB

我正在创建一个基于 Ubuntu 20.04.1 的 Linux respin。为了创建最终的 .iso,我正在运行一个名为 distroshare 的脚本(不再受支持)。它创建的 .iso 可以工作,但有一些事情有点奇怪:

  • 当我打开 .iso 时,一切都是大写 8.3 样式
  • 当我使用 Rufus 写入 USB 时,我仅获得 BIOS(或 UEFI-CSM)的目标系统选项
  • 当我使用 Rufus 写入 USB 时,我被迫以 dd 模式写入
  • 系统无法在 SecureBoot 模式下启动

我发现如果我下载官方的 Ubuntu .iso,情况会有所不同:

  • 一切都是混合大小写
  • 我获得了 BIOS 或 UEFI 的目标系统选项
  • 我可以使用 ISO 模式写入 USB
  • SecureBoot 中的引导

不确定这些事情是否相关,但我确实知道脚本中的重要命令是:

grub-mkrescue -o "${WORK}"/live.iso "${CD}"

该命令的输出如下所示:

Creating the iso
xorriso 1.5.2 : RockRidge filesystem manipulator, libburnia project.

Drive current: -outdev 'stdio:/home/distroshare/live.iso'
Media current: stdio file, overwriteable
Media status : is blank
Media summary: 0 sessions, 0 data blocks, 0 data, 11.2g free
Added to ISO image: directory '/'='/tmp/grub.PGtTeI'
xorriso : UPDATE :     574 files added in 1 seconds
Added to ISO image: directory '/'='/home/distroshare/CD'
xorriso : UPDATE :     590 files added in 1 seconds
xorriso : NOTE : Copying to System Area: 512 bytes from file '/usr/lib/grub/i386-pc/boot_hybrid.img'
libisofs: NOTE : Automatically adjusted MBR geometry to 1021/165/32
xorriso : UPDATE :  1.13% done
xorriso : UPDATE :  11.48% done
xorriso : UPDATE :  19.02% done
xorriso : UPDATE :  28.71% done, estimate finish Thu Sep 10 16:43:07 2020
xorriso : UPDATE :  38.24% done, estimate finish Thu Sep 10 16:43:08 2020
xorriso : UPDATE :  45.26% done, estimate finish Thu Sep 10 16:43:08 2020
xorriso : UPDATE :  56.44% done, estimate finish Thu Sep 10 16:43:08 2020
xorriso : UPDATE :  65.32% done, estimate finish Thu Sep 10 16:43:08 2020
xorriso : UPDATE :  74.83% done, estimate finish Thu Sep 10 16:43:08 2020
xorriso : UPDATE :  83.64% done, estimate finish Thu Sep 10 16:43:08 2020
xorriso : UPDATE :  92.53% done
ISO image produced: 1346790 sectors
Written to medium : 1346790 sectors at LBA 0
Writing to 'stdio:/home/distroshare/live.iso' completed successfully. 

我需要为 grub-mkrescue 使用不同的开关吗?我应该改用 grub-mkimage 吗?这些有什么意义吗?

编辑:托马斯评论后的更多信息

我尝试了 -J 开关,它工作得很好。我很困惑,因为它实际上不是一个 grub-mkrescue 开关,而是一个通过的 xorriso 开关。

我仍然对整个 EFI/SecureBoot 问题感到非常困惑。我当前的 iso 根目录中有一个名为 efi.img 的文件。除了我安装了 grub-efi-amd64-signed 之外,我真的不确定它是如何到达那里的。因为它说它已经签名并且我知道 Ubuntu 产品受到 SecureBoot 的信任,所以我认为它会起作用,但事实并非如此。

在计算 md5 和之前,我可以简单地将 /EFI/BOOT 目录从 Ubuntu iso 中复制出来并将其放入我的 iso 的根目录中吗?或者我应该做其他事情来获取 /EFI 目录?

答案1

当我打开 .iso 时,一切都是大写 8.3 样式

如果这种情况发生在 MS-Windows 上,则可能是由于 ISO 中缺少 Joliet 树。将选项 -J 添加到 grub-mkrescue 即可获取它。

在 Linux 和其他类 Unix 系统上,由于 ISO 中的 Rock Ridge 数据,您应该会看到原始文件名。

当我使用 Rufus 写入 USB 时,我被迫以 dd 模式写入

这可能是因为 Rufus 无法识别 GRUB 中的 BIOS 引导设备。考虑向 Rufus 支持人员寻求解释,甚至寻求改进。

系统无法在 SecureBoot 模式下启动

这需要一个由 Microsoft Inc. 签名的引导程序。Ubuntu 经历了该过程。 (我计算出 ubuntu-19.04-desktop-amd64.iso 的 EFI 分区的 /EFI/BOOT/BOOTX64.EFI 中出现了 46 次“Microsoft”一词。)

也许您可以自己签署该程序并告诉您的 EFI 接受您的签名。但这超出了我的范围,我担心。

我应该改用 grub-mkimage 吗?

而不是。 grub-mkrescue 使用 grub-mkimage 创建 EFI 分区。一般来说,grub-mkrescue 是 GRUB 建议使用 GRUB 引导设备制作 ISO 的工具。

祝你今天过得愉快 :)

托马斯

相关内容