AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 708672
Accepted
ahmadreza1383
ahmadreza1383
Asked: 2022-07-06 04:38:52 +0800 CST2022-07-06 04:38:52 +0800 CST 2022-07-06 04:38:52 +0800 CST

在 mkisofs 中将 iso 设为“可引导(dos/MBR 扇区)”

  • 772

我已经提取了iso文件“archlinux-2022.06.01-x86_64.iso”。我已经在“airootfs.sfs”文件中进行了更改

现在我要再次创建一个“可引导(dos/MBR 扇区)”iso 映像,就像我提取的原始 iso 文件一样

sudo xorriso -as  mkisofs -d -l -r  -no-emul-boot 
-o archlinux.iso .
-append_partition 2 0xef ../compile-linux/efi_part.img -e  "--interval:appended_partition_2:all::" -no-emul-boot ../compile-linux/bios_boot.img
-G ../compile-linux/mbr_code.img 
-b syslinux/isolinux.bin 
-c syslinux/boot.cat

输出file archlinux.iso

archlinux.iso: ISO 9660 CD-ROM filesystem data (DOS/MBR boot sector) 'ISOIMAGE' (bootable)

输出命令xorriso -indev archlinux.iso -report-el-torito plain -report-system-area plain

xorriso 1.5.4 : RockRidge filesystem manipulator, libburnia project.

xorriso : NOTE : Loading ISO image tree from LBA 0
xorriso : UPDATE :     114 nodes read in 1 seconds
xorriso : NOTE : Detected El-Torito boot information which currently is set to be discarded
Drive current: -indev 'archlinux.iso'
Media current: stdio file, overwriteable
Media status : is written , is appendable
Boot record  : El Torito , MBR cyl-align-off
Media summary: 1 session, 445804 data blocks,  871m data,  178g free
Volume id    : 'ISOIMAGE'
El Torito catalog  : 42  1
El Torito cat path : /syslinux/boot.cat
El Torito images   :   N  Pltf  B   Emul  Ld_seg  Hdpt  Ldsiz         LBA
El Torito boot img :   1  BIOS  y   none  0x0000  0x00     76          43
El Torito img path :   1  /syslinux/isolinux.bin
System area options: 0x00000a00
System area summary: MBR cyl-align-off
ISO image size/512 : 1783216
Partition offset   : 0
MBR heads per cyl  : 64
MBR secs per head  : 32
MBR partition table:   N Status  Type        Start       Blocks
MBR partition      :   1   0x00  0x83            0      1783216
MBR partition      :   2   0x00  0xef      1783216         1600

以上输出是我自己制作的iso文件

我尝试在虚拟机“Efi 选项已禁用”中使用我的 iso 文件,但我收到这些错误。

在此处输入图像描述

我是初学者,对此了解不多

这就是为什么我试图找到从原始iso输出制作图像的正确方法,但我没有成功

xorriso 1.5.4 : RockRidge filesystem manipulator, libburnia project.

