无忧启动论坛

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

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

    [复制链接]
1#
发表于 2019-11-5 17:41:07 | 显示全部楼层

点评

这是动态VHD?还是没有分区表的VHD?  详情 回复 发表于 2019-11-5 17:44
回复

使用道具 举报

2#
发表于 2019-11-5 17:52:39 | 显示全部楼层
本帖最后由 hilsonma 于 2019-11-5 17:59 编辑
wintoflash 发表于 2019-11-5 17:44
这是动态VHD?还是没有分区表的VHD?


不是动态vhd。

刚看你更新了模块,下来试了,连iso都出错了,之前是可以启动的。

前两天下载的
grub-mkimage -O x86_64-efi -p /efi/grub -o bootx64.efi part_msdos part_gpt fat exfat ntfs ext2 normal chain configfile probe regexp test search wimboot halt reboot help linux map
可以启动iso
刚才更新后不能启动了,要用回你的全部模块才可以,不知道我上面的少了哪个模块。

点评

加上blocklist模块就可以了。应该是启动iso需要blocklist和map这两个模块。原先只需要map一个模块。  详情 回复 发表于 2019-11-6 05:12
前两天的都要删干净。用我新上传的grubx64.efi,也不要用老版本的grub2 chainload新的efi。  详情 回复 发表于 2019-11-5 18:03
回复

使用道具 举报

3#
发表于 2019-11-6 05:12:08 | 显示全部楼层
hilsonma 发表于 2019-11-5 17:52
不是动态vhd。

刚看你更新了模块,下来试了,连iso都出错了,之前是可以启动的。

加上blocklist模块就可以了。应该是启动iso需要blocklist和map这两个模块。原先只需要map一个模块。
回复

使用道具 举报

4#
发表于 2019-11-10 15:24:56 | 显示全部楼层
本帖最后由 hilsonma 于 2019-11-10 15:27 编辑
wintoflash 发表于 2019-11-10 11:32
这个不太可能吧。grub4dos也不支持吧。
我的这个动态vhd支持是抄的vboot的开源部分,vboot是抄的Virtual ...


g4d是支持vhdx的,我试过。只是不知道是不是通过map支持的,因为我用的是外部命令siso

点评

ntboot siso run模块之类用的是bootmgr启的vhd  详情 回复 发表于 2019-11-10 15:29
回复

使用道具 举报

5#
发表于 2019-11-10 15:57:01 | 显示全部楼层
江南一根葱 发表于 2019-11-10 15:29
ntboot siso run模块之类用的是bootmgr启的vhd

那它们也要内置bootmgr和bcd呀,如果有人能把xorboot那套内置方法搞出来当成grub2外部程序用那也相当于grub2支持这类启动了。
那怕是外置的bootmgfw.efi和bcd也行,象wimboot那样,总之能通用启动就行,不需要每个vhdx各配一套efi+bcd就是成功了。
回复

使用道具 举报

6#
发表于 2019-11-21 14:20:59 | 显示全部楼层
chenall 发表于 2019-11-20 14:42
借楼问一下GRUB2有没有比较好的学习教程.有时间我也想来学习下grub2

官网只是简单的介绍,有好多命令我看 ...

我是看了这篇,然后就慢慢上手了。
http://www.jinbuguo.com/linux/grub.cfg.html

时不时也参考一下官方文档。
http://www.gnu.org/software/grub/manual/grub/grub.html

有时还需要网上搜索补充学习,如正则表达式。

点评

谢谢  发表于 2019-11-21 17:24
回复

使用道具 举报

7#
发表于 2019-11-25 15:12:12 | 显示全部楼层
本帖最后由 hilsonma 于 2019-11-25 15:20 编辑
ggmm888 发表于 2019-11-24 22:16
grub.cfg 菜单喜欢显示中文

喜欢中文菜单就直接使用中文菜单,不需要特别设置:
menuentry "菜单 1" {
  echo 1
}
menuentry "菜单 2" {
  echo 2
}
只是在虚拟机下有可能中文显示不全,实机一般都能显示的。

另外,这条菜单是bios平台下用的
menuentry "启动ISO文件" {
search --file /neyan/grub/memdisk --set=root
linux16  /neyan/grub/memdisk  iso
initrd16 /rdtobot/DG.iso
}
uefi平台下:
menuentry "启动ISO文件" "/rdtobot/DG.iso" {
        search -s -f $2
        map $2
        boot
}
但你这个DG.iso应该是不能在uefi平台下启动的,必须是支持uefi启动的iso文件才可以用上面这条菜单启动。
把/rdtobot/DG.iso 替换为你要启动的支持uefi的iso文件。
支持uefi的iso文件一般都有\efi\boot\bootx64.efi这样的文件,也可能是efi.img这样的文件。

回复

使用道具 举报

8#
发表于 2019-11-30 22:37:34 | 显示全部楼层
ggmm888 发表于 2019-11-25 16:13
我是在虚拟机中测试的,虚拟机中中文是??号,实机无条件测试。
多谢了

关于中文显示请参考http://bbs.wuyou.net/forum.php?m ... &fromuid=586362
回复

使用道具 举报

9#
发表于 2020-11-6 18:22:56 | 显示全部楼层
本帖最后由 hilsonma 于 2020-11-6 18:26 编辑
liuzhaoyzz 发表于 2020-11-6 10:07
grub2_UEFI_map与map --mem启动PE速度测试
选取了几个不同大小的PE,对grub2_UEFI启动PE.ISO(均为全内 ...

不管带不带 --mem,始终都是读一次到内存,区别只是前者先读再从内存启动,后者边启动边读。整体效率应该是差不多的。

按wintoflash说的,他的map只要是本地的就可以map,不需要 --mem
而g4d的map是要求连续存放的,不是连续存放的就要带 --mem

由于U盘读盘比硬盘慢,所以我只有在第一次接触的电脑上启动U盘上的pe,经我手维护的电脑,我都放一份pe镜像在硬盘上作为备用系统以便维护。只有发生主引导故障才需要从U盘启动,引导硬盘上的pe。

点评

如果启动的是winpe,不带--mem,bootmgfw.efi会要求一块内存,把wim读到内存。 如果带--mem,grub2先要求一块内存,把winpe iso加载到内存。然后 bootmgfw 还是会要求一块内存,把wim读到内存。 所以 --mem 是要占  详情 回复 发表于 2020-11-6 22:50
读速度,很多高速U盘,要远超机械硬盘...  详情 回复 发表于 2020-11-6 22:37
在这一点上,你跟我的用法完全一样。我都是尽可能抛弃USB启动。  详情 回复 发表于 2020-11-6 22:03
回复

使用道具 举报

10#
发表于 2020-11-20 09:39:48 | 显示全部楼层
i386-pc 下的map 怎么使用?是不是跟一楼不一样的?我不管是用一楼的用法还是用help里的用法都不成功。

点评

i386-pc 下的 map 和 efi 下的完全不一样,不支持磁盘仿真。 map 实际上是 drivemap,用于交换或屏蔽磁盘。 想启动 ISO/IMG 请用 memdisk/grub4dos,以下菜单仅供参考,不保证正确。  详情 回复 发表于 2020-11-20 09:53
回复

使用道具 举报

11#
发表于 2020-11-20 10:07:26 | 显示全部楼层
wintoflash 发表于 2020-11-20 09:53
i386-pc 下的 map 和 efi 下的完全不一样,不支持磁盘仿真。
map 实际上是 drivemap,用于交换或屏蔽磁 ...

谢谢。现在明白了。原来是我误解了,以为 i386-pc 下的map 你也照g4d改造了。

点评

有点难,Legacy BIOS下的东西开发难度很大,这也就是厂商去搞 UEFI 的一部分原因。如果只支持map无文件碎片的镜像,那难度低一些。如果能像efi那样随便map,那太难了。  详情 回复 发表于 2020-11-20 10:25
回复

使用道具 举报

12#
发表于 2020-11-20 10:38:19 | 显示全部楼层
wintoflash 发表于 2020-11-20 10:25
有点难,Legacy BIOS下的东西开发难度很大,这也就是厂商去搞 UEFI 的一部分原因。如果只支持map无文件碎 ...

没事,我只是以为你做了所以试一下而已,没做就不必要做了,正在淘汰中的东东。而g4d也已经做得很好了。
回复

使用道具 举报

13#
发表于 2020-11-29 08:06:40 | 显示全部楼层
本帖最后由 hilsonma 于 2020-11-29 08:14 编辑
wuwuzz 发表于 2020-11-28 20:54
为什么这么痴迷于光驱引导? 因为我手上的U盘固件已经能够支持多光驱,
但其潜力能否充分发挥,取决于UEFI下win PE能否按正确光驱顺序引导。
替代MS boot*光盘引导的grub2 map -f、g4e最近版(应该是与vt同源)在
AMI UEFI上取得了满意的效果。只是回溯Insyde UEFI时,map卡壳。

使用ntboot/wimboot直接引导wim镜像是不是就不用纠结光驱问题了

点评

玩量产的一般不玩这个 不过如果有维护dell的老服务器,只能玩量产,不量产装系统会纠结死  详情 回复 发表于 2020-11-29 10:11
回复

使用道具 举报

14#
发表于 2020-11-29 10:29:20 | 显示全部楼层
江南一根葱 发表于 2020-11-29 10:11
玩量产的一般不玩这个
不过如果有维护dell的老服务器,只能玩量产,不量产装系统会纠结死,对了,还有水 ...

哦。我没有接触过这些机器,所以没有用过量产,没有这种需求。
一直在疑问为什么还要将wim放进iso,现在才明白应用场景。

点评

我估计是最早把grubfm.iso量产到u盘用的,虽然那时候功能还太弱。 ventoy和grubfm如果都能这样用,也是不错的应用方式了  详情 回复 发表于 2020-11-29 10:34
回复

使用道具 举报

15#
发表于 2020-12-29 10:31:13 | 显示全部楼层
本帖最后由 hilsonma 于 2020-12-29 10:42 编辑
liuzhaoyzz 发表于 2020-12-29 08:15
map -n --mem --rt (hd0,msdos2)/ramos.vhd
ntboot --win -e (vd0,1)/efi/boot/bootx64.efi --winload=\ ...

vhd 不是可以修改的吗?

我的建议是修改vhd来符合一般的引导,而不是修改ntboot,当然,修改ntboot也可以,但前提是不影响启动效率。

所以我建议:
ntboot 引导的如果是win分区,就默认bootmgfw.efi为win分区的 \Windows\Boot\EFI\bootmgfw.efi ,winload.efi 为win分区的 \Windows\System32\Boot\winload.efi
这样,正常的win启动只需 ntboot (vd0,1)

如果win分区没有以上默认路径文件的,就在win分区放入以上路径文件

如果有多个win分区,用户通过在不同分区放置唯一的识别文件来指定启动
如:
第一个win分区根目录放识别文件 win001
search -n -s -f /win001
ntboot ($root)

第二个win分区根目录放识别文件 win002
search -n -s -f /win002
ntboot ($root)


--------------------
就好象有些win7原本缺少uefi支持的,不能期望ntboot来添加支持,而是在这些win7中添加uefi支持 (放入 \Windows\System32\Boot\winload.efi 等相关文件)。
回复

使用道具 举报

16#
发表于 2020-12-29 18:33:04 | 显示全部楼层
本帖最后由 hilsonma 于 2020-12-29 18:42 编辑
liuzhaoyzz 发表于 2020-12-29 11:03
我的电脑,只有一个1GB的FAT32启动分区,其他全部都是vhd,就没有\Windows目录,只有\EFI\Microsoft\Boot ...

你的电脑没有 \Windows 目录,那更简单了
你map了某个vhd后,就只有 (vd0) 的某个分区上有 \Windows ,不需要标志文件
这样只要
search -n -s -f \Windows\Boot\EFI\bootmgfw.efi
ntboot ($root)

就只会引导 (vd0)上有 \Windows\Boot\EFI\bootmgfw.efi 的分区
bootmgfw.efi 使用该分区上的 \Windows\Boot\EFI\bootmgfw.efi
winload.efi 使用该分区上的 \Windows\System32\Boot\winload.efi

你要做的只是规范vhd,确保里面有 \Windows\Boot\EFI\bootmgfw.efi 和 \Windows\System32\Boot\winload.efi ,没有就补全。

当然,以上命令要求wintoflash修改ntboot 默认 --efi=\Windows\Boot\EFI\bootmgfw.efi 以及 --winload=\Windows\System32\Boot\winload.efi

点评

不是,我要修改RAMOS批处理,上面只是举个例子,对于别人的电脑,可能有多个windows,对于我的电脑,没有那个关键字。情况不一而论。  详情 回复 发表于 2020-12-29 18:40
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-9 16:27

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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