我发现了一个项目GitHub模拟一个视窗XP操作系统,我有一个问题异。
我想提取它,更改内容并重新创建 iso。
问题是它没有提取引导装载程序,所以当我用库姆,它不会启动系统。
所以,我想到可以使用 来提取引导加载程序dd
,但这似乎是不可能的。
isoinfo -d -i /mnt/sda2/windows/vxp/VirtualXP.iso
Setting input-charset to 'UTF-8' from locale.
CD-ROM is in ISO 9660 format
System id:
Volume id: VirtualXP
Volume set id: 20210310_1500
Publisher id: MagicISO v5.2 COPYRIGHT (C) 2001-2006 MagicISO, Inc.
Data preparer id: MagicISO v5.2 COPYRIGHT (C) 2001-2006 MagicISO, Inc.
Application id:
Copyright File id:
Abstract File id:
Bibliographic File id:
Volume set size is: 0
Volume set sequence number is: 1
Logical block size is: 2048
Volume size is: 22250
El Torito VD version 1 found, boot catalog is in sector 22248
Joliet with UCS level 3 found.
No SUSP/Rock Ridge present
Eltorito validation header:
Hid 1
Arch 0 (x86)
ID 'MagicISO Boot Record'
Cksum 16 E7 OK
Key 55 AA
Eltorito defaultboot header:
Bootid 88 (bootable)
Boot media 0 (No Emulation Boot)
Load segment 0
Sys type 6
Nsect 4
Bootoff 56E9 22249
当我再次创建它时,它看起来像这样,但它不在模拟器中工作:
isoinfo -d -i /mnt/sda2/windows/vxp/vxp0.iso
Setting input-charset to 'UTF-8' from locale.
CD-ROM is in ISO 9660 format
System id: LINUX
Volume id: VXP0
Volume set id:
Publisher id:
Data preparer id:
Application id: MKISOFS ISO9660/HFS/UDF FILESYSTEM BUILDER & CDRECORD CD/DVD/BluRay CREATOR (C) 1993 E.YOUNGDALE (C) 1997 J.PEARSON/J.SCHILLING
Copyright File id:
Abstract File id:
Bibliographic File id:
Volume set size is: 1
Volume set sequence number is: 1
Logical block size is: 2048
Volume size is: 22935
El Torito VD version 1 found, boot catalog is in sector 79
CD-ROM uses ISO 9660:1999 relaxed format
Joliet with UCS level 3 found.
SUSP signatures version 1 found
Rock Ridge signatures version 1 found
Rock Ridge id 'RRIP_1991A'
Eltorito validation header:
Hid 1
Arch 0 (x86)
ID ''
Cksum AA 55 OK
Key 55 AA
Eltorito defaultboot header:
Bootid 88 (bootable)
Boot media 0 (No Emulation Boot)
Load segment 0
Sys type 0
Nsect 4
Bootoff 50 80
我尝试使用扇区号22249
,但没有成功:
dd if="$1" of=bootloader.bin bs=1024 skip=$sector count=1024
我将引导加载程序的名称更改为grldr
(我想通过这样做我只是更改名称),当前生成 iso 的命令,我使用以下命令:
mkisofs -V VXP0 -J -joliet-long -iso-level 4 -D -R -o vxp0.iso -b grldr -c boot/boot.catalog -no-emul-boot -boot-load-size 4 -boot-info-table vxp0
答案1
您可以通过以下方式从 ISO 文件中提取引导加载程序geteltorito
包括在genisoimage
:
geteltorito -o bootloader VirtualXP.iso
在联机帮助页描述中:
geteltorito is a Perl script which extracts the initial/default El Torito boot image from
a CD if one exists. It will not extract any of other boot images that are allowed by the
El Torito standard.
答案2
我将其作为答案而不是评论发布,以防它为我赢得奖金,但我用谷歌搜索“Extract El Torito”并最终得到:
如果您不知道 RUFUS 是什么,请参阅:Rufus - 以简单的方式创建可启动 USB 驱动器。显然,问题 63 是一个现已关闭的功能请求,涉及您要解决的问题。大约一半的请求是这样的:
RUFUS 常见问题解答部分 - 我正在尝试使用 ISO,但 Rufus 说它不受支持。
我相信,如果您执行其中概述的步骤,您最终会得到您想要的结果。
步骤总结
- 在Rufus中创建一个基于FreeDOS的USB。
- 挂载您创建的 ISO 文件并查找包含 DOS 引导文件的虚拟磁盘映像
- 将这些文件解压回根目录。
.bat
如果需要,修改任何文件。- 修改后,
dd the entire mounted image back to a USB
El Torito 靴子标准
查看 Phoenix 的 BIOS 制造商在 El Torito 上发布的标准,特别是第 14 页,了解实际发生的情况。引用ISO破坏者:
将可启动软盘映像复制到 CD 或 DVD 上然后希望该介质现在可启动是不可能的。文件系统确实需要知道并需要提供特殊的结构和卷描述符(根据 El Torito 标准)。
答案3
dd if="$1" of=bootloader.bin bs=1024 skip=$sector count=1024
您使用了错误的块大小。 CD-ROM 在 2048 字节块上运行,但由于某种原因,El Torito 标头中的引导代码大小指定为 512 字节块。 4 x 512 字节 = 2048,即 1 个 CD-ROM 块。结果isoinfo
表明引导块似乎是映像中的最后一个块。
所以:
dd if=VirtualXP.iso of=bootloader.bin bs=2048 skip=22249 count=1
或者也许只是
tail -c 2048 VirtualXP.iso > bootloader.bin
希望引导加载程序中没有需要更改的二进制偏移量以匹配您的新 ISO 结构。