xorriso : NOTE : ISO image bears MBR with  -boot_image any partition_offset=16
xorriso : NOTE : Loading ISO image tree from LBA 0
xorriso : UPDATE :     113 nodes read in 1 seconds
libisofs: NOTE : Found hidden El-Torito image for EFI.
libisofs: NOTE : EFI image start and size: 396800 * 2048 , 0 * 512
xorriso : NOTE : Detected El-Torito boot information which currently is set to be discarded
Drive current: -indev '../archlinux-2022.06.01-x86_64.iso'
Media current: stdio file, overwriteable
Media status : is written , is appendable
Boot record  : El Torito , MBR isohybrid cyl-align-all GPT
Media summary: 1 session, 440998 data blocks,  861m data,  178g free
Volume id    : 'ARCH_202206'
El Torito catalog  : 118  1
El Torito cat path : /syslinux/boot.cat
El Torito images   :   N  Pltf  B   Emul  Ld_seg  Hdpt  Ldsiz         LBA
El Torito boot img :   1  BIOS  y   none  0x0000  0x00      4         119
El Torito boot img :   2  UEFI  y   none  0x0000  0x00      0      396800
El Torito img path :   1  /syslinux/isolinux.bin
El Torito img opts :   1  boot-info-table isohybrid-suitable
El Torito img blks :   2  44032
System area options: 0x00000302
System area summary: MBR isohybrid cyl-align-all GPT
ISO image size/512 : 1763992
Partition offset   : 16
MBR heads per cyl  : 64
MBR secs per head  : 32
MBR partition table:   N Status  Type        Start       Blocks
MBR partition      :   1   0x80  0x00           64      1587136
MBR partition      :   2   0x00  0xef      1587200       176128
GPT                :   N  Info
GPT disk GUID      :      3230323230363041b130303533353232
GPT entry array    :      2  248  separated
GPT lba range      :      64  1763928  1763991
GPT partition name :   1  490053004f00480079006200720069006400
GPT partname local :   1  ISOHybrid
GPT partition GUID :   1  3230323230363041b131303533353232
GPT type GUID      :   1  a2a0d0ebe5b9334487c068b6b72699c7
GPT partition flags:   1  0x1000000000000001
GPT start and size :   1  64  1587136
GPT partition name :   2  490053004f004800790062007200690064003100
GPT partname local :   2  ISOHybrid1
GPT partition GUID :   2  3230323230363041b132303533353232
GPT type GUID      :   2  a2a0d0ebe5b9334487c068b6b72699c7
GPT partition flags:   2  0x1000000000000001
GPT start and size :   2  1587200  176128

我哪里做错了?我正在尝试创建我的 ISO 映像文件并实时使用它

谢谢您的帮助

arch-linux virtualbox
  • 2 2 个回答
  • 310 Views

