无忧启动论坛

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

[求助] grub4dos的map虚拟盘,DUET能访问它吗?

[复制链接]
跳转到指定楼层
1#
发表于 昨天 08:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 seekyou2008 于 2025-11-5 09:19 编辑

我想实现下面链接描述的功能:
http://bbs.wuyou.net/forum.php?m ... 7385&extra=page%3D1

现在问题是VHD里的DUET只能访问物理磁盘的ESP,访问不了它自己所在磁盘里的EFI(VHD),我想确认一下grub4dos的map功能能否解决这样的问题。

当前做法就是在U盘或硬盘上另建一个ESP,然后把VHD里的EFI复制过来。这么做能行,也能接受,但是感觉有点遗憾,能不能做得更好一点,让它能访问自己呢?

有大佬试过这么做吗?


说一下我的尝试:
qemu-img convert -f vpc -O raw D:\uniboot.vhd D:\uniboot.img
GRUB2下:
search -f -s /uniboot.img
insmod part_msdos
loopback loop /uniboot.img
set root=(loop,msdos1)
linux /grub.exe
boot
进入grub4dos:
find --set-root /uniboot.img
map --mem /uniboot.img (hd1)
map --hook
kernel /memdisk img
initrd /uniboot.img
boot
好像不行。



2#
发表于 昨天 09:29 | 只看该作者
解决问题的关键是DUET而不是grub4dos。
DUET有两个版本,一个是普通版本,通过自带的usb/nvme等驱动来识别磁盘,这样是不支持虚拟盘的。
另一个是带BlockIoDxe的版本,它使用Legacy BIOS的int13h驱动读取磁盘,支持memdisk/grub4dos的虚拟盘。
你需要自己搜索下载或者编译BlockIoDxe的DUET。

点评

好的,我去找找,感谢大佬提供思路。  详情 回复 发表于 昨天 09:37
回复

使用道具 举报

3#
 楼主| 发表于 昨天 09:37 | 只看该作者
wintoflash 发表于 2025-11-5 09:29
解决问题的关键是DUET而不是grub4dos。
DUET有两个版本,一个是普通版本,通过自带的usb/nvme等驱动来识别 ...

好的,我去找找,感谢大佬提供思路。
回复

使用道具 举报

4#
发表于 昨天 09:42 | 只看该作者
顺便说下,Legacy BIOS版本的grubfm带了一个DUET的ISO。但是我忘了是不是BlockIoDxe的了。

点评

grubfm.iso里有三个文件:fmldr,grubfm.elf,ventoy.dat,是fmldr吗?看大小不对,还是这个loadfm?大佬真是及时雨。  详情 回复 发表于 昨天 10:04
回复

使用道具 举报

5#
发表于 昨天 09:58 | 只看该作者
grub4dos 的 map 是可以用于 DUET 访问 VHD 中 EFI 分区的。
但前提是:必须使用带 BlockIoDxe 的 DUET,并确保虚拟盘正确映射且驱动被加载。

点评

大佬有现成的吗?发一个出来。感谢  详情 回复 发表于 昨天 10:05
回复

使用道具 举报

6#
 楼主| 发表于 昨天 10:04 | 只看该作者
wintoflash 发表于 2025-11-5 09:42
顺便说下,Legacy BIOS版本的grubfm带了一个DUET的ISO。但是我忘了是不是BlockIoDxe的了。

grubfm.iso里有三个文件:fmldr,grubfm.elf,ventoy.dat,是fmldr吗?看大小不对,还是这个loadfm?大佬真是及时雨。

点评

https://github.com/a1ive/grub2-filemanager/blob/master/arch/multiboot/duet64.iso.xz  详情 回复 发表于 昨天 10:23
回复

使用道具 举报

7#
 楼主| 发表于 昨天 10:05 | 只看该作者
a66 发表于 2025-11-5 09:58
grub4dos 的 map 是可以用于 DUET 访问 VHD 中 EFI 分区的。
但前提是:必须使用带 BlockIoDxe 的 DUET, ...

大佬有现成的吗?发一个出来。感谢
回复

使用道具 举报

8#
发表于 昨天 10:23 | 只看该作者
seekyou2008 发表于 2025-11-5 10:04
grubfm.iso里有三个文件:fmldr,grubfm.elf,ventoy.dat,是fmldr吗?看大小不对,还是这个loadfm?大佬 ...

