无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: hilsonma
打印 上一主题 下一主题

[分享] grub2的自动菜单和多功启动(以cfg文件的方式仿造g4d的run/siso)

    [复制链接]
31#
发表于 2020-1-1 16:42:30 | 只看该作者
hilsonma 发表于 2020-1-1 16:00
刚打包的时候发现也可以用7z解开run,里面有wimboot,但同样有一套bootmgr+bcd+sdi

稍后我试一下 ...

用的是wimboot
回复

使用道具 举报

32#
发表于 2020-1-1 16:45:23 | 只看该作者
hilsonma 发表于 2020-1-1 16:00
刚打包的时候发现也可以用7z解开run,里面有wimboot,但同样有一套bootmgr+bcd+sdi

稍后我试一下 ...

wimboot不需要处理路径。
原理与ntboot类似,但不相同。
ntboot是用虚拟盘上的bcd,启动硬盘上的wim
wimboot是用虚拟盘上的bcd,启动虚拟盘上的boot.wim
@:boot.wim:/xxx.wim,虚拟盘上的wim就是boot.wim
@:abcd.wim:/xxx.wim,虚拟盘上就是abcd.wim
grub2里面的vfat命令,可以帮助你理解。

点评

稍后我去了解vfat。 看你的解释,我明白了: wimboot是先将wim复制到虚拟盘,改名为虚拟盘bcd指定的文件名 ntboot是按实际文件名修改虚拟盘的bcd  详情 回复 发表于 2020-1-1 17:11
回复

使用道具 举报

33#
 楼主| 发表于 2020-1-1 17:11:33 | 只看该作者
wintoflash 发表于 2020-1-1 16:45
wimboot不需要处理路径。
原理与ntboot类似,但不相同。
ntboot是用虚拟盘上的bcd,启动硬盘上的wim

稍后我去了解vfat。

看你的解释,我明白了:
wimboot是先将wim复制到虚拟盘,改名为虚拟盘bcd指定的文件名
ntboot是按实际文件名修改虚拟盘的bcd

点评

wimboot是改名为 你 指定的文件名,而不是根据bcd去确定文件名的。  详情 回复 发表于 2020-1-1 17:49
回复

使用道具 举报

34#
发表于 2020-1-1 17:31:58 | 只看该作者
run是用的早期的wimboot,没有注入文件的功能
我一直在论坛上问怎么替换成新的版本。。。。结果没人告诉我
回复

使用道具 举报

35#
发表于 2020-1-1 17:49:59 | 只看该作者
hilsonma 发表于 2020-1-1 17:11
稍后我去了解vfat。

看你的解释,我明白了:

wimboot是改名为 你 指定的文件名,而不是根据bcd去确定文件名的。

点评

那样岂不是wimboot还要根据指定的文件名修改虚拟盘的bcd?  详情 回复 发表于 2020-1-1 18:13
回复

使用道具 举报

36#
 楼主| 发表于 2020-1-1 18:13:25 | 只看该作者
本帖最后由 hilsonma 于 2020-1-1 18:26 编辑
wintoflash 发表于 2020-1-1 17:49
wimboot是改名为 你 指定的文件名,而不是根据bcd去确定文件名的。

那样岂不是wimboot还要根据指定的文件名修改虚拟盘的bcd?那样不是很好吧,我想象中是在虚拟盘放一套启动模板,使用的时候复制实际的wim文件到虚拟盘改名符合模板然后启动。

而ntboot则是在虚拟盘放bootmgr+bcd+sdi, 使用的时候修改虚拟盘的bcd以符合要启动的wim路径然后启动。
不知道我这样的理解是否对。

点评

不修改bcd。文件名不符直接启动失败。 这个是对的。 修改 bcd 并没有你想象的那么容易。目前所有 bcd 编辑器都只是调用 bcdedit。  详情 回复 发表于 2020-1-1 18:33
回复

使用道具 举报

