无忧启动论坛

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

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

    [复制链接]
31#
发表于 2019-12-21 22:02:37 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2019-12-21 22:05 编辑
wintoflash 发表于 2019-12-21 22:00
码云是自动同步的源码 https://gitee.com/a1ive/grub
但是码云不支持同步releases,好像也不能自动发布re ...

登录下也无所谓啊,下载速度快就好。码云确实不能同步release,就是这一点不太爽,而且码云不是自动同步的,要手工同步。
哦,看了下,码云的代码似乎不是最新版的吧。

点评

是最新版的,实时同步。以前是手动,后来我用了一些奇技淫巧实现了自动同步。 现在所有的流程都实现了自动化。 每次我向github推送代码,github actions 就会自动把代码推送到码云,并且自动编译。编译好之后会自  详情 回复 发表于 2019-12-21 22:27
回复

使用道具 举报

32#
发表于 2019-12-21 22:36:17 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2019-12-21 22:37 编辑

码云没有发行版,只有2.04-rc1,2019-04-08 13:30,几秒钟下载了。
github上面release版本,我下载了一晚上下载不下来,wintoflash大传到码云,或者兰奏云可好?

点评

码云的发行版没办法自动创建。太麻烦了。 找到一个可能是github非官方镜像的?试试 http://github-mirror.bugkiller.org/a1ive/grub/releases  详情 回复 发表于 2019-12-21 22:39
回复

使用道具 举报

33#
发表于 2019-12-21 22:43:25 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2019-12-21 22:46 编辑

你给的镜像站点速度还行。http://github-mirror.bugkiller.org/a1ive/grub/releases地址放到一楼吧

我分享个。https://www.lanzous.com/b00n8g6gf 密码:77yw

QQ拼音截图20191221224257.png (9.95 KB, 下载次数: 134)

QQ拼音截图20191221224257.png
回复

使用道具 举报

34#
发表于 2020-5-13 07:36:50 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-5-13 07:43 编辑
wintoflash 发表于 2020-5-12 20:39
现在增加了一个选项来屏蔽光驱
例如 屏蔽(cd0):

wintoflash大神牛逼!

我在164楼描述的现象,
http://wuyou.net/forum.php?mod=r ... 1539&fromuid=298214
用刚下载的版本定制之后,菜单改成下面,vm里面挂载了个pe.iso,优先从硬盘grub2x64.efi引导wepe.iso成功。
menuentry "WePE_64_V2.0.iso" "/boot/imgs/WePE_64_V2.0.iso" {
search --no-floppy --set --file $2
map --mem --type=CD $2
map -x (cd0)
}
想问下,map -x (cd0)是屏蔽所有光驱,还是仅仅屏蔽(cd0)?是否还需要map -x (cd1);map -x (cd2)...?

分流https://liuzhaoyzz.lanzous.com/b00n8g6gf



点评

应该先执行屏蔽 (cd0),再进行map。 仅屏蔽 (cd0)。map -x 后面跟什么就屏蔽什么。理论上也可以屏蔽硬盘。 屏蔽所有光驱:  详情 回复 发表于 2020-5-13 08:01
回复

使用道具 举报

35#
发表于 2020-5-13 08:41:07 来自手机 | 显示全部楼层
wintoflash 发表于 2020-5-13 08:01
应该先执行屏蔽 (cd0),再进行map。



明白了,感谢回复!
回复

使用道具 举报

36#
发表于 2020-5-13 09:29:03 来自手机 | 显示全部楼层
wintoflash 发表于 2020-5-13 08:01
应该先执行屏蔽 (cd0),再进行map。



另外,想请问下,grub2菜单中,一行写多条语句,用分号作为续行符隔开,一行最多可以写多少个字符?

点评

这个没有限制吧。内存都是动态分配的,只要内存有空间就行。  详情 回复 发表于 2020-5-13 09:48
回复

使用道具 举报

37#
发表于 2020-5-13 10:02:32 | 显示全部楼层
wintoflash 发表于 2020-5-13 09:48
这个没有限制吧。内存都是动态分配的,只要内存有空间就行。

好像记得grub4dos单行限制256个字符还是多少,忘了。grub2应该也是一样有限制的。没有资料显示倒底是多少。心里没谱。

点评

没有。grub4dos里面都是写死的内存地址,所以有限制。 grub2实现了malloc,动态分配内存。  详情 回复 发表于 2020-5-13 10:16
回复

使用道具 举报

