xorriso 在 VirtualBox 中创建了 ISO 启动,但没有在物理笔记本电脑中创建

xorriso 在 VirtualBox 中创建了 ISO 启动,但没有在物理笔记本电脑中创建

我创建了一个修改后的 Ubuntu 22.04 ISO 映像最近的桌面 ISO 映像。它可以在新的 VirtualBox VM 中作为 ISO 正确启动和安装(如果我不启用 UEFI);然而,我的相对较新的笔记本电脑无法从使用我修改过的 ISO 格式化的 USB 记忆棒启动,尽管它可以识别并安装原始的 Ubuntu 22.04 ISO 映像。我想我滥用了 xorriso,但对它的理解还不足以发现我的错误。我究竟做错了什么?

xorriso 报告了原始 Ubuntu 22.04 桌面 ISO 的以下详细信息:

$  xorriso -indev jammy-desktop-amd64.iso -report_el_torito as_mkisofs
xorriso 1.5.4 : RockRidge filesystem manipulator, libburnia project.

xorriso : NOTE : Loading ISO image tree from LBA 0
xorriso : UPDATE :     963 nodes read in 1 seconds
libisofs: NOTE : Found hidden El-Torito image for EFI.
libisofs: NOTE : EFI image start and size: 2007921 * 2048 , 8496 * 512
xorriso : NOTE : Detected El-Torito boot information which currently is set to be discarded
Drive current: -indev 'jammy-desktop-amd64.iso'
Media current: stdio file, overwriteable
Media status : is written , is appendable
Boot record  : El Torito , MBR protective-msdos-label grub2-mbr cyl-align-off GPT
Media summary: 1 session, 2010211 data blocks, 3926m data, 1117g free
Volume id    : 'Ubuntu 22.04.1 LTS amd64'
-V 'Ubuntu 22.04.1 LTS amd64'
--modification-date='2022080117275700'
--grub2-mbr --interval:local_fs:0s-15s:zero_mbrpt,zero_gpt:'jammy-desktop-amd64.iso'
--protective-msdos-label
-partition_cyl_align off
-partition_offset 16
--mbr-force-bootable
-append_partition 2 28732ac11ff8d211ba4b00a0c93ec93b --interval:local_fs:8031684d-8040179d::'jammy-desktop-amd64.iso'
-appended_part_as_gpt
-iso_mbr_part_type a2a0d0ebe5b9334487c068b6b72699c7
-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_start_2007921s_size_8496d:all::'
-no-emul-boot
-boot-load-size 8496

并且,我使用大部分相同的参数创建新的 ISO:

$ xorriso -as mkisofs -o my-modified-ubuntu-22.04.iso \
    -V 'Modified Ubuntu 22.04 amd64' \
    --grub2-mbr --interval:local_fs:0s-15s:zero_mbrpt,zero_gpt:'jammy-desktop-amd64.iso' \
    --protective-msdos-label \
    -partition_cyl_align off \
    -partition_offset 16 \
    --mbr-force-bootable \
    -append_partition 2 28732ac11ff8d211ba4b00a0c93ec93b \
    --interval:local_fs:7129428d-7137923d::'jammy-desktop-amd64.iso' \
    -appended_part_as_gpt -iso_mbr_part_type a2a0d0ebe5b9334487c068b6b72699c7 \
    -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_start_1782357s_size_8496d:all::' \
    -no-emul-boot \
    -boot-load-size 8496 \
    <SRC_DIR>

我的<SRC_DIR>是一个使用原始 ISO 作为基础的覆盖层,但我在其根目录中修改了以下文件:

  • /casper/filesystem.squashfs
  • /casper/filesystem.manifest
  • /casper/filesystem.size
  • /md5sum.txt
  • /preseed/ubuntu.seed

所有其他文件和 ISO 内容与原始文件相同。