37#
发表于 2020-1-1 18:33:52 | 只看该作者
hilsonma 发表于 2020-1-1 18:13
那样岂不是wimboot还要根据指定的文件名修改虚拟盘的bcd?那样不是很好吧,我想象中是在虚拟盘放一套启动 ...
那样岂不是wimboot还要根据指定的文件名修改虚拟盘的bcd?那样不是很好吧,我想象中是在虚拟盘放一套启动模板,使用的时候复制实际的wim文件到虚拟盘改名符合模板然后启动。

不修改bcd。文件名不符直接启动失败。
而ntboot则是在虚拟盘放bootmgr+bcd+sdi, 使用的时候修改虚拟盘的bcd以符合要启动的wim路径然后启动。
不知道我这样的理解是否对。

这个是对的。

修改 bcd 并没有你想象的那么容易。目前所有 bcd 编辑器都只是调用 bcdedit。

点评

把wim复制到虚拟盘的时候就改名成跟虚拟盘中bcd原先指定的文件名呀,这样不会文件名不符。 自从我学会bcdedit后一直都是使用基于bcdedit脚本修改bcd 现在只发现使用bcdedit建立的bcd启动vhd不成功,而bcdb  详情 回复 发表于 2020-1-1 19:43
回复

使用道具 举报

38#
发表于 2020-1-1 18:57:30 | 只看该作者
本帖最后由 wintoflash 于 2020-1-1 20:04 编辑


试试,utf-8的中文路径应该可以了。

但是,win7以前的有些系统下起的中文名不是utf-8的,这样会造成无法预料的问题,不管了。




点评

想问下wintoflash大神,是不是新版grub2,启动中文iso,不再需要用 strconv --gbk --set=file "(http)/imgs/WePE_64_V2.0中文.iso" 这样子的了?  详情 回复 发表于 2020-1-2 11:57
试了最新发布的grub2,wimboot比原来略快,不过相差不到1秒; ntboot比原来略慢,相差也不到1秒; 同版ntboot比wimboot快,相差2秒左右。 这是在我的电脑上用不同方式启动同一个wim,用手机秒表手工测量的结果,肯  详情 回复 发表于 2020-1-2 10:14
试过了,这个可以成功启动中文文件名的wim镜像。谢谢。  详情 回复 发表于 2020-1-1 19:47
回复

使用道具 举报

39#
 楼主| 发表于 2020-1-1 19:43:24 | 只看该作者
本帖最后由 hilsonma 于 2020-1-1 20:59 编辑
不修改bcd。文件名不符直接启动失败。

把wim复制到虚拟盘的时候就改名成跟虚拟盘中bcd原先指定的文件名呀,这样不会文件名不符。

修改 bcd 并没有你想象的那么容易。目前所有 bcd 编辑器都只是调用 bcdedit。

自从我学会bcdedit后一直都是使用基于bcdedit脚本修改bcd
现在只发现使用bcdedit建立的bcd启动vhd不成功,而bcdboot建立的bcd能成功启动vhd. 这个问题还没有找到答案。其他我使用bcdedit建立的bcd都能成功引导。
就象我用你的vhd模块启动vhd没有成功过,而用ntboot却成功了,目前也没有找到答案。我不知道是不是我操作vhd镜像的问题。

我觉得你把bcd弄复杂了,我不懂分析文件结构,但据网上资料,bcd就是一个注册表文件,可以导入注册表编辑修改的。
有兴趣有时间的话可以看看这个http://www.mistyrebootfiles.alte ... /BCDEdit/index.html

可能wimboot中修改bcd不容易吧,这个我就不了解了。

你可以试试把我这个bcd放进虚拟盘根目录,只要bootmgfw.efi  boot.sdi  boot.wim都同在虚拟盘根目录,就能成功启动。
所以只要把wim文件复制进虚拟盘根目录改名为boot.wim就可以了。
这个bcd是uefi/bios通用的。

bcd.7z

1.16 KB, 下载次数: 28, 下载积分: 无忧币 -2

点评

BCD修改真的不容易,bcdedit很不可靠。不如g4d grub2这样子的文本菜单改起来方便。  详情 回复 发表于 2020-1-2 18:02
所以,你可以用注册表编辑器打开bcd看一下,是不是一脸懵逼。 而且,就算是注册表,也不是那么好解析的。 目前Windows下,也都是要通过 regedit 或者 windows api 查看注册表的。 第三方的解析注册表软件存在,但  详情 回复 发表于 2020-1-1 20:07
回复