https://github.com/a1ive/grub2-f ... iboot/duet64.iso.xz

点评

大佬,这个解开后里面有个CDBOOT,大小差不多,但是用Qemu启动测试器测试时,进不去,提示IPXE之类的。是不是我操作不对呀?有其它要注意的吗?  详情 回复 发表于 昨天 11:11
谢谢大佬,我前几天还真到你的GITHUB逛了一下,哎,不识宝山呀。  详情 回复 发表于 昨天 10:27
回复

使用道具 举报

9#
 楼主| 发表于 昨天 10:27 | 只看该作者
wintoflash 发表于 2025-11-5 10:23
https://github.com/a1ive/grub2-filemanager/blob/master/arch/multiboot/duet64.iso.xz

谢谢大佬,我前几天还真到你的GITHUB逛了一下,哎,不识宝山呀。

点评

好多年前研究的,记不清是不是BlockIoDxe版本了。  详情 回复 发表于 昨天 10:28
回复

使用道具 举报

10#
发表于 昨天 10:28 | 只看该作者
本帖最后由 wintoflash 于 2025-11-5 10:34 编辑
seekyou2008 发表于 2025-11-5 10:27
谢谢大佬,我前几天还真到你的GITHUB逛了一下,哎,不识宝山呀。

好多年前研究的,记不清是不是BlockIoDxe版本了。
https://github.com/acidanthera/OpenCorePkg/tree/master/Legacy
Default OpenDuet configuration uses UHCI/EHCI and ATA/AHCI drivers and is named boot. Alternative OpenDuet configuration substituting these for BlockIoDxe is named boot-blockio. This alternative configuration can be used on non-Intel chipsets (i.e. nForce) or situations where the storage controller is poorly supported or unsupported (i.e. RAID controllers) and should be placed at the root of the partition with a name of boot.
回复

使用道具 举报

11#
发表于 昨天 10:41 | 只看该作者
感谢大家分享!
回复

使用道具 举报

12#
 楼主| 发表于 昨天 11:11 | 只看该作者
wintoflash 发表于 2025-11-5 10:23
https://github.com/a1ive/grub2-filemanager/blob/master/arch/multiboot/duet64.iso.xz

大佬,这个解开后里面有个CDBOOT,大小差不多,但是用Qemu启动测试器测试时,进不去,提示IPXE之类的。是不是我操作不对呀?有其它要注意的吗?

点评

把iso从xz里面解压出来后直接用memdisk/grub4dos加载就行了啊。 ISO里面是不能提取东西的。  详情 回复 发表于 昨天 11:28
回复

使用道具 举报

13#
发表于 昨天 11:28 | 只看该作者
seekyou2008 发表于 2025-11-5 11:11
大佬,这个解开后里面有个CDBOOT,大小差不多,但是用Qemu启动测试器测试时,进不去,提示IPXE之类的。是 ...

把iso从xz里面解压出来后直接用memdisk/grub4dos加载就行了啊。
ISO里面是不能提取东西的。

点评

find --set-root /uniboot.img map --mem /uniboot.img (hd1) map --hook map --mem /duet64.iso (0xff) map --hook chainloader (0xff) 这样可以规范吗?进去后,比原来多发现几个启动选项,是之前的黑苹果的  详情 回复 发表于 昨天 13:28
回复

使用道具 举报

14#
 楼主| 发表于 昨天 13:28 | 只看该作者
wintoflash 发表于 2025-11-5 11:28
把iso从xz里面解压出来后直接用memdisk/grub4dos加载就行了啊。
ISO里面是不能提取东西的。

find --set-root /uniboot.img
map --mem /uniboot.img (hd1)
map --hook
map --mem /duet64.iso (0xff)
map --hook
chainloader (0xff)
这样可以规范吗?进去后,比原来多发现几个启动选项,是之前的黑苹果的,还是发现不了VHD里的EFI。
回复

使用道具 举报

15#
发表于 昨天 13:31 | 只看该作者
来学习下
回复

使用道具 举报

16#
发表于 昨天 19:39 | 只看该作者
感谢大家分享!
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2025-11-6 20:33

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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