无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
楼主: wintoflash
打印 上一主题 下一主题

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

    [复制链接]
511#
发表于 2020-12-12 22:34:18 | 只看该作者
wintoflash 发表于 2020-12-12 19:00
还有 @wuwuzz  试试这个。
按 左Ctrl+左Alt+F12 可截图,截图保存在某 FAT分区里面。

一、1212版测试结果如下:
svbusPE.img  无论加不加mem参数map,都可成功并进入桌面
fixwtg.vhd   我的装有svbus的25G VHD,不加mem参数,可成功map并进入桌面
ramos.vhd    与之前结果相同,G4E可成功map并进入桌面。重启,grub2 map启动仍然蓝屏出错。
                   且出错后,重启,换用G4E MAP和引导,也蓝屏。

   
   


二.后续增加了以下步骤:在蓝屏出错后,启动本地硬盘win10挂载ramos.vhd,对ramos.vhd的
EFI、NTFS分区,属性--工具--检查,未检查到错误。


点评

[attachimg]470575[/attachimg] 这里写的是 0x9d000,你在执行 "boot" 之前,执行 "hexdump (mem) -s 0x9d000" 查看一下内存。 还有,你说 grub4dos 可以不加载到内存正常启动,那先在 g4d 下 map,然后 chainlo  详情 回复 发表于 2020-12-13 10:09
回复

使用道具 举报

512#
发表于 2020-12-13 10:06:57 | 只看该作者
liuzhaoyzz 发表于 2020-12-12 20:30
晚点试试看

试过了,chkdsk /f没用,从github下载grub2 1212版本结果一样。

是vhd要重做,坏了,
我遇到的情况是启动失败后,再把vhd挂载出来,再用dism++查看添加驱动页面,提示不支持该接口

点评

没有道理怀疑vhd坏了。 因为同一个vhd,用bootmgfw.efi启动它没有问题;用g4e的map --mem --top启动它也没问题。  详情 回复 发表于 2020-12-13 10:27
回复

使用道具 举报

513#
发表于 2020-12-13 10:07:48 | 只看该作者
我怀疑是这样“操作内存”后,uefi固件和windows其中之一疯了。
回复

使用道具 举报

514#
 楼主| 发表于 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
回复

使用道具 举报

515#
 楼主| 发表于 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
回复

使用道具 举报

516#
发表于 2020-12-13 10:24:56 | 只看该作者
本帖最后由 liuzhaoyzz 于 2020-12-13 10:27 编辑
wintoflash 发表于 2020-12-13 10:11
发我一个小点的 vdf ,我看看。
vdf有没有像 vhd 那样,分为 "固定大小" 和 "动态" 的?

链接: https://pan.baidu.com/s/1m0RF_WFGJgQ1-dDgTVTh-g 提取码: uwvc

vdf是primo驱动生成的,diskgenius也能够打开吧,有没有"固定大小" 和 "动态"之分,我还真不知道。

点评

看了一下,vdf 没有文件头,和固定大小vhd差不多。 你这个 vdf 里面没有 bootmgfw.efi 啊,没法测试。 这个 vdf 怎么连bios引导代码也没有?  详情 回复 发表于 2020-12-18 14:47
回复

使用道具 举报

517#
发表于 2020-12-13 10:27:15 | 只看该作者
江南一根葱 发表于 2020-12-13 10:06
是vhd要重做,坏了,
我遇到的情况是启动失败后,再把vhd挂载出来,再用dism++查看添加驱动页面,提示不 ...

没有道理怀疑vhd坏了。
因为同一个vhd,用bootmgfw.efi启动它没有问题;用g4e的map --mem --top启动它也没问题。
回复

使用道具 举报

518#
发表于 2020-12-13 11:48:28 | 只看该作者
wintoflash 发表于 2020-12-12 19:00
还有 @wuwuzz  试试这个。
按 左Ctrl+左Alt+F12 可截图,截图保存在某 FAT分区里面。

好消息,用你在499楼分享的grubx64.efi.tar.gz,成功搞定了grub2+svbus+WIN7X64-UEFI-RAMOS!

