首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将iso设为“可引导(dos/MBR扇区)”

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

Unix & Linux用户
提问于 2022-07-05 12:38:52
回答 2查看 1.2K关注 0票数 0

我提取了iso文件"archlinux-2022.06.01-x86_64.iso“。我在"airootfs.sfs“文件中做了修改

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

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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文件的输出。

我试图在虚拟机中使用我的iso文件"Efi选项被禁用“,但是我得到了这些错误。

我是个初学者,对此不太了解

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

代码语言:javascript
运行
复制
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映像文件并使用它。

谢谢你的帮助

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2022-07-06 08:26:02

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

无论如何,ISOLINUX的失败不应归咎于这种短线。我想这是因为缺少了-b的修改选项。

您可以向xorriso请求有关引导相关选项的建议,以重放可引导的ISO (如果ISO是由xorriso创建的,则效果最好)。为了正确分析Archlinux ISO,您需要xorriso-1.5.4或更高版本,因为旧版本不需要使用引导选项的组合。

代码语言:javascript
运行
复制
$ 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

并不是所有的都必须给出,因为有些是独立于国际标准化组织的(-V 'ARCH_202206‘--修改日期=’2022060115352200‘)。其中一些并不是真正需要的,因为xorriso可以自己计算出(-partition_cyl_align all -partition_hd_cyl 64 -partition_sec_hd 32引导大小为0)。

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

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

但是还有更多的问题:

  • 缺少
  • 缺少-e修改选项-等混合- GPT -basdat,因此没有通过从USB棒的精心设计的EFI实现来引导GPT。
  • 丢失-等混合-mbr,因此没有启动通过BIOS从USB棒。相反,有一个剩余的-G和一个模糊的MBR图像mbr_code.img (您从哪里得到这个?)
  • 模糊的输入文件./compile/bios_boot.img将映射到ISO的根。

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

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

代码语言:javascript
运行
复制
xorriso -indev archlinux-2022.06.01-x86_64.iso \
        -outdev archlinux.iso \
        ... xorriso manipulation commands like -map or -rm ... \
        -boot_image any replay

(xorriso问题和支持请求最好提交到bug-xorriso@gnu.org )。

祝你今天愉快:)

托马斯

票数 1
EN

Unix & Linux用户

发布于 2022-07-06 07:44:43

archlinux-2022.06.01-x86_64.iso可以通过四种不同的方式引导:

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

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

创建这样一个庞然大物是很复杂的,Arch为这项工作提供了一个专用工具archiso --我想这是一个很好的理由。我建议你也许应该尝试使用它,而不是试图重新发明轮子。的源代码archiso在Gitlab中可用,如果您发现需要自定义它。

如果我正确地解释了xorriso报告,那么您的ISO映像只能通过两种方式来引导:

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

而且,在您的映像中,引导记录状态显示为cyl-align-off而不是isohybrid cyl-align-all,这意味着ISO映像的各个组件可能没有正确地对齐。

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

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/708672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档