38#
发表于 2020-5-13 10:24:23 | 显示全部楼层
wintoflash 发表于 2020-5-13 10:16
没有。grub4dos里面都是写死的内存地址,所以有限制。
grub2实现了malloc,动态分配内存。

哦,明白了。看样子我对grub2误会很深啊!
回复

使用道具 举报

39#
发表于 2020-5-13 10:52:23 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-5-13 10:59 编辑
wintoflash 发表于 2020-5-12 20:39
现在增加了一个选项来屏蔽光驱
例如 屏蔽(cd0):

menuentry "WePE_64_V2.0.iso" "WePE_64_V2.0.iso" {
strconv --gbk --set=file "(http)/imgs/WePE_64_V2.0.iso";map -x (cd0);map -x (cd1);map -x (cd2);map --mem --type=CD ${file}
}

grub2-pxe启动,用上面的菜单,
(cd0)挂载的有个pe1.iso,提示path:....../EndEntire一长串字符。
(cd1) (cd2)没有挂载,启动的时候提示出错,提示failed to open disk.这个出错信息让人迷惑,以为启动出错了,其实没问题,能否屏蔽显示?
就是(cd0)存在的话也没必要提示啊。

在windows批处理里面,可以用1>nul 2>nul屏蔽输出显示:
pause 1>nul 2>nul

grub2有没有类似的屏蔽某个命令输出显示的命令?
或者在map -x命令内部代码层级直接屏蔽输出显示,是否可行?





测试GPT-2020-05-13-10-47-56.png (4.25 KB, 下载次数: 255)

测试GPT-2020-05-13-10-47-56.png

点评

我喜欢调试信息,所以不让屏蔽。  详情 回复 发表于 2020-5-13 11:13
回复

使用道具 举报

40#
发表于 2020-5-13 11:45:21 | 显示全部楼层
江南一根葱 发表于 2020-5-13 11:38
要不弄个动态图,盖住

不用。

menuentry "WePE_64_V2.0.iso" "WePE_64_V2.0.iso" {
strconv --gbk --set=file "(http)/imgs/WePE_64_V2.0.iso";for dev in (cd*); do map -x $dev;done;map --mem --type=CD ${file}
}

用这样子的语句就可以不显示failed to open disk.的错误。
回复

使用道具 举报

41#
发表于 2020-5-13 15:22:15 | 显示全部楼层
wintoflash 发表于 2020-5-13 11:13
我喜欢调试信息,所以不让屏蔽。

大神,还是请出手去掉map -x的提示吧。因为实际启动过程中:
for dev in (cd*); do
    map -x $dev
done
如果一个光驱都没有的时候,上面的语句还是会提示failed to open disk.的错误。
回复

使用道具 举报

42#
发表于 2020-5-13 17:18:47 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-5-13 17:23 编辑

这样子的菜单,大大增加了菜单的复杂度,少个空格都出错。
本来一句map -x ${dev}就能够搞定的,现在要搞7个语句,就是为了规避那个本来不该出现的错误提示failed to open disk.

path:....../EndEntire一长串字符保留倒是可以,用于调试。

点评

写成fuck函数,各个菜单调用,能极大缩简语句 只需要输fuck  详情 回复 发表于 2020-5-13 18:06
错了就是错了,执行过程中出错然后报警,是正常操作。如果不报警反而不正常。  详情 回复 发表于 2020-5-13 17:23
回复

使用道具 举报

43#
发表于 2020-5-13 18:57:53 来自手机 | 显示全部楼层
江南一根葱 发表于 2020-5-13 18:06
写成fuck函数,各个菜单调用,能极大缩简语句
只需要输fuck

菜单里面再搞函数,感觉可读性较差,就一两条语句,没必要搞函数啊。

点评

不是要弄在菜单里搞啊,写在别处,多个菜单里使用啊  详情 回复 发表于 2020-5-13 18:59
回复

使用道具 举报

44#
发表于 2020-5-13 20:20:27 | 显示全部楼层
江南一根葱 发表于 2020-5-13 18:59
不是要弄在菜单里搞啊,写在别处,多个菜单里使用啊你不是说有七条语句

写在别处不是更乱了吗?一个grub.cfg已经够我折腾的了。
回复

使用道具 举报

45#
发表于 2020-5-23 19:53:10 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-5-23 19:55 编辑
wintoflash 发表于 2020-5-13 17:23
错了就是错了,执行过程中出错然后报警,是正常操作。如果不报警反而不正常。