1、在499楼,你只 @wuwuzz  试试这个,并没有有@我,我都不知道要用这个来测试,差点错过了!
2、感觉grub2读盘速度一直较慢,不稳定,感觉不如g4e稳定,请看下还有没有提升的空间。



3、还有个问题:启动vhd-ramos的时候,能否优先搜索FAT32/ESP分区里面的bootx64.efi,如果找不到再找NTFS分区里面的bootx64.efi?
对于g4e,我发现如果优先查找NTFS里面的bootx64.efi会出错,不知道grub2是怎么考虑处理的?



svbus-WIN7X64-UEFI-RAMOS.jpg (220.01 KB, 下载次数: 260)

svbus-WIN7X64-UEFI-RAMOS.jpg

点评

[attachimg]470643[/attachimg] 如果文件无碎片,可以加 -l 参数,先转成 blocklist 格式加速读取。 如果文件有碎片,可能可以,也可能不行。 grub2 不会按文件系统搜索虚拟盘内部。如果虚拟的是硬盘,它就先  详情 回复 发表于 2020-12-13 17:29
回复

使用道具 举报

519#
发表于 2020-12-13 11:52:47 | 只看该作者
wintoflash 发表于 2020-12-13 10:09
这里写的是 0x9d000,你在执行 "boot" 之前,执行 "hexdump (mem) -s 0x9d000" 查看一下内存。
还有 ...

以前图示中用的是楼层里的grub2,该grub2没有包含hexdump。

因此,又从github下载了grub2,把hexdump包含进去,使用该grub2 map,
write grub4dos drive map slot地址变为0x57000,相关截图如下:









先g4d map ramos.vhd,然后chainloader grub2后的截图如下:





点评

你发的图片上的数据不科学啊。 [attachimg]470641[/attachimg] 这个是不是 grub4dos 启动 grub2 ,再 map 的? [attachimg]470642[/attachimg] 这个是不是在 grub4dos 下 map,进grub2,在 grub2 下又执行 map  详情 回复 发表于 2020-12-13 17:20
回复

使用道具 举报

520#
发表于 2020-12-13 11:59:36 | 只看该作者
本帖最后由 wuwuzz 于 2020-12-13 13:55 编辑

补充发现:

1. g4e map启动成功,像是“假”成功。她只能map引导刚解压出的、全新ramos.vhd成功
(即第一次map,这次map引导会出现:正准备设备进度提示),之后热启、冷启后再
map引导ramos.vhd(不再出现正准备设备提示),将蓝屏。

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

G4E:



grub2:




回复

使用道具 举报

521#
发表于 2020-12-13 15:00:58 | 只看该作者
假设一下,直接map不mem启动后,vhd会产生碎片吧,

点评

只是启动下VHD,读写一般不多,临时文件基本不怎么影响碎片的,很早以前g4d+firadisk就是这样子,不会产生什么碎片。 大不了就用wincontig整理下。  详情 回复 发表于 2020-12-13 16:49
回复

使用道具 举报

522#
发表于 2020-12-13 16:49:11 来自手机 | 只看该作者
江南一根葱 发表于 2020-12-13 15:00
假设一下,直接map不mem启动后,vhd会产生碎片吧,

       只是启动下VHD,读写一般不多,临时文件基本不怎么影响碎片的,很早以前g4d+firadisk就是这样子,不会产生什么碎片。 大不了就用wincontig整理下。

点评

我只不过往vhd加了几个文件,就产生碎片了 直接就蓝屏,  详情 回复 发表于 2020-12-13 17:06
回复

使用道具 举报

523#
发表于 2020-12-13 17:06:17 | 只看该作者
liuzhaoyzz 发表于 2020-12-13 16:49
只是启动下VHD,读写一般不多,临时文件基本不怎么影响碎片的,很早以前g4d+firadisk就是这样子, ...

我只不过往vhd加了几个文件,就产生碎片了
直接就蓝屏,

点评

