无忧启动论坛

 找回密码
 注册
搜索
最纯净的「微PE装机优盘」UEPON大师作品系统gho:最纯净好用系统下载站广告联系 QQ:184822951 微信:wuyouceo
查看: 4954|回复: 278

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

    [复制链接]
发表于 2019-11-3 09:27:39 | 显示全部楼层 |阅读模式
本帖最后由 wintoflash 于 2019-12-10 10:26 编辑

本帖内容不再更新,项目中止。愿意接手的可以到GitHub发PR和issue。
-----------------------------------------------------------------------

grub2   下载:https://github.com/a1ive/grub/releases/tag/latest
使用方法:
  1. map [--pause] [--mem] [--type=CD|HD|FD] [--disk] FILE
  2.     -m, --mem  加载到内存
  3.     -p, --pause  启动前暂停以查看调试信息
  4.     -d, --disk  将磁盘当作文件加载
  5.     -t, --type  指定虚拟盘类型
  6.          --type=CD  指定为光盘,块大小为2048
  7.          --type=HD  指定为硬盘,块大小为512
  8.          --type=FD  指定为软盘,块大小为512
  9.     -w, --rw  启用虚拟盘写入支持 (仅适用于内存盘,且光盘不支持写入)
  10.     -n, --nb  加载虚拟盘后不立即启动
复制代码

示例:

  1. #未指定虚拟盘类型时,如果文件扩展名为ISO,则为光盘,否则为硬盘。
  2. map /winpe.iso
  3. #加载到内存  如果是网启,请使用此参数
  4. map --mem --type=CD /wepe_64.iso
  5. #加载VHD文件,支持动态VHD,使用--disk参数时,默认类型为硬盘
  6. vhd vhd0 /test.vhd
  7. map --disk --type=HD vhd0
复制代码

深度录屏_选择区域_20191103084431.gif
示例定制命令:
  1. grub-mkimage -d x86_64-efi -p /boot/grub -o grubx64.efi -O x86_64-efi acpi affs afs all_video bfs bitmap bitmap_scale blocklist boot bsd btrfs cat chain cmp commandline configfile cpio crc date datehook dd disk dm_nv echo efi_gop efi_uga efifwsetup efiload eval exfat expr ext2 extcmd f2fs fat fb file font fshelp getenv getkey gfxmenu gfxterm gfxterm_background gfxterm_menu gptsync gzio halt hashsum help hexdump hfs hfsplus iso9660 jfs jpeg keystatus legacycfg linux linuxefi loadbios loadenv loopback ls lsacpi lua lvm lzopio mdraid09 mdraid09_be memdisk minicmd multiboot multiboot2 newc normal ntfs part_apple part_bsd part_gpt part_msdos partnew parttool png probe progress raid5rec raid6rec random read reboot regexp reiserfs sbpolicy search setenv shell sleep squash4 syslinuxcfg tar terminal terminfo test tga time true udf vhd video video_colors video_fb videoinfo wimboot xfs xnu xzio zfs map
复制代码

附注:
  1. 只有内存盘才能可写挂载。
  2. 硬盘镜像支持MBR分区表和GPT分区表。
  3. map的相关代码不只在map.mod中,只复制这个模块到其他版本的grub中是无效的。
鸣谢:
参考了以下项目的代码,感谢相关作者的开源。
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=414814
http://www.lab-z.com/stu132rd
https://gitlab.com/Jay_Repos/grub2eh/tree/wip
https://github.com/tianocore/edk2
https://sourceforge.net/projects/gnu-efi
https://github.com/ipxe/wimboot
源码:
https://github.com/a1ive/grub
许可协议:GPL v3

评分