使用道具 举报

40#
 楼主| 发表于 2020-1-1 19:47:40 | 只看该作者
本帖最后由 hilsonma 于 2020-1-1 19:55 编辑
wintoflash 发表于 2020-1-1 18:57
试试,utf-8的中文路径应该可以了。

但是,win7以前的有些系统下起的中文名不是utf-8的,这样会造成无 ...

试过了,这个可以成功启动中文文件名的wim镜像。谢谢。
先成功了再说,至于特殊情况,只要不造成实质损坏,可以慢慢改善,也可以置之不理。
好象不点有个观点是这样的:用户迁就软件,软件迁就硬件。当然,是指规范而言。因为要迁就不规范的东西实在是太难太难了。
回复

使用道具 举报

41#
发表于 2020-1-1 19:53:38 | 只看该作者
vhd模块不是用来挂载vhd的吗

点评

是呀,但这个模块我从来没有成功过,可能是我的vhd镜像的问题,搞不懂。 后来用ntboot就成功了。  详情 回复 发表于 2020-1-1 19:56
回复

使用道具 举报

42#
 楼主| 发表于 2020-1-1 19:56:51 | 只看该作者
江南一根葱 发表于 2020-1-1 19:53
vhd模块不是用来挂载vhd的吗

是呀,但这个模块我从来没有成功过,可能是我的vhd镜像的问题,搞不懂。
后来用ntboot就成功了。

点评

这两天大概看了一下 firadisk 的源码,发现它只能识别 BIOS 下的仿真盘。(相关讨论见https://github.com/a1ive/grub/issues/24) 所以 UEFI 下用 map 启动 VHD 最大的问题就是, 没有能用的 Windows 驱动。  详情 回复 发表于 2020-1-9 09:44
貌似记得这模块就是挂载vhd查看文件用的。启vhd目前只有ntboot bios下倒可以用vboot  详情 回复 发表于 2020-1-1 20:04
回复

使用道具 举报

43#
发表于 2020-1-1 20:04:41 | 只看该作者
hilsonma 发表于 2020-1-1 19:56
是呀,但这个模块我从来没有成功过,可能是我的vhd镜像的问题,搞不懂。
后来用ntboot就成功了。

貌似记得这模块就是挂载vhd查看文件用的。efi启vhd目前只有ntboot
bios下倒可以用vboot
回复

使用道具 举报

44#
发表于 2020-1-1 20:07:20 | 只看该作者
本帖最后由 wintoflash 于 2020-1-1 20:14 编辑
hilsonma 发表于 2020-1-1 19:43
把wim复制到虚拟盘的时候就改名成跟虚拟盘中bcd原先指定的文件名呀,这样不会文件名不符。

所以,你可以用注册表编辑器打开bcd看一下,是不是一脸懵逼。
而且,就算是注册表,也不是那么好解析的。
目前Windows下,也都是要通过 regedit 或者 windows api 查看注册表的。
第三方的解析注册表软件存在,但是非常复杂。

目前 wimboot 里面只是有将.efi替换.exe的修改,是暴力实现的。

因为大多数人用的都是 Windows,别说 bootloader/操作系统开发了,就算是 Windows 程序开发,也接触的不多,会把很多东西看作想当然的。
在grub里面,就算是算长整数的除法取余,都可能需要汇编来实现。在C语言学习里面习以为常的 printf 都不存在。在显示屏上输出个小数都费劲。

回复

使用道具 举报

45#
发表于 2020-1-1 22:46:32 来自手机 | 只看该作者
wimiso
回复

使用道具 举报

46#
 楼主| 发表于 2020-1-2 10:14:03 | 只看该作者
本帖最后由 hilsonma 于 2020-1-2 10:26 编辑
wintoflash 发表于 2020-1-1 18:57
试试,utf-8的中文路径应该可以了。

但是,win7以前的有些系统下起的中文名不是utf-8的,这样会造成无 ...

试了最新发布的grub2,wimboot比原来略快,不过相差不到1秒;
ntboot比原来略慢,相差也不到1秒;
同版ntboot比wimboot快,相差2秒左右。
这是在我的电脑上用不同方式启动同一个wim,用手机秒表手工测量的结果,肯定有误差,但快慢对比应该是真实的。

按照你对wimboot和ntboot的描述,我觉得两者在虚拟盘文件参数方面应该是一样的,也就是wimboot没有提供修改虚拟盘文件名的必要,都是可选参数
-e FILE, --efi=FILE 外部efi文件,不指定就使用自带的
-s FILE, --sdi=FILE 外部sdi文件,不指定就使用自带的
虚拟盘文件名是固定的,就没有必要使用外部的bcd,直接自带的bcd
wimboot是启动复制到虚拟盘的wim,命名为虚拟盘固定的wim文件名即可,不需要改bcd
ntboot是启动外部的wim,需要ntboot内部修改虚拟盘的bcd以符合外部wim文件名
wimboot那一套参数@:NAME:FILE 可以简单化了。

sdi建议自带960k那个,bcd建议用我给的8k那个,bootmgr会自动选用winload.exe,bootmgfw.efi会自动选用winload.efi,没有必要在bcd中指定。

点评

1)为了兼容以前的脚本。不能更新了,原来的脚本就不能用了。 2)wimboot 最主要的用途是修改wim,这个你没有用到,所以觉得可以改。我不会设计没用的东西,就连命令中的@,也是有用的,只不过我没有公开。  详情 回复 发表于 2020-1-2 10:47
回复

