无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 150460|回复: 707

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

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

本项目已停止开发,不再维护。
-----------------------------------------------------------------------

grub2   下载:
https://github.com/a1ive/grub/releases/tag/latest
若下载慢可用 http://gitd.cc/ 下载
使用方法:
  1. map [--pause] [--mem] [--type=CD|HD|FD] FILE
  2.     -m, --mem  加载到内存
  3.     --rt 指定内存盘在操作系统加载后不被释放
  4.     -l, --blocklist 强制转换为 blocklist 格式可写磁盘
  5.     -t, --type  指定虚拟盘类型
  6.          --type=CD  指定为光盘,块大小为2048
  7.          --type=HD  指定为硬盘,块大小为512
  8.          --type=FD  指定为软盘,块大小为512
  9.     -o, --ro  禁用虚拟盘写入支持
  10.     -e, --eltorito=DISK  同时指定挂载 El Torito 镜像的盘符
  11.     -n, --nb  加载虚拟盘后不立即启动
  12.     -g, --no_g4d  不向内存写入 GRUB4DOS map 信息
  13.     -f, --first 使该设备位于磁盘列表的第一位
复制代码

示例:

  1. #未指定虚拟盘类型时,map 会自动判断磁盘类型。
  2. map /winpe.iso
  3. #加载到内存  如果是网启,请使用此参数
  4. map --mem --type=CD /wepe_64.iso
  5. #加载某磁盘/分区为虚拟盘
  6. map --type=HD (hd0)
  7. #加载VHD文件。
  8. map --mem --rt (hd1,4)/ramos.vhd.xz
复制代码

深度录屏_选择区域_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
复制代码

附注:
  硬盘镜像支持MBR分区表和GPT分区表。
鸣谢:
参考了以下项目的代码,感谢相关作者的开源。
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

评分

参与人数 31无忧币 +154 收起 理由
小贝贝 + 5 很给力!
蓝星明月 + 5 很给力!
johnyou + 3 赞一个!
jneny + 5
xman00 + 5 赞一个!
2012kwy + 5 很给力!
jack612 + 1 很给力!
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 很给力!

查看全部评分

发表于 2023-11-24 21:09:34 | 显示全部楼层
感谢分享
回复

使用道具 举报

发表于 2023-11-24 18:13:52 | 显示全部楼层
谢谢
回复

使用道具 举报

发表于 2023-11-24 17:45:45 | 显示全部楼层
谢谢分享
回复

使用道具 举报

发表于 2023-11-24 16:38:53 | 显示全部楼层
初学者前来学习一下,感谢分享
回复

使用道具 举报

发表于 2023-10-6 17:25:58 | 显示全部楼层
学习了!!!!!!!!!!!
回复

使用道具 举报

发表于 2023-9-13 12:57:43 | 显示全部楼层
    用来网启不错,可以支持proxydhcp了,哈哈



回复

使用道具 举报

发表于 2023-8-14 14:36:12 | 显示全部楼层
感谢楼主分享,谢谢!
回复

使用道具 举报

 楼主| 发表于 2023-8-10 14:36:44 | 显示全部楼层
zczc8888 发表于 2023-8-10 11:27
请教下 search -s -f /EFI/Microsoft/Boot/bootmgfw.efi;
chainloader -t /EFI/Microsoft/Boot/bootmgfw. ...

这是你用的主题设置的terminal-box。
https://www.gnu.org/software/gru ... l#Global-Properties
两个思路:要么全屏,要么把大小设为0
回复

使用道具 举报

发表于 2023-8-10 11:27:48 | 显示全部楼层
请教下 search -s -f /EFI/Microsoft/Boot/bootmgfw.efi;
chainloader -t /EFI/Microsoft/Boot/bootmgfw.efi;
这两条命令加载windows系统 时会有先出现一个距屏幕边缘一定距离的黑窗口,然后在到正常的windows 转圈圈的过程,有办法避免这个黑窗口或者减短这个黑窗口时间的办法吗?

点评

这是你用的主题设置的terminal-box。 https://www.gnu.org/software/grub/manual/grub/grub.html#Global-Properties 两个思路:要么全屏,要么把大小设为0  详情 回复 发表于 2023-8-10 14:36
回复

使用道具 举报

发表于 2023-5-14 09:28:17 | 显示全部楼层
回复

使用道具 举报