请问下大神,grub2,模块能否支持ext3 ext4 ReiserFS这样子的文件解析模块?我只看到有ext2?

点评

ext2 3 4 都用ext2。 reiserfs也有。  详情 回复 发表于 2020-5-23 20:04
回复

使用道具 举报

46#
发表于 2020-5-23 20:06:33 | 显示全部楼层
wintoflash 发表于 2020-5-23 20:04
ext2 3 4 都用ext2。
reiserfs也有。

明白了。
回复

使用道具 举报

47#
发表于 2020-11-4 14:45:40 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-11-4 15:00 编辑

github下载速度只有20~60kB/s,到最后是0~200B/s,简直是浪费生命!
https://offcloud.com/ 下载也很慢,没有太大的改善。
分享个GitHub代下载服务·永久免费 http://gitd.cc/
有点奇怪的是,这个GitHub代下载服务下载后与github原站点下载的MD5值不同,不知道咋回事。压缩包解压缩之后,里面的文件MD5倒是一致的,没有问题。

另外,想问下wintoflash大神,grub2有没有changelog之类的?对于grub2更新了什么内容有些好奇。github上面,commit里面只是有个简短的描述。






点评

gitd.cc在我这边特别慢。github反而很快。 这都是没办法的事。国内没有靠谱且免费的持续集成服务和软件下载平台。  详情 回复 发表于 2020-11-5 13:10
如果没详细说明,那一般是修bug或者内部的一些改动。 如果增加了模块或命令,我都会写 "add ... command",删除模块也会写 "remove xxx"。 我一直都是尽量考虑兼容性,不修改用户能接触到的部分。  详情 回复 发表于 2020-11-4 14:59
回复

使用道具 举报

48#
发表于 2020-11-4 15:04:47 | 显示全部楼层
wintoflash 发表于 2020-11-4 14:59
如果没详细说明,那一般是修bug或者内部的一些改动。
如果增加了模块或命令,我都会写 "add ... command ...

       难怪,我看到github上面,10725 commits,用户文档没发现有什么改变,原来都是后台调整。
回复

使用道具 举报

49#
发表于 2020-11-5 14:19:41 | 显示全部楼层
wintoflash 发表于 2020-11-5 13:10
gitd.cc在我这边特别慢。github反而很快。

这都是没办法的事。国内没有靠谱且免费的持续集成服务和软 ...

        不同地域对不同服务器响应的确不同,差别还很大。
回复

使用道具 举报

50#
发表于 2020-11-5 16:30:25 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-11-5 16:34 编辑
wintoflash 发表于 2020-11-5 13:48
@wuwuzz 可以下载最新版试试
map -f /xxx.iso
这样让 map 出的磁盘/光盘排在第一位。

        刚才在虚拟机里面试了下,光驱里面挂载个PE1.ISO,bios设置优先从本地硬盘的grub2x64.efi引导,可以启动pe2.iso,似乎不需要提前map -x (cd0)?
菜单如下:
map --mem -f --type=CD /pe2.iso


menuentry "SXWIN10PEX64_17763_NET20200902.iso" "/boot/imgs/SXWIN10PEX64_17763_NET20200902.iso" {
search --no-floppy --set --file $2
map --mem -f --type=CD $2
}


点评

是的,不用map -x  详情 回复 发表于 2020-11-5 16:32
回复

使用道具 举报

51#
发表于 2020-11-5 16:39:52 | 显示全部楼层
wintoflash 发表于 2020-11-5 16:32
是的,不用map -x。
还有 map本地镜像不需要--mem。加--mem纯属浪费时间

        太棒了!不要map -x (cd0)这样子的语句,菜单简单太多了!以前要7条语句。

PE启动我都使用map --mem加载到内存,习惯了。

点评

加--mem除了浪费时间没有其他用处。这个参数一般网启才用。 就算你想设计Windows下的驱动挂载map出来的内存盘,用--mem也不行。这个内存盘在进入操作系统之前就会被uefi释放掉。要想进入操作系统还能看见内存盘的数  详情 回复 发表于 2020-11-5 16:44
回复

使用道具 举报

52#
发表于 2020-11-5 17:02:57 | 显示全部楼层
wintoflash 发表于 2020-11-5 16:44
加--mem除了浪费时间没有其他用处。这个参数一般网启才用。
就算你想设计Windows下的驱动挂载map出来的 ...

        map --mem可以规避在grub4dos下面需要pe.iso连续存放的问题,而且map --mem要比直接map稳定些,pe.iso所在的优盘可以拔除,时间长了就习惯用这个参数了,grub2下面直接map pe.iso对于碎片是否有要求?