使用道具 举报

47#
发表于 2020-1-2 10:47:07 | 只看该作者
本帖最后由 wintoflash 于 2020-1-2 10:53 编辑
hilsonma 发表于 2020-1-2 10:14
试了最新发布的grub2,wimboot比原来略快,不过相差不到1秒;
ntboot比原来略慢,相差也不到1秒;
同版nt ...

1)为了兼容以前的脚本。不能更新了,原来的脚本就不能用了。
2)wimboot 最主要的用途是修改wim,这个你没有用到,所以觉得可以改。我不会设计没用的东西,就连命令中的@,也是有用的,只不过我没有公开。
3)要给将来可能出现的改进留空间

点评

明白了,谢谢解答。 刚试了不带efi参数的ntboot,结果是不行的。是不是并没有内置bootmgfw.efi ,如果是没有的话建议usage里标示--efi 为必需参数,而不是可选参数。--sdi 参数同理。  详情 回复 发表于 2020-1-2 10:58
回复

使用道具 举报

48#
 楼主| 发表于 2020-1-2 10:58:17 | 只看该作者
wintoflash 发表于 2020-1-2 10:47
1)为了兼容以前的脚本。不能更新了,原来的脚本就不能用了。
2)wimboot 最主要的用途是修改wim,这个你 ...

明白了,谢谢解答。

刚试了不带efi参数的ntboot,结果是不行的。是不是并没有内置bootmgfw.efi ,如果是没有的话建议usage里标示--efi 为必需参数,而不是可选参数。--sdi 参数同理。

点评

默认加载路径是/efi/microsoft/boot/bootmgfw.efi 不能内置bootmgfw.efi,有版权问题。 这个在我主页grub2手册里面有写的。  详情 回复 发表于 2020-1-2 11:09
回复

使用道具 举报

49#
发表于 2020-1-2 11:09:17 | 只看该作者
本帖最后由 wintoflash 于 2020-1-2 11:10 编辑
hilsonma 发表于 2020-1-2 10:58
明白了,谢谢解答。

刚试了不带efi参数的ntboot,结果是不行的。是不是并没有内置bootmgfw.efi ,如果 ...

默认加载路径是/efi/microsoft/boot/bootmgfw.efi
不能内置bootmgfw.efi,有版权问题。
这个在我主页grub2手册里面有写的。https://a1ive.github.io/grub2_zh.html

点评