不会吧?!你的vhd是不是放在ssd上面?ssd有FTL中间层会影响碎片。  详情 回复 发表于 2020-12-13 18:19
回复

使用道具 举报

524#
发表于 2020-12-13 17:12:32 来自手机 | 只看该作者
看来,让SVBUS支持碎片,很有必要。
回复

使用道具 举报

525#
 楼主| 发表于 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 写的有点问题。这个不重要。
回复

使用道具 举报

526#
 楼主| 发表于 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"。
回复

使用道具 举报

527#
发表于 2020-12-13 17:30:49 来自手机 | 只看该作者
SVBus只认最高处的搜索字符串,其他的没有起作用。

点评

svbus 的img 一些镜像工具,认为是 0 大小的磁盘,(没有smart 参数)  发表于 2020-12-14 12:03
回复

使用道具 举报

528#
发表于 2020-12-13 18:19:03 来自手机 | 只看该作者
江南一根葱 发表于 2020-12-13 17:06
我只不过往vhd加了几个文件,就产生碎片了
直接就蓝屏,

不会吧?!你的vhd是不是放在ssd上面?ssd有FTL中间层会影响碎片。

点评

这么高深,我确实是ssd上的,trim后才正常, 不过我以前在机械硬盘操、作,也不靠谱  详情 回复 发表于 2020-12-14 14:04
回复

使用道具 举报

529#
发表于 2020-12-13 19:18:27 来自手机 | 只看该作者
wintoflash 发表于 2020-12-13 17:29
如果文件无碎片,可以加 -l 参数,先转成 blocklist 格式加速读取。
如果文件有碎片,可能可以,也 ...

        grub2查找bootx64.efi的方案很不错!这正是我们想要的。对于MBR分区就找活动分区里的bootx64.efi,一般地来说UEFI搭配MBR硬盘启动的时候,bootx64.efi这样的引导文件肯定是会放在活动分区里的。

感觉上来说g4e似乎没有这个机制?对于MBR硬盘活动FAT32分区+NTFS分区的情况,总是优先找到的是未激活的NTFS分区里的bootx64.efi。用户侧的确可以删除NTFS分区里的bootx64.efi规避问题,如果在开发侧考虑这个就好了。
回复

使用道具 举报

530#
发表于 2020-12-13 21:04:08 | 只看该作者
wintoflash 发表于 2020-12-13 17:20
你发的图片上的数据不科学啊。

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

“这个是不是 grub4dos 启动 grub2 ,再 map 的?”
----不是的。这个应该是先前做过什么操作,然后热启动,单纯grub2引导、map。

“这个是不是在 grub4dos 下 map,进grub2,在 grub2 下又执行 map 了?”
---没有再map。这个也是热启动之后,g4e下map,进grub2后截图,grub2没执行map。

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





g4d map后,进grub2, hexdump





回复

使用道具 举报

531#
发表于 2020-12-13 21:09:43 | 只看该作者
@W大:

能不能发一个带hexdump、带ctl+alt+f12截图功能的grub2 ?  
我重做的grub2不带截图功能,发图效率低...

点评

github上已经发布了,你可以自己改模块。crscreenshot 是截图的模块。  详情 回复 发表于 2020-12-13 21:23
回复

使用道具 举报

532#
 楼主| 发表于 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, 下载次数: 10)
github上已经发布了,你可以自己改模块。crscreenshot 是截图的模块。

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

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

使用道具 举报

533#
发表于 2020-12-13 23:04:17 | 只看该作者
wintoflash 发表于 2020-12-13 21:23
github上已经发布了,你可以自己改模块。crscreenshot 是截图的模块。

ok
回复

使用道具 举报

534#
发表于 2020-12-14 08:44:36 | 只看该作者
本帖最后由 liuzhaoyzz 于 2020-12-14 08:51 编辑
wintoflash 发表于 2020-12-13 17:29
如果文件无碎片,可以加 -l 参数,先转成 blocklist 格式加速读取。
如果文件有碎片,可能可以,也 ...

