Closed sky5454 closed 7 years ago
还有,目前网上那些PE工具生成的ISO文件普遍是多合一PE,里面的引导文件很容易找到。 不过我不清楚如何loopback这些多合一PE的ISO文件,希望你能提供一个示例,谢谢。
目前本项目使用4种方法启动ISO
大部分Linux LiveCD并不是使用GRUB2引导的,而是使用各自维护的ISOLINUX,不同版本的语法差别很大。 使用GRUB2的发行版也并不总是按照标准行事,例如Manjaro和Kali Linux,它们提供的loopback.cfg里面的启动参数是错误的。而自身的GRUB2菜单写得非常复杂,基本上无法解析。
还有,目前网上那些PE工具生成的ISO文件普遍是多合一PE,里面的引导文件很容易找到。 不过我不清楚如何loopback这些多合一PE的ISO文件,希望你能提供一个示例,谢谢。
WindowsPE无法loopback启动。只能磁盘仿真或者用NTBOOT(wimboot)。后者有违GPL协议。
多合一PE的iso不是直接启动winpe的,而是通过grub/grub2启动。
在实机中,首先是进入grub菜单,然后由用户选择进入某一个winpe,菜单例子如下:
timeout 15
default 2
gfxmenu /BOOT/GRUB/MESSAGE
graphicsmode -1 600:800
font /BOOT/GRUB/MENU.HEX
title [1] 启动 Windows 2003 PE (旧机型)
find --set-root /WXPE/SETUPLDR.BIN
chainloader /WXPE/SETUPLDR.BIN
title [2] 启动 Windows 10 PE x64 (新机型)
find --set-root /BOOT/10PEX64
chainloader /BOOT/10PEX64
title [3] 启动 硬盘上的操作系统
find --set-root --ignore-floppies --ignore-cd /ntldr || find --set-root --ignore-floppies --ignore-cd /bootmgr
map () (hd0)
map (hd0) ()
map --rehook
find --set-root --ignore-floppies --ignore-cd /ntldr || find --set-root --ignore-floppies --ignore-cd /bootmgr
chainloader /ntldr || chainloader /bootmgr
title [4] 运行 DiskGenius 硬盘分区工具
terminal console
pause --wait=2 Loading DiskGenius tool ...
map --mem /BOOT/IMGS/DG.IMG (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)
title [5] 运行 Ghost 备份恢复工具
configfile /BOOT/GRUB/GHOST.LST
title [6] 运行 MaxDos 工具箱
terminal console
pause --wait=2 Loading DOS tool ...
map --mem /BOOT/IMGS/DOS.IMG (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)
title [7] 运行 其他工具
configfile /BOOT/GRUB/TOOL.LST
title [8] 关闭 计算机
halt
多合一PE的iso不是直接启动winpe的,而是通过grub/grub2启动。 在实机中,首先是进入grub菜单,然后由用户选择进入某一个winpe,菜单例子如下: timeout 15 default 2 gfxmenu /BOOT/GRUB/MESSAGE graphicsmode -1 600:800 font /BOOT/GRUB/MENU.HEX title [1] 启动 Windows 2003 PE (旧机型) find --set-root /WXPE/SETUPLDR.BIN chainloader /WXPE/SETUPLDR.BIN title [2] 启动 Windows 10 PE x64 (新机型) find --set-root /BOOT/10PEX64 chainloader /BOOT/10PEX64 title [3] 启动 硬盘上的操作系统 find --set-root --ignore-floppies --ignore-cd /ntldr || find --set-root --ignore-floppies --ignore-cd /bootmgr map () (hd0) map (hd0) () map --rehook find --set-root --ignore-floppies --ignore-cd /ntldr || find --set-root --ignore-floppies --ignore-cd /bootmgr chainloader /ntldr || chainloader /bootmgr title [4] 运行 DiskGenius 硬盘分区工具 terminal console pause --wait=2 Loading DiskGenius tool ... map --mem /BOOT/IMGS/DG.IMG (fd0) map --hook chainloader (fd0)+1 rootnoverify (fd0) title [5] 运行 Ghost 备份恢复工具 configfile /BOOT/GRUB/GHOST.LST title [6] 运行 MaxDos 工具箱 terminal console pause --wait=2 Loading DOS tool ... map --mem /BOOT/IMGS/DOS.IMG (fd0) map --hook chainloader (fd0)+1 rootnoverify (fd0) title [7] 运行 其他工具 configfile /BOOT/GRUB/TOOL.LST title [8] 关闭 计算机 halt
你给的菜单是grub4dos的。注意,grub4dos的功能并不是grub/grub2的子集。应该通过"磁盘仿真"启动。
menuentry "xxxPE.iso" {
linux /memdisk iso raw
initrd /xxxx/xxxPE.iso
}
嗯,谢谢。没有其他疑问了。希望多加推广,这个程序非常好,但目前知名度还是很低的。
请问该把grubfm.iso放到哪里?
grubfm.iso是给legacy-bios/uefi-csm的机器用的。纯uefi的机器应该使用grubfmx64.efi或grubfmia32.efi,分别对应64位/32位uefi固件。 如果作为默认引导器使用,应该重命名为bootx64.efi/bootia32.efi (64/32位固件), 放到esp分区的/efi/boot/目录下 。如果默认引导器是grub之类的, 名称、路径随意, 参照README文件。
建议把这个程序当作成默认选择器来做
直接用一般的grub就行了.
如把外置菜单做在左上角,用数字图片表示。如把图片1 图片2把中间数字切下来,使用按1~0快捷键启动外置菜单的1到10系统,按b键查看1~10代表的系统
对于特定的某个菜单是可行的,不具备通用性。而且我没太明白你的意思。
能否让这个程序实现模拟UEFI启动?
我不太熟悉duet, 而且目前我的电脑是纯uefi的,没办法测试.如果你实现了这个功能,欢迎提交PR.
增加书签功能 让用户可以把某个ISO的启动菜单保存并加到书签里
目前grub2不具备向磁盘写入文件的功能, 因此无法实现.
1,我的意思是③和①是搭配使用的 2,能否通过外部程序写入文件?
能否通过外部程序写入文件?
当然是可以的。比较复杂,为了这么一个功能花费太大力气不值得。
我的意思是③和①是搭配使用的 建议把这个程序当成默认系统选择器来做
程序应该只关注一个目标,并尽可能把它做好。 默认的系统选择器,用一般的GRUB2就足够了。
这个程序还是不够好,不如增加 “以此文件作为grub2菜单 loop启动” 的选项,因为目前很多发行版里刻录后是以grub2菜单选择启动的。 所以不如直接以菜单文件为基础,增加loop启动项。
一般来说,只要以菜单文件为基础,然后每个菜单项里都加上loop功能,再加载内核和文件映像路径前加(loop),然后指定ISO文件所在路径就可以正常启动了。
测试了一下,你的这个程序无法启动debian的net安装和DVD两个版本。
debian netinst / debian installation dvd 均不支持loop启动. 只有debian live cd支持loop启动.
为什么不能在这个程序里加上loop功能呢?
是镜像本身不支持。无法在不修改镜像的情况下整体启动ISO。
不能在外部加loop模块吗?
那还是加个文件读写模块吧,这样就可以把镜像里的必须文件复制出来,就不用loop了。
无法交流。 你需要了解一下Linux的启动流程。
建议增加自定义规则生成启动菜单的功能: 很多Linux发行版的iso文件里都有一个grub/grub2菜单配置文件,
目前各发行版最新版本的菜单路径: Debian的是
\BOOT\GRUB\GRUB.CFG
Arch的是\LOADER\ENTRIES\ARCHISO_X86_64.CONF
Deepin的是\BOOT\GRUB\GRUB.CFG
只要找到这个文件,就可根据该文件修改出适合【grub2引导ISO的菜单】 而这个文件的放置也是有规律,一般置于EFI BOOT GRUB LOADER等任一目录内, 人工来找肯定是找得到的,所以我觉得你可以写一个自动化搜索+读取规则的程序,然后让大家一起提交规则
找到后利用程序修改即可。
PS最好能增加挂载iso后,可打开文本的功能,这样便于人工操作
附上修改例子:
只要使用改动主要部分就可以作为【grub2引导ISO启动】的菜单:
① 如Arch里的grub2菜单( "H:\LOADER\ENTRIES\ARCHISO_X86_64.CONF")主要代码:
title Arch Linux archiso x86_64 UEFI USB
linux /arch/boot/x86_64/vmlinuz
initrd /arch/boot/intel_ucode.img
initrd /arch/boot/x86_64/archiso.img
options archisobasedir=arch archisolabel=ARCH_201706
② 按如下改动后可直接用于【grub2引导ISO启动】
menuentry "[9]Arch Linux archiso x86_64 UEFI USB" --hotkey="9" {
set isofile="/0LIVE/Arch/archlinux-2017.06.01-x86_64.iso"
search --set -f $isofile
loopback loop $isofile
linux (loop)/arch/boot/x86_64/vmlinuz archisobasedir=arch archisolabel=ARCH_201706 img_dev=/dev/disk/by-name/Win10 img_loop=$isofile earlymodules=loop
initrd (loop)/arch/boot/intel_ucode.img
initrd (loop)/arch/boot/x86_64/archiso.img
}
本例子: ISO文件:"C:\0LIVE\Arch\archlinux-2017.06.01-x86_64.iso" C盘卷标:Win10 ISO挂载后卷标为:ARCH_201706
主要是在菜单里添加了 loopback功能、指定iso文件所在位置(所在分区+路径)
希望该程序越做越好。