谢谢。是我发贴发糊涂了,原本知道是有默认外部路径的。脑子里直想着虚拟盘事情就试,试了就发贴,一下子就忘了。 中文手册越来越丰富,祝贺并感谢!  详情 回复 发表于 2020-1-2 11:34
回复

使用道具 举报

50#
 楼主| 发表于 2020-1-2 11:34:02 | 只看该作者
本帖最后由 hilsonma 于 2020-1-2 11:55 编辑
wintoflash 发表于 2020-1-2 11:09
默认加载路径是/efi/microsoft/boot/bootmgfw.efi
不能内置bootmgfw.efi,有版权问题。
这个在我主页gr ...

谢谢。是我发贴发糊涂了,原本知道是有默认外部路径的。脑子里直想着虚拟盘事情就试,试了就发贴,一下子就忘了。

中文手册越来越丰富,祝贺并感谢!
回复

使用道具 举报

51#
发表于 2020-1-2 11:57:37 | 只看该作者
wintoflash 发表于 2020-1-1 18:57
试试,utf-8的中文路径应该可以了。

但是,win7以前的有些系统下起的中文名不是utf-8的,这样会造成无 ...

想问下wintoflash大神,是不是新版grub2,启动中文iso,不再需要用
strconv --gbk --set=file "(http)/imgs/WePE_64_V2.0中文.iso"
这样子的了?

点评

这个跟网启的没有关系。 网启的是软件内部编码的问题,必须转。  详情 回复 发表于 2020-1-2 13:04
我刚试了,直接 map /imgs/WePE_64_V2.0中文.iso 这样的中文iso是可以启动的,网启我现在没有条件没有试,你一试便知。  详情 回复 发表于 2020-1-2 12:36
回复

使用道具 举报

52#
 楼主| 发表于 2020-1-2 12:36:41 | 只看该作者
liuzhaoyzz 发表于 2020-1-2 11:57
想问下wintoflash大神,是不是新版grub2,启动中文iso,不再需要用
strconv --gbk --set=file "(http)/i ...

我刚试了,直接
map /imgs/WePE_64_V2.0中文.iso
这样的中文iso是可以启动的,网启我现在没有条件没有试,你一试便知。
回复

使用道具 举报

53#
发表于 2020-1-2 13:04:30 | 只看该作者
liuzhaoyzz 发表于 2020-1-2 11:57
想问下wintoflash大神,是不是新版grub2,启动中文iso,不再需要用
strconv --gbk --set=file "(http)/i ...

这个跟网启的没有关系。
网启的是软件内部编码的问题,必须转。
回复

使用道具 举报

54#
发表于 2020-1-2 17:58:58 来自手机 | 只看该作者
本帖最后由 liuzhaoyzz 于 2020-1-3 07:54 编辑
hilsonma 发表于 2019-12-31 18:44
刚才试了一下g4d的run,是可以启动中文文件名的pe镜像的,只是中文的地方显示变成了编码

        g4d的run显示中文没问题的,要加载正确的字体,菜单要用utf-8有无BOM都可以,似乎还需要vbe模式,run --loadfont有个命令就是加载中文字体,加载之后不存在你说的无法正常显示的问题。      

点评

知道了。不过我现在倾向于用siso,直接使用无障碍。欣赏run的地方就是体积比siso小得不得了。记得你有个想法就是它们太久没更新了,担心跟最新g4d搭配问题。而我现在依然在用,当然也比较少了,重心在uefi.  发表于 2020-1-2 18:16
回复

使用道具 举报

55#
发表于 2020-1-2 18:02:03 来自手机 | 只看该作者
hilsonma 发表于 2020-1-1 19:43
把wim复制到虚拟盘的时候就改名成跟虚拟盘中bcd原先指定的文件名呀,这样不会文件名不符。



        BCD修改真的不容易,bcdedit很不可靠。不如g4d grub2这样子的文本菜单改起来方便。      

点评

那是肯定的,哪家跟哪家哪。现在我是直接用bcdedit建一个新的用,目前没有什么问题,就是解决不了vhd启动。而在编程来说,要在进程当中实现修改又是另一种情形了,尤其wintoflash说的情形我原来是不了解的。  发表于 2020-1-2 18:26
回复

使用道具 举报

56#
发表于 2020-1-9 09:44:18 | 只看该作者
hilsonma 发表于 2020-1-1 19:56
是呀,但这个模块我从来没有成功过,可能是我的vhd镜像的问题,搞不懂。
后来用ntboot就成功了。

这两天大概看了一下 firadisk 的源码,发现它只能识别 BIOS 下的仿真盘。(相关讨论见https://github.com/a1ive/grub/issues/24)
所以 UEFI 下用 map 启动 VHD 最大的问题就是, 没有能用的 Windows 驱动。


点评

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=411365 不知这个是否有可以借鉴的地方  详情 回复 发表于 2020-1-9 12:42
回复

使用道具 举报

57#
发表于 2020-1-9 12:42:55 | 只看该作者
wintoflash 发表于 2020-1-9 09:44
这两天大概看了一下 firadisk 的源码,发现它只能识别 BIOS 下的仿真盘。(相关讨论见https://github.com/ ...

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=411365
不知这个是否有可以借鉴的地方

点评

看源码,SvBus的原理也差不多。获取 GRUB4DOS map 出来的盘靠的是 int13h 相关的东西。 这种东西在 UEFI 下根本不存在。至于能不能模拟出来那就不好说了。如果能模拟出来的话,UEFI下都能模拟 BIOS 了。  详情 回复 发表于 2020-1-9 13:35
回复

使用道具 举报

58#
发表于 2020-1-9 13:35:27 | 只看该作者
pky317 发表于 2020-1-9 12:42
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=411365
不知这个是否有可以借鉴的地方

看源码,SvBus的原理也差不多。获取 GRUB4DOS map 出来的盘靠的是 int13h 相关的东西。
这种东西在 UEFI 下根本不存在。至于能不能模拟出来那就不好说了。如果能模拟出来的话,UEFI下都能模拟 BIOS 了。
回复

使用道具 举报

59#
发表于 2020-1-13 15:58:47 | 只看该作者
反馈一个小问题 dir时,分区根目录出现很多个带有$符号的文件,楼主能不屏蔽掉呢。

捕获.PNG (142.39 KB, 下载次数: 211)

捕获.PNG

捕获2.PNG (43.42 KB, 下载次数: 214)

捕获2.PNG

捕获3.PNG (16.36 KB, 下载次数: 181)

捕获3.PNG

点评

现在设定的是显示所有文件,所以这类隐藏文件也显示的 要屏蔽$开头的文件需要添加筛选功能 你可以使用notepad2修改rundir.cfg 在第12行 if test -d "$obj"; then 的前面加上这一句: if regexp '^\$.*' "$name";  详情 回复 发表于 2020-1-13 16:53
回复

使用道具 举报

60#
 楼主| 发表于 2020-1-13 16:53:19 | 只看该作者
本帖最后由 hilsonma 于 2020-1-13 17:02 编辑
wangziqiang 发表于 2020-1-13 15:58
反馈一个小问题 dir时,分区根目录出现很多个带有$符号的文件,楼主能不屏蔽掉呢。

现在设定的是显示所有文件,所以这类隐藏文件也显示的
要屏蔽$开头的文件需要添加筛选功能
你可以使用notepad2修改rundir.cfg
在第12行 if test -d "$obj"; then 的前面插入一行,放上这一句:
if regexp '^\$.*' "$name";then continue;fi
这样跳过$开头的文件就可以了。

不过你现在使用的是wintoflash的run.efi,你需要修改他的源码然后重新编译,或者到他的贴子反映,看他是否为你修改。

点评

已解决,但是还有一个system文件,估计是分区中的System Volume Information文件夹,但不知怎么屏蔽。再有就是返回上一层时,总是回到根目录,还望再次指导  详情 回复 发表于 2020-1-13 17:38
好的 谢谢指导,我试一下,另外能不能把 仿真和slic也加进去呢  详情 回复 发表于 2020-1-13 17:08
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-4-20 05:06

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表