点评

没有任何要求。 如果没有碎片(或者碎片满足一些要求),可以用 --blocklist 参数加速虚拟盘的读取。(一般没必要) 你这是闲得无聊吧,退出grub2/grub4dos的瞬间拔u盘,不怕坏了?如果u盘读取不靠谱,建议换u  详情 回复 发表于 2020-11-5 17:46
回复

使用道具 举报

53#
发表于 2020-11-5 18:35:10 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-11-5 18:40 编辑
wintoflash 发表于 2020-11-5 17:46
没有任何要求。
如果没有碎片(或者碎片满足一些要求),可以用 --blocklist 参数加速虚拟盘的读取。 ...

不是退出grub2/grub4dos的瞬间拔u盘啊,不是想在grub2启动 iso 之后,windows 转圈之前的那几秒之间拔掉 U 盘(拔掉的时候也很少,只是有这个可能),是启动PE之后可以拔掉优盘啊,如果直接map,启动PE之后可能还会有读写优盘的动作吧,直接拔掉有蓝屏的可能(因为有些PE的外置是放在wim之外,iso以内),在BIOS启动的grub4dos里面,map --mem感觉上来说要比直接map真的稳定可靠些(规避碎片文件是其中的一个方面),然后这些习惯一直沿袭下来了,我以为grub2_UEFI也是这样子呢。
看了你的解释,看样子要颠覆我的观念了!我真不知道或者没有注意到在哪里发帖推荐过直接map。

点评

如果外置,uefi启动的情况下无论如何都不能拔掉u盘。你没有搞清楚一件事:虚拟盘在windows转圈停止之后就不存在了。无论外置不外置,Windows当然都不能从本就不存在的所谓内存盘读数据。  详情 回复 发表于 2020-11-5 18:47
回复

使用道具 举报

54#
发表于 2020-11-6 10:07:18 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-11-6 11:33 编辑
wintoflash 发表于 2020-11-5 16:44
加--mem除了浪费时间没有其他用处。这个参数一般网启才用。
就算你想设计Windows下的驱动挂载map出来的 ...

grub2_UEFI_map与map --mem启动PE速度测试
选取了几个不同大小的PE,对grub2_UEFI启动PE.ISO(均为全内置版本PE)采用直接map和map --mem启动速度进行了测试。
测试环境:为了便于截图和录像,在vmware虚拟机中进行测试,引导器为grub2_uefi_20201105版本,pe.iso存放的介质为虚拟机机械硬盘。从grub2选择启动菜单开始计时,到见到PE桌面停止计时。下面的gif,可以下载到本地,用7gif查看,ctrl+↑加快播放速度,ctrl+↓减慢播放速度。
1、WePE_64_V2.1_beta.iso,199MB

直接map,耗时2:05秒。



map --mem,耗时2:02秒。



2、SXWIN10PEX64_17763_NET20200902.iso,438MB
直接map,启动后发生蓝屏一次;



再次重启测试,耗时4:10秒。



map --mem,耗时2:29秒。



3、Win10PE_17763.107x64net.iso,699MB
直接map,耗时5:01秒。



map --mem,耗时3:08秒。



我的结论:
1、对于体积较小的200MB的微PE,直接map pe.iso和map --mem pe.iso速度相差不大,对于体积稍大的PE,map --mem pe.iso要比map pe.iso启动速度快。一般的PE体积都会超过200MB,大概500MB-1GB左右。
测试是在机械硬盘上进行的,在普通优盘上启动速度应该要比机械硬盘更慢,启动速度差距估计稍大。我觉得还是map --mem pe.iso更好。
2、内存足够的前提下,map --mem pe.iso要比map pe.iso启动更加稳定。直接map在机械硬盘上蓝屏了一次。
3、grub2_UEFI感觉读盘的速度有一定的提升空间,而且读盘瞬时速度显示似乎有点不符合实际,前期有时候显示4TiB/s、13GiB/S,后期读盘速度在机械硬盘上只有68MB/S~2MB/S左右,这个速度感觉不符合实际。



哦,刚才又在实体机上面用优盘测试了几次,用手机秒表卡表,启动速度大概34-46秒的样子,与虚拟机启动速度差别太大了!而且感觉map --mem pe.iso与map pe.iso启动同一个PE启动速度相差无几!大概2秒的样子!
看样子虚拟机不能代替实体机作为速度测试的依据,相差太大了!原因不明。