发表于 2023-5-14 09:21:21 | 显示全部楼层
本帖最后由 dghgw 于 2023-5-14 09:29 编辑
hilsonma 发表于 2019-11-25 15:12
喜欢中文菜单就直接使用中文菜单,不需要特别设置:
menuentry "菜单 1" {
  echo 1

bios下出错是什么问题
回复

使用道具 举报

发表于 2023-5-12 03:18:41 | 显示全部楼层
谢谢分享
回复

使用道具 举报

发表于 2023-5-11 17:24:45 | 显示全部楼层
Grub2 使用chainloader  后 屏幕上 有输出 Booting /ACPI.......什么的信息,这个怎么不让它显示出来?
回复

使用道具 举报

发表于 2023-3-28 23:14:51 | 显示全部楼层
666
回复

使用道具 举报

发表于 2023-3-28 19:31:09 来自手机 | 显示全部楼层
不错谢谢分享
回复

使用道具 举报

发表于 2023-3-6 22:09:55 | 显示全部楼层
加载IMG的菜单怎么写
回复

使用道具 举报

发表于 2022-10-14 16:55:21 | 显示全部楼层
看看在 GRUB2 UEFI 下如何进行磁盘仿真啊
回复

使用道具 举报

发表于 2022-3-16 17:03:48 | 显示全部楼层

iso里面的\grub\loopback.cfg内容如下:
set gfxmode=1024x768,800x600,auto
set gfxpayload=keep
terminal_output gfxterm
loadfont /boot/grub/font.pf2

color_normal=cyan/black
#menu_color_highlight=black/light-gray
menu_color_highlight=yellow/red
menu_color_normal=light-gray/black

menuentry "veket 22.a" {
    linux /vmlinuz pfix=fsck pmedia=cd find_iso=${iso_path}
    initrd /initrd.gz
}
如果加上前面的3行黑体字,保存ISO,然后硬盘里面的菜单\boot\grub2\grub.cfg也用terminal_output gfxterm,好像可以启动,我记不清了。
回复

使用道具 举报

 楼主| 发表于 2022-3-16 17:00:01 | 显示全部楼层
liuzhaoyzz 发表于 2022-3-16 16:44
http://wuyou.net/forum.php?mod=viewthread&tid=420085&extra=page%3D1&page=60
从300楼开始,折腾了 ...
如果修改iso内部的菜单为图形模式,和硬盘的菜单匹配

什么意思 没看懂

点评

iso里面的\grub\loopback.cfg内容如下: set gfxmode=1024x768,800x600,auto set gfxpayload=keep terminal_output gfxterm loadfont /boot/grub/font.pf2 color_normal=cyan/black #menu_color_highlight=b  详情 回复 发表于 2022-3-16 17:03
回复

使用道具 举报

发表于 2022-3-16 16:44:08 来自手机 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2022-3-16 17:11 编辑
wintoflash 发表于 2022-3-16 16:31
为什么?
图形模式下显示不出来东西?那说明linux内核配置有问题。

http://wuyou.net/forum.php?mod=redirect&goto=findpost&ptid=420085&pid=4243486&fromuid=298214
从300楼开始,到355楼,http://wuyou.net/forum.php?mod=r ... &fromuid=298214折腾了好长时间,最后就是改为文本模式,解决了问题。

图形模式也不是不行,如果修改iso内部的菜单为图形模式,和硬盘的菜单匹配,应该也可以的,我好像试过,忘记了。最主要的问题是各种iso经常更新,iso内部的菜单不受我的控制,所以只有我自己改适配iso。

点评

什么意思 没看懂  详情 回复 发表于 2022-3-16 17:00
回复

使用道具 举报

 楼主| 发表于 2022-3-16 16:31:38 | 显示全部楼层
liuzhaoyzz 发表于 2022-3-16 15:45
必须用文本模式,这是因为veket.iso里面默认用的就是文本模式,这一点困扰了我很长的时间,百思不得其解 ...
必须用文本模式,这是因为veket.iso里面默认用的就是文本模式

为什么?
图形模式下显示不出来东西?那说明linux内核配置有问题。

点评

http://wuyou.net/forum.php?mod=viewthread&tid=420085&extra=page%3D1&page=60 从300楼开始,折腾了好长时间,最后就是改为文本模式,解决了问题。  详情 回复 发表于 2022-3-16 16:44
回复

使用道具 举报

发表于 2022-3-16 15:45:33 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2022-3-16 15:48 编辑
wintoflash 发表于 2022-3-16 14:50
仔细一看,你在菜单里面就切换到了文本模式:
menuentry "/linux/veket/v22.a-2022.02.02/veket_22.a.is ...

必须用文本模式,这是因为veket.iso里面默认用的就是文本模式,这一点困扰了我很长的时间,百思不得其解,前面的帖子有讨论。puppy.iso也是类似。iso里面的菜单不受我控制,所以我只有修改硬盘的菜单去适应iso内部的二级菜单。

按照你的提示,我改成如下的菜单,亲测可行:
menuentry "/linux/veket/v22.a-2022.02.02/veket_22.a.iso-loopback.cfg" "/linux/veket/v22.a-2022.02.02/veket_22.a.iso" {
terminal_output console;set lang=en_US
search --no-floppy --set --file $2
export iso_path=$2;loopback -d loop;loopback loop $2
set root=loop
configfile (loop)/boot/grub/loopback.cfg
}

QQ截图20220316154612.png

点评

为什么? 图形模式下显示不出来东西?那说明linux内核配置有问题。  详情 回复 发表于 2022-3-16 16:31
回复

使用道具 举报

 楼主| 发表于 2022-3-16 14:50:14 | 显示全部楼层
liuzhaoyzz 发表于 2022-3-16 10:35
loopback启动菜单最下面一行的提示,因为默认没有加载字库,导致出现乱码现象,这怎么解决?
硬盘里面gr ...

仔细一看,你在菜单里面就切换到了文本模式:
menuentry "/linux/veket/v22.a-2022.02.02/veket_22.a.iso-loopback.cfg" "/linux/veket/v22.a-2022.02.02/veket_22.a.iso" {
terminal_output console
search --no-floppy --set --file $2
export iso_path=$2;loopback -d loop;loopback loop $2
set root=loop
configfile (loop)/boot/grub/loopback.cfg
}
切换到文本模式后,当然没办法显示中文了,与字体无关。
要么保持图形模式,要么把语言设成英文 (set lang=en_US)

点评

必须用文本模式,这是因为veket.iso里面默认用的就是文本模式,这一点困扰了我很长的时间,前面的帖子有讨论。puppy.iso也是类似。iso里面的菜单不受我控制,所以我只有修改硬盘的菜单去适应iso内部的二级菜单。  详情 回复 发表于 2022-3-16 15:45
回复

使用道具 举报

发表于 2022-3-16 12:59:03 | 显示全部楼层
用用看效果如何
回复

使用道具 举报

发表于 2022-3-16 10:35:03 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2022-3-16 10:46 编辑
wintoflash 发表于 2021-11-11 12:40
删掉efifwsetup就行了。
另外示例命令那个不叫编译。

loopback启动菜单最下面一行的提示,因为默认没有加载字库,导致出现乱码现象,这怎么解决?
硬盘里面grub2的菜单/boot/grub.cfg相关内容如下:
set default=1
set fallback=1
set timeout=3
set pager=20
set grub_draw_border=1

#设定菜单字体及背景颜色
set menu_color_normal=white/black
set menu_color_highlight=white/blue

#插入动态模块:保存在$prefix/boot/grub2/i386-pc中
insmod vga
insmod vbe
insmod font
insmod gfxterm
insmod terminal
insmod linux
insmod linux16
insmod iso9660
insmod udf
insmod help
insmod echo
insmod ls
insmod cat
insmod chain
insmod configfile
insmod reboot
insmod halt
insmod gzio
insmod xzio
insmod tar
insmod loopback
insmod part_gpt
insmod regexp
insmod wimboot
insmod ntboot
insmod probe
insmod partnew
insmod test
insmod newc
insmod memdisk
insmod ntldr

set locale_dir=/boot/grub2/locale
set lang=zh_CN
loadfont /boot/grub2/fonts/unicode.pf2
set gfxterm_font=unicode
#set gfxmode=auto,800x600,1024x768
set gfxmode=1024x768,800x600,auto
set gfxpayload=keep
terminal_output gfxterm


menuentry "/linux/veket/v22.a-2022.02.02/veket_22.a.iso-loopback.cfg" "/linux/veket/v22.a-2022.02.02/veket_22.a.iso" {
terminal_output console
search --no-floppy --set --file $2
export iso_path=$2;loopback -d loop;loopback loop $2
set root=loop
configfile (loop)/boot/grub/loopback.cfg
}

上面的主菜单已经加载了字体loadfont /boot/grub2/fonts/unicode.pf2,但是进入loopback启动项之后,会加载iso里面的\grub\loopback.cfg菜单,iso里面的\grub\loopback.cfg内容如下:

loadfont /boot/grub/font.pf2

color_normal=cyan/black
#menu_color_highlight=black/light-gray
menu_color_highlight=yellow/red
menu_color_normal=light-gray/black

menuentry "veket 22.a" {
    linux /vmlinuz pfix=fsck pmedia=cd find_iso=${iso_path}
    initrd /initrd.gz
}

menuentry "veket 22.a - Copy SFS files to RAM" {
    linux /vmlinuz pfix=copy,fsck pmedia=cd find_iso=${iso_path}
    initrd /initrd.gz
}

menuentry "veket 22.a - Don't copy SFS files to RAM" {
    linux /vmlinuz pfix=nocopy,fsck pmedia=cd find_iso=${iso_path}
    initrd /initrd.gz
}

menuentry "veket 22.a - RAM only" {
    linux /vmlinuz pfix=ram,fsck pmedia=cd find_iso=${iso_path}
    initrd /initrd.gz
}

menuentry "veket 22.a - No X" {
    linux /vmlinuz pfix=nox,fsck pmedia=cd find_iso=${iso_path}
    initrd /initrd.gz
}

menuentry "veket 22.a - No KMS (Kernel modesetting)" {
    linux /vmlinuz nomodeset pfix=fsck pmedia=cd find_iso=${iso_path}
    initrd /initrd.gz
}

menuentry "veket 22.a - Ram Disk SHell" {
    linux /vmlinuz pfix=rdsh pmedia=cd find_iso=${iso_path}
    initrd /initrd.gz
}

menuentry "Shutdown" {
        halt
}

menuentry "Reboot" {
        reboot
}


第一行的loadfont /boot/grub/font.pf2,这是个英文字体,不是中文字体,因而显示这个\grub\loopback.cfg菜单二级菜单,左下角会出现乱码现象,如果font.pf2改成unicode.pf2字体,应该可以显示中文。但是问题是iso里面的\grub\loopback.cfg以及他所加载的字体是在iso中,而iso不受我的控制,所以我希望grub2左下角的提示能改成英文字符,而不是用中文字符提示,因为这不是个案,debian,ubuntu之类的可能也存在类似的现象,这个乱码提示虽然不影响启动,但是总觉得不美。

左下角这个提示能否改成英文?是不是需要重新编译grub2?还是有个我不知道的参数可以设置?


左下角乱码现象.png
QQ截图20220316103713.png

点评

仔细一看,你在菜单里面就切换到了文本模式: menuentry "/linux/veket/v22.a-2022.02.02/veket_22.a.iso-loopback.cfg" "/linux/veket/v22.a-2022.02.02/veket_22.a.iso" { terminal_output console search --no  详情 回复 发表于 2022-3-16 14:50
回复

使用道具 举报

发表于 2022-2-10 23:06:16 | 显示全部楼层
Thank you for sharing
回复

使用道具 举报

发表于 2021-12-21 08:15:12 | 显示全部楼层
wintoflash 发表于 2021-11-11 12:40
删掉efifwsetup就行了。
另外示例命令那个不叫编译。

大神有空请看下751楼,http://www.lucky8k.com/forum.php ... d=133372&pid=652600
到758楼http://wuyou.net/forum.php?mod=r ... 8229&fromuid=298214
是怎么回事?高分辨率2880x1800的MAC,找不到/boot/grub/grub.cfg
grubx64.efi是用默认的build.bat生成的。
回复

使用道具 举报

 楼主| 发表于 2021-11-11 12:40:50 | 显示全部楼层
201287zr 发表于 2021-11-10 16:55
为什么按照示例命令编译时,提示efifwsetup模块不存在呢

删掉efifwsetup就行了。
另外示例命令那个不叫编译。

点评

loopback启动菜单最下面一行的提示,因为默认没有加载字库,导致出现乱码现象,这怎么解决?set default=1 set fallback=1 set timeout=3 set pager=20 set grub_draw_border=1 #设定菜单字体及背景颜色 set  详情 回复 发表于 2022-3-16 10:35
大神有空请看下751楼,http://www.lucky8k.com/forum.php?mod=redirect&goto=findpost&ptid=133372&pid=652600 到758楼http://wuyou.net/forum.php?mod=redirect&goto=findpost&ptid=423423&pid=4448229&fromuid=29  详情 回复 发表于 2021-12-21 08:15
回复

使用道具 举报

发表于 2021-11-10 16:55:23 | 显示全部楼层
为什么按照示例命令编译时,提示efifwsetup模块不存在呢

点评

删掉efifwsetup就行了。  详情 回复 发表于 2021-11-11 12:40
回复

使用道具 举报

 楼主| 发表于 2021-9-14 13:58:22 | 显示全部楼层
求道者 发表于 2021-9-14 12:49
传统BIOS下无法使用map命令?

没必要开发。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-3-28 17:59

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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