我相信 ISO 是几乎很好,因为它在 VirtualBox 中运行良好,展示了所需的修改,但我无法强制我的笔记本电脑看到它并从中启动,即使它会从原始的 Ubuntu 22.04 桌面 ISO 启动。 :(

我正在同一台笔记本电脑上使用 Ubuntu 22.04 桌面,从原始上游 ISO 安装。

并且,我使用以下方法创建了 USB 密钥:

$ dd bs=4M \
    if=/home/me/my-modified-ubuntu-22.04.iso \
    of=/dev/sda \
    status=progress \
    oflag=sync

$ xorriso --version
xorriso 1.5.4 : RockRidge filesystem manipulator, libburnia project.

xorriso 1.5.4
ISO 9660 Rock Ridge filesystem manipulator and CD/DVD/BD burn program
Copyright (C) 2019, Thomas Schmitt <[email protected]>, libburnia project.
xorriso version   :  1.5.4
Version timestamp :  2021.01.30.150001
Build timestamp   :  -none-given-
libisofs   in use :  1.5.4  (min. 1.5.4)
libjte     in use :  2.0.0  (min. 2.0.0)
libburn    in use :  1.5.4  (min. 1.5.4)
libburn OS adapter:  internal GNU/Linux SG_IO adapter sg-linux
libisoburn in use :  1.5.4  (min. 1.5.4)
Provided under GNU GPL version 3 or later, due to libreadline license.
There is NO WARRANTY, to the extent permitted by law.

答案1

xorriso 运行看起来不错。我尝试将 ubuntu-22.04-desktop-amd64.iso 安装为 SRC_DIR,然后让 xorriso 报告其引导设备。唯一显着的区别是卷 ID (-V) 和 --modification-date。理论上,GRUB 或引导系统可能需要两者来查找 ISO。但如果 GRUB 找不到 ISO,您至少应该看到一些来自 GRUB 的消息文本,并且它在 VirtualBox 中的工作效果不应比在真机上更好。

我认为安全启动是潜在的问题根源。但我对它的了解还不足以提出实验,除了你可以尝试在笔记本电脑的 EFI 中禁用它。

我唯一的另一个实验想法是,如果您避免覆盖文件系统并简单地使用其原始文件内容重新打包 ISO,则尝试它是否有效。

(如果您在这里发布结果但没有收到我的回复,请发送邮件至 [电子邮件受保护]


Trevor 回答后更新:

所以 VirtualBox 可能是通过 BIOS 启动的,而不是通过 EFI 启动的。

我希望有某种方法可以自动拉出这些偏移量:

xorriso 在其本机命令模式下可以加载 ISO,操作加载的 ISO 模型,并根据旧 ISO 中的数据和更改写入新 ISO。繁琐的数字将被隐藏起来。请参阅末尾的 xorriso 运行 https://dev.lovelyhq.com/libburnia/libisoburn/raw/branch/master/test/merge_debian_isos 或者我的回答的结尾 如何从自定义 Ubuntu 22.04 映像创建可启动 ISO? 重要的是 -indev、-outdev 和 -boot_image“any”“replay”。

答案2

@Thomas,问题是原始 ISO 中重用分区的位置在开发过程中发生了变化,而我没有注意到。我需要更新字节偏移量。请参见:

@@ -144,7 +144,7 @@ Makefile
                -partition_cyl_align off \
                -partition_offset 16 \
                --mbr-force-bootable \
-               -append_partition 2 28732ac11ff8d211ba4b00a0c93ec93b --interval:local_fs:7129428d-7137923d::'jammy-desktop-amd64.iso' \
+               -append_partition 2 28732ac11ff8d211ba4b00a0c93ec93b --interval:local_fs:8031684d-8040179d::'jammy-desktop-amd64.iso' \
                -appended_part_as_gpt -iso_mbr_part_type a2a0d0ebe5b9334487c068b6b72699c7 \
                -c '/boot.catalog' \
                -b '/boot/grub/i386-pc/eltorito.img' \
@@ -152,7 +152,7 @@ Makefile
                -boot-load-size 4 \
                -boot-info-table \
                --grub2-boot-info \
-               -eltorito-alt-boot -e '--interval:appended_partition_2_start_1782357s_size_8496d:all::' \
+               -eltorito-alt-boot -e '--interval:appended_partition_2_start_2007921s_size_8496d:all::' \
                -no-emul-boot \
                -boot-load-size 8496 \
                iso/overlay

现在可以了。我应该在发布问题时更加关注 xorriso 报告的输出。抱歉打扰了。

我希望有某种方法可以自动提取这些偏移量,而不是对它们进行硬编码。但是,我认为这是另一天的问题? :)

相关内容