点评

不管带不带 --mem,始终都是读一次到内存,区别只是前者先读再从内存启动,后者边启动边读。整体效率应该是差不多的。 按wintoflash说的,他的map只要是本地的就可以map,不需要 --mem 而g4d的map是要求连续存放  详情 回复 发表于 2020-11-6 18:22
回复

使用道具 举报

55#
发表于 2020-11-6 22:02:16 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-11-6 22:10 编辑
2011yaya2007777 发表于 2020-11-6 16:33
在虚拟机里,加与不加 --mem 耗时应当差不多,因为两者都是在内存里。在实机上,如果程序把自己都加载到内 ...

不对啊,虚拟机里面,直接map我测试的慢很多。
实体机里面,直接map和map --mem基本上没差别,只有2秒不到的差别!(测试的是全内置版PE.ISO)
回复

使用道具 举报

56#
发表于 2020-11-6 22:03:33 | 显示全部楼层
hilsonma 发表于 2020-11-6 18:22
不管带不带 --mem,始终都是读一次到内存,区别只是前者先读再从内存启动,后者边启动边读。整体效率应该 ...
由于U盘读盘比硬盘慢,所以我只有在第一次接触的电脑上启动U盘上的pe,经我手维护的电脑,我都放一份pe镜像在硬盘上作为备用系统以便维护。只有发生主引导故障才需要从U盘启动,引导硬盘上的pe。
在这一点上,你跟我的用法完全一样。我都是尽可能抛弃USB启动。

点评

我和你相反,USB是我的爱好(由此发散至USB启动、BIOS/UEFI中USB启动代码...等知识点),而U盘收藏了一大堆,把玩。  详情 回复 发表于 2020-11-6 22:36
回复

使用道具 举报

57#
发表于 2020-11-6 22:46:14 | 显示全部楼层
wuwuzz 发表于 2020-11-6 22:37
高速U盘的读速度,要超过机械硬盘读速度...

不是高速优盘,是普通的优盘,读写没有机械硬盘快。

点评

平时都是用高速U盘来做,用低速U盘无法忍受、浪费时间。 更典型的例子,如WTG、便携LINUX,用高速U盘是必然。  详情 回复 发表于 2020-11-6 22:50
回复

使用道具 举报

58#
发表于 2020-11-9 10:21:06 | 显示全部楼层
江南一根葱 发表于 2020-11-6 22:54
不加mem也可以拔掉u盘的,毕竟最后都是由bootmgfw.efi载入内存,快慢。这就看grub2和微软启动器那个读盘能 ...

        全内置的PE,一般都是可以拔掉优盘的,外置版本的PE,拔掉优盘可能外置软件找不到,严重的可能会导致蓝屏。我更加喜欢全内置版本的PE。

点评

外置版的,加了mem照样不能拔。。。  详情 回复 发表于 2020-11-9 17:54
回复

使用道具 举报

59#
发表于 2020-11-10 07:55:25 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-11-10 08:14 编辑
江南一根葱 发表于 2020-11-9 17:54
外置版的,加了mem照样不能拔。。。

        外置版的,BIOS启动,如果集成了firadisk这样的驱动,可以拔盘。xppe有集成这样的驱动的,WIN7 8 10PE好像很少见了。

       BIOS下面,管他是否集成了firadisk这样子的驱动,我都是喜欢用map --mem,便于XPPE启动找到外置,还规避文件碎片问题,启动速度也还可以。

点评

都 UEFI 了,还是忘掉插屁吧。 UEFI也有UEFI的特点。我不建议UEFI用--mem也有我的考虑。 如果map一个兼容Ventoy (https://www.ventoy.net/cn/compatible.html) 的ISO,不论是否用--mem,启动后都是可以找到外  详情 回复 发表于 2020-11-10 18:56
能拔的。。那就不叫外置版了。。。  详情 回复 发表于 2020-11-10 15:15
回复

使用道具 举报

60#
发表于 2020-11-12 07:30:40 | 显示全部楼层
wintoflash 发表于 2020-11-10 18:56
都 UEFI 了,还是忘掉插屁吧。

UEFI也有UEFI的特点。我不建议UEFI用--mem也有我的考虑。
都 UEFI 了,还是忘掉插屁吧。

确实是。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-9 09:00

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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