参与人数 24无忧币 +125 收起 理由
dido0379 + 5 好东西终于出来了。
2011yaya2007777 + 5 很给力!
826773297 + 5 赞一个!
longhai2018 + 5 很给力!
adef + 5
ht1021873332 + 5 很给力!
879792799 + 5 赞一个!
liaonf + 5 很给力!
bardlet + 5 神马都是浮云
wuxin9712 + 5 很给力!
lhb9900 + 5 很给力!
dian + 5 很给力!
282198284 + 5 建议和原作者一样,加一个外置配置文件
zhangmi + 5 很给力!
jxdeng2017 + 5 里程碑!很给力!
liuzhaoyzz + 10 很给力!
纯脆entropy + 5 很给力!
freesoft00 + 5
hilsonma + 5 很给力!
sghihor + 5
ddsony + 5 很给力!
ksafei + 5 赞一个!
jdcgzb + 5 很给力!
yynq + 5 很给力!

查看全部评分

 楼主| 发表于 2019-11-5 17:10:54 | 显示全部楼层
****更新****
新增--disk参数,支持仿真loopback虚拟盘,动态VHD等。
例:挂载动态VHD文件并仿真启动 (需要vhd模块)
  1. vhd vhd0 /test.vhd
  2. map --disk --type=HD vhd0
复制代码

例:挂载ISO为loopback盘并仿真启动
  1. loopback loop /abcd.iso
  2. map --disk --type=CD loop
复制代码
(1楼附件已更新,请不要再使用上一版的文件,防止不兼容情况)

点评

vhd vhd0 /test.vhd map --disk --type=HD vhd0 能否map --mem --disk --type=HD vhd0这样?能否启动? grub4dos用map --mem启动vhd,需要vhd里面安装firadisk/winvblock/svbus这一类的驱动,因为grub4dos运行  详情 回复 发表于 2019-11-6 10:53
回复

使用道具 举报

发表于 2019-11-3 09:55:39 | 显示全部楼层
回复

使用道具 举报

发表于 2019-11-3 09:56:37 | 显示全部楼层
再顶
回复

使用道具 举报

发表于 2019-11-3 10:04:04 | 显示全部楼层
谢谢分享
回复

使用道具 举报

发表于 2019-11-3 10:29:18 | 显示全部楼层
谢谢分享
回复

使用道具 举报

发表于 2019-11-3 10:44:41 | 显示全部楼层
谢谢,給力
回复

使用道具 举报

发表于 2019-11-3 11:42:03 | 显示全部楼层
GRUB2 功能的又一次创新和突破,感谢分享
回复

使用道具 举报

发表于 2019-11-3 14:27:12 | 显示全部楼层
map /winpe.iso,测试fat32分区中的ISO成功启动。NTFS分区中的ISO失败,是要加什么参数吗

点评

加--pause参数,截图看一下 map --pause /xxx.iso  详情 回复 发表于 2019-11-3 14:32
回复

使用道具 举报

 楼主| 发表于 2019-11-3 14:32:36 | 显示全部楼层
本帖最后由 wintoflash 于 2019-11-3 15:04 编辑
ksafei 发表于 2019-11-3 14:27
map /winpe.iso,测试fat32分区中的ISO成功启动。NTFS分区中的ISO失败,是要加什么参数吗


加--pause参数,截图看一下
map --pause /xxx.iso
我测试是可以的。
1.png
2.png

点评

找到原因了,是我文件路径不完整导致的。原来的变量在iosboot中正常,用map的话路径必须加如(hd1,gpt7)。谢谢!  详情 回复 发表于 2019-11-3 16:22
扇区映射仿真盘能搞出来吗?  详情 回复 发表于 2019-11-3 15:33
回复

使用道具 举报

发表于 2019-11-3 15:33:33 | 显示全部楼层
wintoflash 发表于 2019-11-3 14:32
加--pause参数,截图看一下
map --pause /xxx.iso
我测试是可以的。

扇区映射仿真盘能搞出来吗?

点评

"扇区映射仿真盘"是啥?能详细点不? 把硬盘上几个扇区弄成虚拟盘?  详情 回复 发表于 2019-11-3 15:46
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2019-12-15 04:11

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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