2 个回答

  • Voted
  1. Best Answer
    Thomas Schmitt
    2022-07-07T00:26:02+08:002022-07-07T00:26:02+08:00

    您的 xorriso -as mkisofs 运行在 -e 及其修改选项和 -b 及其修改选项之间至少缺少分隔符 -eltorito-alt-boot 。因此,您的结果 ISO 缺少 EFI 的 El Torito 条目,因为 -e 已被 -b 覆盖。

    不管怎样,ISOLINUX 的失败不能归咎于这个缺点。我想这与缺少-b的修改选项有关。

    您可以向 xorriso 询问有关重放可引导 ISO 的引导相关选项的建议(如果 ISO 由 xorriso 制作,则效果最佳)。要正确分析 Archlinux ISO,您需要 xorriso-1.5.4 或更高版本,因为旧版本不期望使用的引导选项组合。

    $ xorriso -indev archlinux-2022.06.01-x86_64.iso -report_el_torito as_mkisofs
    ...
    -V 'ARCH_202206'
    --modification-date='2022060115352200'
    -isohybrid-mbr --interval:local_fs:0s-15s:zero_mbrpt,zero_gpt:'archlinux-2022.06.01-x86_64.iso'
    -partition_cyl_align all
    -partition_offset 16
    -partition_hd_cyl 64
    -partition_sec_hd 32
    --mbr-force-bootable
    -append_partition 2 0xef --interval:local_fs:1587200d-1763327d::'archlinux-2022.06.01-x86_64.iso'
    -iso_mbr_part_type 0x00
    -c '/syslinux/boot.cat'
    -b '/syslinux/isolinux.bin'
    -no-emul-boot
    -boot-load-size 4
    -boot-info-table
    -eltorito-alt-boot
    -e '--interval:appended_partition_2_start_396800s_size_176128d:all::'
    -no-emul-boot
    -boot-load-size 0
    -isohybrid-gpt-basdat
    

    并非所有这些都必须给出,因为有些是 ISO 的个体(-V 'ARCH_202206' --modification-date='2022060115352200')。有些并不是真正需要的,因为 xorriso 可以自己解决(-partition_cyl_align all -partition_hd_cyl 64 -partition_sec_hd 32 -boot-load-size 0)。

    与您的选项列表相比,我敢打赌这是无法从(虚拟)光学介质通过 BIOS 引导的直接原因:

    • 缺少 -b 修改选项:-no-emul-boot -boot-load-size 4 -boot-info-table (嗯,-no-emul-boot 错误地生效。)

    但是还有更多的问题:

    • 缺少 -eltorito-alt-boot,因此无法通过光学介质进行 EFI 引导。

    • 缺少 -e 修改选项 -isohybrid-gpt-basdat,因此没有 GPT 可通过 USB 记忆棒的挑剔 EFI 实现进行引导。

    • 缺少 -isohybrid-mbr,因此无法从 USB 记忆棒通过 BIOS 引导。相反,有一个带有模糊 MBR 图像 mbr_code.img 的盈余 -G (你从哪里得到这个?)

    • 晦涩的输入文件 ../compile-linux/bios_boot.img 将映射到 ISO 的根目录。

    -b 和 -e 的顺序是相反的,但应该没问题。EFI 映像的引导加载大小 0 是正确的,因为它太大而无法在引导目录中列出其实际大小(限制为 32 MiB)。

    使用 xorriso-1.5.4 将有一种更简单的方法来操作 Archlinux ISO:

    xorriso -indev archlinux-2022.06.01-x86_64.iso \
            -outdev archlinux.iso \
            ... xorriso manipulation commands like -map or -rm ... \
            -boot_image any replay
    

    (xorriso 问题和支持请求最好提交至 [email protected]。)

    祝你今天过得愉快 :)

    托马斯

    • 1
  2. telcoM
    2022-07-06T23:44:43+08:002022-07-06T23:44:43+08:00

    archlinux-2022.06.01-x86_64.iso总共可以通过四种不同的方式启动:

    • 作为 BIOS 模式下的(真实或虚拟)ISO9660 CD/DVD
    • 作为 UEFI 模式下的(真实或虚拟)ISO9660 CD/DVD
    • 作为 BIOS 模式下的 HDD 映像
    • 作为 UEFI 模式下的 HDD 映像

    根据archiso配置文件配置,UEFI 引导模式甚至包括两个单独的引导加载程序,用于 64 位和 32 位 x86 UEFI 实现(x64以及ia32UEFI 术语),因此您可以说它总共有六种引导模式。

    创建这样一个野兽很复杂,Arch 有一个专门的工具archiso来完成这项工作——我想这是有充分理由的。我建议您也许应该尝试使用它,而不是尝试重新发明轮子。的源代码archiso在 Gitlab 中可用,如果您发现需要自定义它。

    如果我对xorriso报告的解释正确,则您的 ISO 映像声称只能通过两种方式启动:

    • 作为 BIOS 模式下的(真实或虚拟)ISO9660 CD/DVD
    • 作为 UEFI 模式下的 HDD 映像(但仅具有 MBR 分区表)

    此外,在您的映像上,引导记录状态cyl-align-off显示为与 相对 isohybrid cyl-align-all,这表明 ISO 映像的各个组件可能未正确对齐。

    在真正的 Arch ISO 上,MBR 表示第一个分区(主要的 Iiso9660 文件系统内容)可以在 BIOS 模式下启动(状态 0x80),并且分区类型 ID 为 0x00,这是 ISO9660 文件系统的典型值,因为它们没有标准 MBR分配的分区类型 ID。在您的映像上,MBR 声称第一个分区是不可引导的,并且类型 ID 为 0x83,这将是ext4其他 Linux 文件系统的预期值。

    • 0

相关问题

  • 无法为您的系统找到可用的默认提供程序(VM 无法识别)

  • 为什么有时需要手动导入密钥?

  • 在启动时加载设备

  • 通过静态 IP(NAT?)访问 VM

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve