无忧启动论坛

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

[原创] GRUB2 UEFI 下的磁盘仿真

    [复制链接]
151#
 楼主| 发表于 2020-12-10 18:33:48 | 显示全部楼层
liuzhaoyzz 发表于 2020-12-10 17:11
不是这样子的。
以我的笔记本为例,必须要一个FAT32分区用作UEFI启动才能添加UEFI序列,然后VHD之外有一 ...
以我的笔记本为例,必须要一个FAT32分区用作UEFI启动才能添加UEFI序列,然后VHD之外有一个FAT32分区,VHD里面只需要一个MBR格式的NTFS分区即可。最主要的是主板→第一引导bootmgfw.efi要能够被识别,识别之后,VHD里面是否有FAT32分区完全不影响启动,本人亲测。


这和我说的 "NTBOOT" 方式一样。

你还是没有理解 map 到底做了什么。map 是创建了一整个虚拟的硬盘 (或光盘、软盘),并且模仿固件的启动方法,启动这个硬盘。
至于硬盘里面具体是什么系统,那不重要。你说要不要 bootx64.efi?

看起来你喜欢百度盘?

我买了百度云的 SVIP(用来下片)。

分享个更小的442MB WIN8.1.ESD,飞天舞做的,当时也是我们为了测试UEFI-RAMOS制作的,C盘安装之后只有1.9GB!

谢谢分享,挺不错的。适合用来做测试。

点评

VHD内部我调整为激活的FAT32+NTFS双分区,用g4e+ svbus成功启动了WIN7_RAMOS,但是总grub2加载就出错,命令行截图。1210版本的grub2  详情 回复 发表于 2020-12-11 16:56
我说的不是map啊,我说的是map --mem --rt xxx.vhd啊。一样的吗? vhd里面肯定是有bootx64.efi的。  详情 回复 发表于 2020-12-10 18:46
回复

使用道具 举报

152#
 楼主| 发表于 2020-12-10 18:53:19 | 显示全部楼层
liuzhaoyzz 发表于 2020-12-10 18:46
我说的不是map啊,我说的是map --mem --rt xxx.vhd啊。一样的吗?
vhd里面肯定是有bootx64.efi的。

都一样。只不过加上--mem,先把vhd读到内存。
回复

使用道具 举报

153#
 楼主| 发表于 2020-12-10 19:03:59 | 显示全部楼层
wuwuzz 发表于 2020-12-10 18:33
对grub2、G4E, 同步测试svbus。
结果迷乱(遇到兼容性问题,可能涉及到UEFI版本、U盘固件、SVBUS、grub*多 ...

安装了656#朱玛SVBUS后,形成新的测试版VHD,该测试版VHD在grub2下,用run.efi、NTBOOT,
随机出现进入失败,表现为长时间转圈、然后重启。

run.efi是很久以前弄的,出现问题应该和grub2没什么关系。应该是 SVBus 不太靠谱。

问题3:
3267主控64G盘、3268主控32G盘在AMI UEFI V2017下,G4E\grub2均可以成功进入VHD win10桌面。
在AMI UEFI V2016下不能成功进入,表现为win长时间转圈,然后重启。(G4E雷同,不再单调截图)

看到你的屏幕最上方有 "error: symbol `grub_getline` not found"。你是不是加载了老版本grub2的模块。这样做不行。

问题4:
3267主控64G盘在AMI UEFI V2017下,G4E\grub2均可以成功进入VHD win10桌面。
3267主控32G盘在AMI UEFI V2017下,G4E\grub2均不能成功进入VHD win10桌面,
表现为win转圈一段时间后,U盘灯指示已不读盘,而win一直持续长时间转圈。

你不加载到内存也能启动VHD? 我这边不行,会蓝屏。

问题5:
曾经成功的U盘、UEFI环境,g4e/grub2随机出现不能进入桌面(win一直转圈,重启)。
而一旦g4e引导能够成功进入桌面,则再次使用grub2引导也一定能成功进入。

你有没有用grub4dos启动grub2再进行map,或者在grub2下map之后再启动另一个grub2/grub4dos进行map?
因为svbus搜索的内存位置是写死的(0x9f000),这么搞会造成干扰。
如果你只是想启动一个winpe iso/img,那么在 grub2 下可以加上 '--no_g4d' ('-g') 参数,这样不向 0x9f000 写东西,避免干扰。
比如:map -f -g /xxx.iso

点评

“你不加载到内存也能启动VHD? 我这边不行,会蓝屏。” 我这里复现了这个故障。 又新买了1个128G的3267盘,AMI UEFI V2017下,4G内存机环境。 G4E/Grub2可以成功map(不带mem参数)、启动我的25G 测试版fixwtg.  详情 回复 发表于 2020-12-12 08:31
1.是的,原来启动VHD没什么问题,引入SVbus后,故障率增加了。 2.是的。grub2菜单项中,设置了read暂停,用于查看执行步骤。 而新版grub2没把read模块包进去。为了节省时间,我直接引用 楼层中发的bootx64.efi  详情 回复 发表于 2020-12-10 20:59
回复

使用道具 举报

154#
 楼主| 发表于 2020-12-11 10:37:16 | 显示全部楼层
wuwuzz 发表于 2020-12-10 20:59
1.是的,原来启动VHD没什么问题,引入SVbus后,故障率增加了。

2.是的。grub2菜单项中,设置了read暂 ...

4.没有。g4e、grub2都是分别重新启动,没有交叉。
我的意思是说:

在我的测试环境里,如果一开始用grub2启动VHD不成功,
那么就重启,试着换用g4e去启动,如果g4e启动成功了,
此时再重启,用grub2引导启动VHD,一般都可以成功。

同时,这也意味着,如果g4e未能启动VHD成功,那么
grub2不能成功启动VHD的问题,就只能一直挂着。
像是连环套。


我不太确定,我这个VHD是否与机器环境密切关联,
换一台机器的话,VHD启动时会重新出现“正在准备设备”
进度提示。

感觉这个也可能和 SVBus 驱动有关。
回复

使用道具 举报

155#
 楼主| 发表于 2020-12-11 17:10:30 | 显示全部楼层
liuzhaoyzz 发表于 2020-12-11 16:56
VHD内部我调整为激活的FAT32+NTFS双分区,用g4e+ svbus成功启动了WIN7_RAMOS,但是总grub2加载就出错,命 ...

你是不是用grub4dos启动的grub2,或者用一个grub2 map之后又启动了另一个grub2?

点评

没有啊,启动的时候按F12键,直接从grub2引导的,g4e和grub2互不干扰。  详情 回复 发表于 2020-12-11 17:13
回复

使用道具 举报

156#
 楼主| 发表于 2020-12-11 17:21:06 | 显示全部楼层
本帖最后由 wintoflash 于 2020-12-11 17:22 编辑
liuzhaoyzz 发表于 2020-12-11 17:13
没有啊,启动的时候按F12键,直接从grub2引导的,g4e和grub2互不干扰。

那为啥进grub2之后,内存0x9f000附近被占用了?
肯定有什么东西搞鬼了。
你先关机,再开机进grub2,手动敲命令 map 一个vhd,截图。
再关机,开机进grub2,手动敲命令 map 另一个 vhd,截图。
我就不信了,这还有什么区别?
主要关注这个的地址:

点评

SX70211.vhd 另外一个200MB的固定大小的test.vhd也失败,直接上图,一张图分成左中右三部分拍照,拍电脑屏幕感觉有黑影,怎么把字体搞成带颜色的,前景色字体,我都是照抄。  详情 回复 发表于 2020-12-12 16:43
内存0x9f000附近被占用了?你从哪里知道的?我没看到截图里面有0x9f000关键字啊? 485楼VHD是NTFS单分区,http://wuyou.net/forum.php?mod=redirect&goto=findpost&ptid=417233&pid=4192339&fromuid=298214 49  详情 回复 发表于 2020-12-12 14:06
那台电脑是在办公室,现在没法测试了,我回家了。我估计是哪个vhd损坏了,中间死机了好多次。 好消息! grub2+svbus+win8.1RAMOS启动成功!  详情 回复 发表于 2020-12-11 18:12
回复

使用道具 举报

157#
 楼主| 发表于 2020-12-12 19:00:00 | 显示全部楼层
本帖最后由 wintoflash 于 2020-12-12 20:21 编辑
liuzhaoyzz 发表于 2020-12-12 16:43
SX70211.vhd直接死机了。这个VHD,用G4E map --mem --top启动正常。

grubx64.efi.tar.gz (678.81 KB, 下载次数: 6)
还有 @wuwuzz  试试这个。
按 左Ctrl+左Alt+F12 可截图,截图保存在某 FAT分区里面。

不要加载任何其他的模块。

点评

好消息,用你在499楼分享的grubx64.efi.tar.gz,成功搞定了grub2+svbus+WIN7X64-UEFI-RAMOS! 1、在499楼,你只 @wuwuzz 试试这个,并没有有@我,我都不知道要用这个来测试,差点错过了! 2、感觉grub2读盘速度  详情 回复 发表于 2020-12-13 11:48
一、1212版测试结果如下: svbusPE.img 无论加不加mem参数map,都可成功并进入桌面 fixwtg.vhd 我的装有svbus的25G VHD,不加mem参数,可成功map并进入桌面 ramos.vhd 与之前结果相同,G4E可成功map并进入  详情 回复 发表于 2020-12-12 22:34
回复

使用道具 举报

158#
 楼主| 发表于 2020-12-13 10:09:15 | 显示全部楼层
wuwuzz 发表于 2020-12-12 22:34
一、1212版测试结果如下:
svbusPE.img  无论加不加mem参数map,都可成功并进入桌面
fixwtg.vhd   我的 ...



这里写的是 0x9d000,你在执行 "boot" 之前,执行 "hexdump (mem) -s 0x9d000" 查看一下内存。
还有,你说 grub4dos 可以不加载到内存正常启动,那先在 g4d 下 map,然后 chainloader grub2,在grub2 下查看内存:
hexdump (mem) -s 0x9f000
hexdump (mem) -s 0x9d000

点评

以前图示中用的是楼层里的grub2,该grub2没有包含hexdump。 因此,又从github下载了grub2,把hexdump包含进去,使用该grub2 map, write grub4dos drive map slot地址变为0x57000,相关截图如下: [attachimg]4  详情 回复 发表于 2020-12-13 11:52
回复

使用道具 举报

159#
 楼主| 发表于 2020-12-13 10:11:03 | 显示全部楼层
liuzhaoyzz 发表于 2020-12-12 22:07
另外想请问下,grub2是否支持vdf镜像直接map?比如map xxx.vdf (hd0)这样子,我忘了以前的帖子了。

发我一个小点的 vdf ,我看看。
vdf有没有像 vhd 那样,分为 "固定大小" 和 "动态" 的?

点评

链接: https://pan.baidu.com/s/1m0RF_WFGJgQ1-dDgTVTh-g 提取码: uwvc 正在上传 vdf是primo驱动生成的,diskgenius也能够打开吧,有没有"固定大小" 和 "动态"之分,我还真不知道。  详情 回复 发表于 2020-12-13 10:24
回复

使用道具 举报

160#
 楼主| 发表于 2020-12-13 17:20:17 | 显示全部楼层
本帖最后由 wintoflash 于 2020-12-13 17:22 编辑
wuwuzz 发表于 2020-12-13 11:52
以前图示中用的是楼层里的grub2,该grub2没有包含hexdump。

因此,又从github下载了grub2,把hexdump包 ...

你发的图片上的数据不科学啊。

这个是不是 grub4dos 启动 grub2 ,再 map 的?


这个是不是在 grub4dos 下 map,进grub2,在 grub2 下又执行 map 了?

我的fixwtg.vhd,热启、冷启用G4E map引导成功后,能够看到SVbus virtual磁盘设备,
而用grub2(仅限楼层中发布的1212版)热启、冷启map引导成功后,看不到SVbus virtual
磁盘设备。

grub2 和 grub4dos 在 map slot 里面写的信息不同,可能被 SVBus 当作不同类型的设备了。因为我觉得 grub4dos 写的有点问题。这个不重要。

点评

“这个是不是 grub4dos 启动 grub2 ,再 map 的?” ----不是的。这个应该是先前做过什么操作,然后热启动,单纯grub2引导、map。 “这个是不是在 grub4dos 下 map,进grub2,在 grub2 下又执行 map 了?” ---  详情 回复 发表于 2020-12-13 21:04
回复

使用道具 举报

161#
 楼主| 发表于 2020-12-13 17:29:55 | 显示全部楼层
liuzhaoyzz 发表于 2020-12-13 11:48
好消息,用你在499楼分享的grubx64.efi.tar.gz,成功搞定了grub2+svbus+WIN7X64-UEFI-RAMOS!

1、在499 ...
2、感觉grub2读盘速度一直较慢,不稳定,感觉不如g4e稳定,请看下还有没有提升的空间。


如果文件无碎片,可以加 -l 参数,先转成 blocklist 格式加速读取。
如果文件有碎片,可能可以,也可能不行。
3、还有个问题:启动vhd-ramos的时候,能否优先搜索FAT32/ESP分区里面的bootx64.efi,如果找不到再找NTFS分区里面的bootx64.efi?
对于g4e,我发现如果优先查找NTFS里面的bootx64.efi会出错,不知道grub2是怎么考虑处理的?

grub2 不会按文件系统搜索虚拟盘内部。如果虚拟的是硬盘,它就先读 mbr,找激活分区,强制加载里面的 bootx64.efi。如果是 gpt,就强制加载 ESP 分区里面的 bootx64.efi。如果加载失败,就遍历 device path,只要是虚拟盘或者里面分区的 device path,就挨个试一遍。
我所说的 "加载" 其实是固件提供的启动服务里面的 "LoadImage"。

点评

本人亲测了-l这个参数,7GB的vhd加载到内存,结果如下: 1、把SX70211.vhd放到sata ssd上面,没有碎片。不带-l参数从0→100%,用时1分23秒。 menuentry "SX70211.vhd-svbus" "/VHD/SX70211.vhd" { efil  详情 回复 发表于 2020-12-29 09:28
grub2查找bootx64.efi的方案很不错!这正是我们想要的。对于MBR分区就找活动分区里的bootx64.efi,一般地来说UEFI搭配MBR硬盘启动的时候,bootx64.efi这样的引导文件肯定是会放在活动分区里的。 感觉上来  详情 回复 发表于 2020-12-13 19:18
回复

使用道具 举报

162#
 楼主| 发表于 2020-12-13 21:23:39 | 显示全部楼层
本帖最后由 wintoflash 于 2020-12-13 21:25 编辑
wuwuzz 发表于 2020-12-13 21:09
@W大:

能不能发一个带hexdump、带ctl+alt+f12截图功能的grub2 ?  

grubx64.zip (656.91 KB, 下载次数: 9)
github上已经发布了,你可以自己改模块。crscreenshot 是截图的模块。

怀疑热启动没清干净一些内容。
================================================
换用冷启动,重新进行操作,截图如下:

这样看起来正常了。估计以前一些重启bug就是这个导致的。

点评

好消息!本人亲测,SVBUS+WIN7.VHD,vhd内部单分区,MBR分区,启动成功: menuentry "SX70211.vhd" "/VHD/SX70211.vhd" { efiload /EFI/grub/ntfs_x64.efi search --no-floppy --set --file $2  详情 回复 发表于 2020-12-17 01:43
好消息! 用你在524楼分享的这个grubx64.efi,成功地直接map win7.vhd启动成功,win7.vhd里面有svbus驱动加持。以前的版本直接map好像蓝屏了。  详情 回复 发表于 2020-12-14 12:32
ok  详情 回复 发表于 2020-12-13 23:04
回复

使用道具 举报

163#
 楼主| 发表于 2020-12-17 14:31:04 | 显示全部楼层
liuzhaoyzz 发表于 2020-12-17 01:43
好消息!本人亲测,SVBUS+WIN7.VHD,vhd内部单分区,MBR分区,启动成功:
menuentry "SX70211.vhd" "/VH ...

我觉得这个问题大家应该都知道啊,结果发现你们都不知道。。。多试试就能发现的。。。
建议慎用这个 ntfs 驱动。保险起见,最好有 FAT 分区。


另外,今天的版本修复了 vhd 模块的一些毛病。现在应该可以直接 map 或 loopback 挂载动态 vhd 了。
还有删掉了 fdlibm 模块,同时禁用浮点数,这个一般人不会关心吧。

你们在 BIOS 下用 grub4dos 启 RAMOS VHD,是不是喜欢用 lz4 压缩?
GRUB2 是否有必要支持 lz4 ?

点评

个人认为,在这论坛“玩”ramos的,“大部份”32G内存起步, 压缩,影响他们的心情,,, 个人认为,他们对16G以下内存的用户是非常不屑的  详情 回复 发表于 2020-12-17 19:23
回复

使用道具 举报

164#
 楼主| 发表于 2020-12-18 14:47:28 | 显示全部楼层
本帖最后由 wintoflash 于 2020-12-18 15:11 编辑
liuzhaoyzz 发表于 2020-12-13 10:24
链接: https://pan.baidu.com/s/1m0RF_WFGJgQ1-dDgTVTh-g 提取码: uwvc

vdf是primo驱动生成的,diskge ...

看了一下,vdf 没有文件头,和固定大小vhd差不多。
你这个 vdf 里面没有 bootmgfw.efi 啊,没法测试。
这个 vdf 怎么连bios引导代码也没有?

vdf里面的 bcd 好像也有问题。
指定的磁盘不对,0x20 处全是 0。

正常的 bcd 应该在下面框起来的地方记录磁盘信息。mbr的是磁盘签名和分区偏移,gpt的是磁盘guid和分区guid。

点评

链接: https://pan.baidu.com/s/1gbTRQiwgrLbF04SciMBp-Q 提取码: dwe7 上传了个2.34GB的FT81.vdf完全镜像用于测试,这是单镜像模式,你的内存足够了吧。 快传完了。  详情 回复 发表于 2020-12-18 22:10
回复

使用道具 举报

165#
 楼主| 发表于 2020-12-18 19:03:34 | 显示全部楼层
liuzhaoyzz 发表于 2020-12-18 18:44
这个用于BIOS-PRIMO-RAMOS里面的,之前我以为你只需要测试下vdf文件是否能够正常用map加载,所 ...
然后primo驱动把大镜像vdf加载到内存中

primo 是怎么知道大镜像vdf的位置在哪呢?注册表写死的?

点评

primo是遍历了所有的磁盘,查看磁盘签名,通过磁盘签名确定vdf所在的路径,我记忆中是这个样子,官方论坛有说过,一时找不到。 好像不是通过注册表,primo驱动启动组是SCSI class group,这个组是很早的,这时候注  详情 回复 发表于 2020-12-18 19:28
回复

使用道具 举报

166#
 楼主| 发表于 2020-12-18 20:05:12 | 显示全部楼层
liuzhaoyzz 发表于 2020-12-18 19:28
primo是遍历了所有的磁盘,查看磁盘签名,通过磁盘签名确定vdf所在的路径,我记忆中是这个样子,官方论坛 ...
通过磁盘签名确定vdf所在的路径

和哪里的磁盘签名作比较?vdf吗?
也就是说 vdf 要和它所在硬盘的磁盘签名一致?
文件路径呢?

点评

经过论坛询问和email咨询,romex官方很保守,说的不详细。 您好,grub4dos UEFI版本需要与primo驱动进行对接,需要了解以下方面的信息: primo 是怎么知道大镜像vdf的位置在哪呢?注册表写死的? 是通过磁盘签  详情 回复 发表于 2020-12-23 10:45
romex官方论坛很不稳定,很难访问,我找了半天没找到那个帖子,我试图发帖,半天发不出去,郁闷。 当时官方的回复大概是这样子,primo驱动加载后,把d:\vdf\xxx.vdf加载到内存,好像是绝对路径写死的,  详情 回复 发表于 2020-12-18 21:14
回复

使用道具 举报

167#
 楼主| 发表于 2020-12-19 23:05:44 | 显示全部楼层
liuzhaoyzz 发表于 2020-12-18 22:10
链接: https://pan.baidu.com/s/1gbTRQiwgrLbF04SciMBp-Q 提取码: dwe7

上传了个2.34GB的FT81.vdf完全 ...

上传了个2.34GB的FT81.vdf完全镜像用于测试,这是单镜像模式,你的内存足够了吧。

没看到?
感觉grub2需要采用类似NTBOOT的那套机制,确保能过BCD。

NTBOOT的哪套机制?我怎么不知道?
ntboot, wimboot, map 创建虚拟盘用的是同一套东西。

点评

链接: https://pan.baidu.com/s/1gbTRQiwgrLbF04SciMBp-Q 提取码: dwe7 不好意思,我上传的时候改了个名字,上传到原目录了,UEFI目录有个2.34GB的FT81.vdf完全镜像用于测试,这是单镜像模式  详情 回复 发表于 2020-12-20 15:07
我说的是在内存中建立个img启动镜像,里面放bootmgfw.efi,bcd这些,只要过了BCD,加载system之后,img启动镜像的任务就完成了,这是我纯粹瞎猜,不懂瞎说的。 技术细节 wimboot 可以生成一个 bootmgfw.exe/bootmgr  详情 回复 发表于 2020-12-20 08:12
回复

使用道具 举报

168#
 楼主| 发表于 2020-12-20 11:06:39 | 显示全部楼层
liuzhaoyzz 发表于 2020-12-20 08:12
我说的是在内存中建立个img启动镜像,里面放bootmgfw.efi,bcd这些,只要过了BCD,加载system之后,img启 ...
我说的是在内存中建立个img启动镜像,里面放bootmgfw.efi,bcd这些,只要过了BCD,加载system之后,img启动镜像的任务就完成了,这是我纯粹瞎猜,不懂瞎说的。你在NTBOOT移植的时候,说了下原理。


grub里面 (或者说 UEFI,以及操作系统) 都是要把硬件/硬件上的数据抽象化,是一层一层的。
文件这一层级的下面是文件系统,文件系统的下面是分区、分区表、磁盘。
wimboot/NTBOOT 创建的 FAT32 盘并不是真实存在于内存中的。内存中只有 FAT 文件系统的一些数据结构,文件本身还是在你本地的。它们只是作用在文件及文件系统这一层面。至于这个虚拟磁盘,是 map 通过 UEFI 的一些接口创建出来的虚拟设备。只要 bootmgfw.efi/winload.efi 退出 UEFI 启动服务,这些东西就灰飞烟灭了,没有区别。

点评

看起来似懂非懂的。 grub2直接map xxx.vdf好像能够正确加载BCD,只是在进一步启动的时候winload.efi出错,可能是winload.efi不能正确加载grub2仿真虚拟磁盘里面的文件。也有可能是BCD不能正确加载它所指向的grub2  详情 回复 发表于 2020-12-20 12:06
回复

使用道具 举报

169#
 楼主| 发表于 2020-12-20 12:25:16 | 显示全部楼层
liuzhaoyzz 发表于 2020-12-20 12:06
看起来似懂非懂的。

grub2直接map xxx.vdf好像能够正确加载BCD,只是在进一步启动的时候winload.efi出 ...
只有看下grub2在仿真磁盘方面能否单方面修改,以适配windows的BCD,winload.efi这些启动文件,骗过windows,达到启动的目的。

应该是你的vdf上bcd的配置不对。因为不存在你说的这种适配,winpe, VHD 都能正常启动。
BCD 上路径不应该用 BOOT/LOCATE。
回复

使用道具 举报

170#
 楼主| 发表于 2020-12-20 17:25:30 | 显示全部楼层
本帖最后由 wintoflash 于 2020-12-21 08:49 编辑
liuzhaoyzz 发表于 2020-12-20 15:07
链接: https://pan.baidu.com/s/1gbTRQiwgrLbF04SciMBp-Q 提取码: dwe7

不好意思,我上传的时候改了个 ...

但是BIOS下面用boot/locate定位primo内存盘没问题呀,为啥UEFI下面不能定位?

有区别。比如光盘启动,BIOS下 BOOT/LOCATE 读的是bootmgr同分区的文件,而 UEFI 下则是第一个 CDROM 设备里面的文件。硬盘可能也有这种区别。
顺便问下,直接map模式,有没有各种类型之说?

现在grub2的map,如果不指定设备类型,会自己判断。优先级如下:
(1) 文件扩展名,如果是iso,判断为光盘。
(2) 从文件的第 32769 字节开始读,如果找到 ISO9660 的卷描述符,判断为光盘。
(3) 读取前512字节(MBR),如果没有 55AA 标记,判断为软盘。
(4) 分区表类型:MBR 或 GPT。
设备类型都是一样的,不含 软盘、硬盘、光盘之类的信息,只是扇区大小有区别:光盘 2048,软盘/硬盘 512。
对于硬盘或者光盘,还要检查启动分区信息。

点评

非常感谢wintoflash大神详细的指导! 重大好消息!win8.1-primo-uefi-ramos成功启动!!!wintoflash给RAMOS-er打开了一个全新世界的大门!一个崭新的UEIF-RAMOS时代即将到来! 世界上第一个基于primo单驱动+gru  详情 回复 发表于 2020-12-20 20:44
回复

使用道具 举报

171#
 楼主| 发表于 2020-12-22 20:10:02 | 显示全部楼层
liuzhaoyzz 发表于 2020-12-22 19:51
好消息!g4e/grub2成功启动WIN10-PRIMO-UEFI-RAMOS!

但是g4e/grub2直接map有碎片的文件好像都不行。g4d ...
grub2好像是直接返回主菜单了。

你说这个没意义啊。要手动执行命令,看报错。

点评

以后再试试看,文件碎片我已经消除了,我对MS-DOS还算熟悉,在g4e/grub2界面,就是两眼一抹黑了,记不住命令,记不住文件路径,TAB命令补全有时候路径好像不行。  详情 回复 发表于 2020-12-22 21:22
回复

使用道具 举报

172#
 楼主| 发表于 2020-12-22 21:28:37 | 显示全部楼层
liuzhaoyzz 发表于 2020-12-22 21:22
以后再试试看,文件碎片我已经消除了,我对MS-DOS还算熟悉,在g4e/grub2界面,就是两眼一抹黑了,记不住 ...

tab补全区分大小写。

点评

哦,知道了。 另外,我看到命令里面有fucksb这样子的命令,是不是不那么雅观,Bypasssb,skipsb不好吗,就不担心国际友人笑话吗?  详情 回复 发表于 2020-12-23 07:47
回复

使用道具 举报

173#
 楼主| 发表于 2020-12-23 09:09:52 | 显示全部楼层
本帖最后由 wintoflash 于 2020-12-23 09:17 编辑
liuzhaoyzz 发表于 2020-12-23 07:47
哦,知道了。

另外,我看到命令里面有fucksb“干掉安全启动”这样子的命令,是不是不那么雅观,Bypass ...

我总感觉很多国人还是有一种自卑感,跟洋人交流时总是小心翼翼的,生怕洋人笑话。
看点好玩的:
https://github.com/nvbn/thefuck
https://github.com/sorellabs/fuck-you
https://www.bilibili.com/video/av883169284
"知名游戏"DOOM的源码:
https://github.com/id-Software/D ... 1.10/s_sound.c#L858
https://github.com/id-Software/D ... 1.10/am_map.c#L1000

很多向我反馈问题的人是土耳其人、越南人、阿拉伯人,一点英语都不会,不照样可以谈笑风生?

点评

Linus Torvalds真的是什么都敢怼!怼天怼地怼宇宙的。 我感觉以前的boot-land,现在的reboot.pro上面,聚集了很多自由软件的技术大神、牛逼人物,你们似乎都挺喜欢在上面混的,我上这个论坛很少,网页打开慢,牛  详情 回复 发表于 2020-12-23 10:54
回复

使用道具 举报

174#
 楼主| 发表于 2020-12-27 21:00:54 | 显示全部楼层
liuzhaoyzz 发表于 2020-12-27 20:35
大神,请问下这是怎么回事?grub2的crscreenshot模块截图反馈问题真的太爽了!

map之后,再ls一下看看。
map之后的盘符默认是 vdX,比如 (vd0)。启动分区比如是 (vd0,1),启动这里面的efi试一试。
回复

使用道具 举报

175#
 楼主| 发表于 2020-12-28 09:56:04 | 显示全部楼层
liuzhaoyzz 发表于 2020-12-28 07:47
直接上图,好像没有成功。
另外,请问下,grub2有没有类似g4e的vol这样子的命令,用于快速确定盘符?
直接上图,好像没有成功。

chainloader 没有报错啊。你得执行boot命令才能启动。
看你这种情况,应该是ntfs驱动没有正常工作吧。进efi shell看一下就知道了。
另外,请问下,grub2有没有类似g4e的vol这样子的命令,用于快速确定盘符?

在控制台输 ls (hd0,1) 就可以显示各种信息。输入 ls (hd0 然后按 tab,就可以显示各分区的信息。
想获取某分区的卷标,并保存到变量,可以用 probe -l --set=aaa (hd0,1)
想搜索定位,设为 root,就用 search -l --set=root "XXX"

点评

当时直接用菜单启动,选择之后直接跳回菜单。boot命令晚点试下。 ntfs驱动有可能有一定兼容性的问题,我试过了这台电脑上面,手工制作的单镜像可以启动,用批处理创建的单镜像又不行,WIN7单镜像出问题的概率似  详情 回复 发表于 2020-12-28 10:34
回复

使用道具 举报

176#
 楼主| 发表于 2020-12-28 11:15:26 | 显示全部楼层
liuzhaoyzz 发表于 2020-12-28 10:34
当时直接用菜单启动,选择之后直接跳回菜单。boot命令晚点试下。

ntfs驱动有可能有一定兼容性的问题 ...
ntfs驱动似乎不支持压缩模式,我看有网友反馈NTFS压缩的话,NTFS驱动似乎不能正常识别,akeo的驱动据说支持NTFS压缩,但是又不能适配grub2。我试了compact wimboot压缩双镜像模式似乎也是无法启动。还有较多的地方需要进行研究。


refind 的 NTFS 驱动不支持压缩。efifs (就是你说的 akeo) 驱动源码来自 grub2,按理说应该支持 NTFS 压缩。
这不存在什么适配不适配 grub2 的问题。grub2, grub4dos 加载驱动用的是同一套代码,都是我从 efi shell 抄过来的,没有改变任何逻辑。
你们明知 NTFS 驱动这么不靠谱,还不去研究带 fat 分区的镜像?非得吊死在 NTFS 上?
NTFS 的奇葩事情多着呢,要不然为什么 refind 不再支持 NTFS 了?

点评

另外,我也不是没有想过抛弃这个ntfs驱动,这个帖子前面我就有这样子的想法。大概这样子设想的: menuentry "RICH-RAMOS-2020-1225-09141.vdf" "/vdf/SX7P2/RICH-RAMOS-2020-1225-09141.vdf" { search --no-fl  详情 回复 发表于 2020-12-28 11:51
虽然NTFS驱动不靠谱,但是他简单啊,加载这个驱动之后,芈员外的部分代码可以复用,如果搞FAT32+NTFS方式,代码就要调整很多,这个改代码、测试工作量太大了,我比较懒散,小圈子的人能用就行了,不是很追求  详情 回复 发表于 2020-12-28 11:24
回复

使用道具 举报

177#
 楼主| 发表于 2020-12-28 12:02:34 | 显示全部楼层
liuzhaoyzz 发表于 2020-12-28 11:51
另外,我也不是没有想过抛弃这个ntfs驱动,这个帖子前面我就有这样子的想法。大概这样子设想的:

你说反了吧。
map的第一个磁盘应该是你的 vdf,map -n /xxx.vdf
map的第二个磁盘才是 fat32 boot.img,从这上面启动,map /boot.img。
还有,不查找启动的参数是 '--nb',或者简写为 '-n',不是 '-nb'。

点评

哦,对的,你说的是对的。 大佬牛逼啊!按照你给的那一串命令,boot之后,成功启动了,出现了怪异的画面,后台是grub2,前年是win7四色旗徽标! 那么,这到底是为什么出现这样子的情况?为什么菜单  详情 回复 发表于 2020-12-28 12:08
回复

使用道具 举报

178#
 楼主| 发表于 2020-12-28 20:56:44 | 显示全部楼层
liuzhaoyzz 发表于 2020-12-28 11:51
另外,我也不是没有想过抛弃这个ntfs驱动,这个帖子前面我就有这样子的想法。大概这样子设想的:

稍微改了一下ntboot对磁盘的判定。
现在也可以用 ntboot 启动map出来的vhd里面的windows系统了。
在我的电脑上试是可以的,那就不用加载万恶的ntfs驱动了。
  1. map -n --mem --rt (hd1,4)/ramos.vhd.xz
  2. ntboot --win --efi=(vd0,3)/bootmgfw.efi (vd0,3)
复制代码

那么,这到底是为什么出现failed to load image这样子的情况?为什么菜单不行?

我又不能顺着网线看你的电脑,我也没办法知道。菜单里面,在boot之前加个getkey命令,在boot之后再加个getkey命令,暂停一下就能看见报错了。

点评

报告下好消息: 一、抛弃ntfs_x64.efi的情况下,grub2+ntboot已完成了通杀WIN7 8 10单镜像、双镜像通杀: 1、ntboot启动WIN7 8.1 10+基于svbus驱动的vhd到内存成功。 2、ntboot启动WIN7 8.1 10+基于primo驱动的RA  详情 回复 发表于 2020-12-29 13:06
回复

使用道具 举报

179#
 楼主| 发表于 2020-12-28 22:27:20 | 显示全部楼层
本帖最后由 wintoflash 于 2020-12-28 22:29 编辑
liuzhaoyzz 发表于 2020-12-28 22:06
如果能够抛弃ntfs驱动将会大大提高兼容性。
map -n --mem --rt (hd0,msdos2)/ramos.vhd
ntboot --win -- ...
另外grub2命名不都是(hd0,msdos1)这种吗?你发的菜单(hd1,4)仅仅是个示意的意思是吗?

分区表可以不写的。(hd0,1) 一样可以。
我这边试了不行啊,里面有svbus驱动,结果0xc000000f,或者7B蓝屏,我不知道错在哪里了?   

是不是你的vhd里面的winload.efi路径不是 \Windows\System32\boot\winload.efi?那需要指定 winload的路径。
比如
ntboot --win -e (vd0,1)/efi/boot/bootx64.efi --winload=\\Windows\\System32\\winload.efi (vd0,3)


failed to load image我上面有截图呀?

你不是说 "当时直接用菜单启动,选择之后直接跳回菜单。boot命令晚点试下",但是手动输命令可以吗?
另外,bootmgfw报错那里,应该也可以用 左Ctrl+左Alt+F12 截图。

点评

ntboot --win -e (vd0,1)/efi/boot/bootx64.efi --winload=\\Windows\\System32\\winload.efi (vd0,1) 早上起来试了下,结果如下: 1、WIN7启动后7B蓝屏了。 2、WIN8.1启动成功。 3、WIN10启动成功。 有以下  详情 回复 发表于 2020-12-29 08:15
回复

使用道具 举报

180#
 楼主| 发表于 2020-12-29 10:56:19 | 显示全部楼层
liuzhaoyzz 发表于 2020-12-29 08:15
map -n --mem --rt (hd0,msdos2)/ramos.vhd
ntboot --win -e (vd0,1)/efi/boot/bootx64.efi --winload=\ ...
用ntboot启动之后,屏幕的分辨率好像被锁定了不能更改?(这个我不确定)

加上 --highest=no 参数试试。默认是 highest=yes,也就是强制最高分辨率。

这个能否做到自适应,因为启动之前我不知道这个vhd里面倒底是WIN7 还是WIN8.1 WIN10,菜单不容易通用,如果ntboot内部能够查找\Windows\system32\boot\winload.efi或者\Windows\system32\winload.efi是否存在并自动指定就好了。

这样做不符合 UNIX 的哲学:"程序应该只关注一个目标,并尽可能把它做好。让程序能够互相协同工作。"
目前 GRUB 已经有了判断文件是否存在的命令,那么 NTBOOT 就不应该把这个功能再实现一遍。我们应该把这个选择权交给用户,让他们通过脚本自行决定。
如果两个文件都有,怎么办?
如果GRUB无法读取这个分区的数据怎么办?(比如没加载 EXFAT/NTFS 驱动,或者将来微软为 NTFS 设计了新的压缩方法,或者微软为 Windows 设计了新的文件系统格式,或者分区加密了)

能否自动搜索虚拟盘,不要指明分区这种?

同上。可以通过 GRUB2 脚本做到的事情,没必要集成进命令中。
如果一块硬盘上安装了多个 Windows,怎么办?
如果 bootx64.efi 不是微软的 bootmgfw.efi 怎么办?

1、WIN7启动后7B蓝屏了。(晚点我再试试,看下是否有其他原因)

win7 的 bootmgfw.efi 和更高版本的相比,差别很大。可能有其他原因。

点评

出于好奇的心理,想问下大神一个问题: 1、官方grub2源代码托管平台,好像是GNU自己搭建的是吗?在他们的官网上,http://www.gnu.org/software/grub/index.html,You can obtain the latest GRUB source from the G  详情 回复 发表于 2021-1-21 11:22
加上--highest=no 参数之后,分辨率正常了,感谢!  详情 回复 发表于 2020-12-29 13:07
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-5 19:54

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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