刚才用秒表测试了下,从选择菜单开始计时,把一个8GB的VHD放在普通ssd硬盘,完全加载到内存到100%为止停止计时。
g4e用了55秒,grub2用了1分23秒。
g4e加载速度比grub2快了(83-55)/83=34%


以前只是主观感觉慢,卡表看了下确实慢。
没有用--blocklist参数。
回复

使用道具 举报

535#
发表于 2020-12-14 08:56:00 | 只看该作者
谢谢楼主的分享
回复

使用道具 举报

536#
发表于 2020-12-14 12:32:59 来自手机 | 只看该作者
本帖最后由 liuzhaoyzz 于 2020-12-14 12:35 编辑
wintoflash 发表于 2020-12-13 21:23
github上已经发布了,你可以自己改模块。crscreenshot 是截图的模块。




好消息!
用你在524楼分享的这个grubx64.efi,成功地直接map win7.vhd启动成功,win7.vhd里面有svbus驱动加持。
menuentry "SX70211.vhd" "/VHD/SX70211.vhd" {
       search --no-floppy --set --file $2
       map $2
    }


以前的版本直接map好像蓝屏了。
回复

使用道具 举报

537#
发表于 2020-12-14 14:04:00 | 只看该作者
liuzhaoyzz 发表于 2020-12-13 18:19
不会吧?!你的vhd是不是放在ssd上面?ssd有FTL中间层会影响碎片。

这么高深,我确实是ssd上的,trim后才正常,
不过我以前在机械硬盘操、作,也不靠谱
回复

使用道具 举报

538#
发表于 2020-12-17 01:43:28 | 只看该作者
本帖最后由 liuzhaoyzz 于 2020-12-17 07:59 编辑
wintoflash 发表于 2020-12-13 21:23
github上已经发布了,你可以自己改模块。crscreenshot 是截图的模块。

好消息!本人亲测,SVBUS+WIN7.VHD,vhd内部单分区,MBR分区,启动成功:
menuentry "SX70211.vhd" "/VHD/SX70211.vhd" {
        efiload /EFI/grub/ntfs_x64.efi
        search --no-floppy --set --file $2
        map --mem --rt $2
}

建议在发布的时候,加上efiload模块,这个模块很重要!没有这个模块,VHD-RAMOS单分区无法启动。
F:\bak\grub2\grub2-latest2020-12-17\arch\x64\builtin.txt
加上 efiload


我看了下帖子, 2019-11-9日,早在一年之前,118楼、119楼,我们早就讨论过了ntfs.efi驱动的加载了,单分区NTFS-svbus-RAMOS用grub2加载出错,我们早就应该想到加载ntfs.efi驱动的。


g4e也是因为缺乏这个ntfs.efi驱动导致无法正常加载单分区VHD。
回复

使用道具 举报

539#
发表于 2020-12-17 07:56:37 | 只看该作者
江南一根葱 发表于 2020-12-14 14:04
这么高深,我确实是ssd上的,trim后才正常,
不过我以前在机械硬盘操、作,也不靠谱

        根本用不着trim,WIN7以上的系统对ssd好像是自动开启trim的。ssd如果因为死机强制关机出现索引错误和交叉链接错误,chkdsk /f有时候都不一定能够完全修复,最简单直接暴力的办法是:备份ssd里面的主要文件,然后把ssd格式化,再把备份文件拷贝回去,各种怪异的问题基本都能够解决,很多时候不是UEFI固件“疯了”,而是ssd存贮“疯了”。
回复

使用道具 举报

540#
发表于 2020-12-17 12:21:38 | 只看该作者
liuzhaoyzz 发表于 2020-12-17 01:43
好消息!本人亲测,SVBUS+WIN7.VHD,vhd内部单分区,MBR分区,启动成功:
menuentry "SX70211.vhd" "/VH ...

“g4e也是因为缺乏这个ntfs.efi驱动导致无法正常加载单分区VHD”

是的,原以为G4E有内置NTFS支持,就没往这方面去想。实际上是我自己有模糊认识。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2025-6-7 05:39

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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