无忧启动论坛

 找回密码
 注册
搜索
最纯净的「微PE装机优盘」UEPON大师作品系统gho:最纯净好用系统下载站数据恢复、数据保护、视频编辑
Win To Go 极致利器(IXUNCIS固态U盘)无忧启动网成立20周年!广告联系 QQ:184822951 微信:wuyouceo
楼主: wintoflash

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

    [复制链接]
 楼主| 发表于 2019-12-21 18:32:54 | 显示全部楼层
本帖最后由 wintoflash 于 2019-12-21 18:42 编辑
liuzhaoyzz 发表于 2019-12-21 18:10
引导文件选择编译出来的grubx64.efi?他会找本地配置文件/boot/grub/grub.cfg,不会找webserver上面的grub ...

首先要编辑 arch\x64\builtin.txt ,在最后添加 efinet http tftp 之类的,加上这些模块。后面我就不清楚了,我不会网启。以前葱也没教会我。


回复

使用道具 举报

发表于 2019-12-21 18:39:53 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2019-12-21 18:52 编辑

能详细说下吗?或者有没有网址或者教程之类的?网上的知识太多,找起来太费劲了。
葱大有没有整理好的教程?
w大说的, arch\x64\builtin.lst ,在最后添加 efinet http tftp 之类的,加上这些模块,是不是修改这个文件之后,定制命令也要相应加入?定制命令这里,路径怎么办?用于pxe-http启动的话,-p /boot/grub2要怎么改?迷茫
看了论坛里面的教程,定制命令pxe似乎和本地定制之后的grubx64.efi文件不能通用?
http://wuyou.net/forum.php?mod=viewthread&tid=411143

grub-mkimage -d x86_64-efi -p /boot/grub2 -c bootconfig.cfg -o grubx64.efi -O x86_64-efi blocklist boot chain configfile disk echo efi_gop efi_uga efiload exfat extcmd fat halt iso9660 ls minicmd normal ntfs part_gpt part_msdos progress reboot sbpolicy search terminal udf map font gfxterm linux linux16 vhd loopback regexp probe wimboot multiboot multiboot2 test help ext2 file

点评

efi下网启我是用ipxe带参数启grub2的 ,Grub2在efi下目前不支持proxydhcp.. 反正grub2下用(http),net_default_server对应http服务器的ip 比如取http://192.168.1.200/grub.cfg net_default_server必须是192.  详情 回复 发表于 2019-12-21 18:55
回复

使用道具 举报

发表于 2019-12-21 18:55:39 | 显示全部楼层
liuzhaoyzz 发表于 2019-12-21 18:39
能详细说下吗?或者有没有网址或者教程之类的?网上的知识太多,找起来太费劲了。
葱大有没有整理好的教程 ...

efi下网启我是用ipxe带参数启grub2的 ,Grub2在efi下目前不支持proxydhcp..
反正grub2下用(http),net_default_server对应http服务器的ip

比如取http://192.168.1.200/grub.cfg

net_default_server必须是192.168.1.200
就可以configfile (http)/grub.cfg取文件。。

就算你是本地启,执行一下net_dhcp,也可以取文件
回复

使用道具 举报

发表于 2019-12-21 19:01:40 | 显示全部楼层
为什么要用ipxe.efi来启动grub2?grub2.efi直接pxe启动,添加http模块不行吗?
为什么要来回倒腾?

点评

如果局域网中有路由,开了dhcp的话grub2就启不来了, ipxe.efi支持proxydhcp啊,然后proxydhcp作为参数 把net_default_server弄成正确的ip地址, 所以和g4d一样来回倒腾一下。  详情 回复 发表于 2019-12-21 19:09
可以。 来回倒腾是因为efi下grub2不支持proxydhcp,而ipxe支持。  详情 回复 发表于 2019-12-21 19:06
回复

使用道具 举报

 楼主| 发表于 2019-12-21 19:06:46 | 显示全部楼层
liuzhaoyzz 发表于 2019-12-21 19:01
为什么要用ipxe.efi来启动grub2?grub2.efi直接pxe启动,添加http模块不行吗?
为什么要来回倒腾?

可以。
来回倒腾是因为efi下grub2不支持proxydhcp,而ipxe支持。
回复

使用道具 举报

发表于 2019-12-21 19:09:22 | 显示全部楼层
liuzhaoyzz 发表于 2019-12-21 19:01
为什么要用ipxe.efi来启动grub2?grub2.efi直接pxe启动,添加http模块不行吗?
为什么要来回倒腾?

如果局域网中有路由,开了dhcp的话grub2就启不来了,
ipxe.efi支持proxydhcp啊,然后proxydhcp作为参数 把net_default_server弄成正确的ip地址,

所以和g4d一样来回倒腾一下。
回复

使用道具 举报

发表于 2019-12-21 19:23:22 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2019-12-21 19:26 编辑

对于tinypxeserver,有路由器dhcp的环境,我感觉开启了proxydhcp,客户端反而获取不到ip地址,跟官网说的反而相反,奇怪得很。

最新版的grub2-release,github好慢啊,只有不到20KB/S,谁能够分享到兰奏云?

点评

github早上下载,10点以前吧,其它点都比较慢,基本上很多都不好下载。  详情 回复 发表于 2019-12-21 20:12
如果是楼主的grub2,这个放进去生成就行了,取tftp上的,grub.cfg的。  详情 回复 发表于 2019-12-21 20:01
回复

使用道具 举报

发表于 2019-12-21 20:01:41 | 显示全部楼层
本帖最后由 江南一根葱 于 2019-12-21 20:12 编辑
liuzhaoyzz 发表于 2019-12-21 19:23
对于tinypxeserver,有路由器dhcp的环境,我感觉开启了proxydhcp,客户端反而获取不到ip地址,跟官网说的反 ...

如果是楼主的grub2,这个放进去生成就行了,取tftp上的,grub.cfg的。
build_netgrub.7z (483 Bytes, 下载次数: 9)

点评

感谢分享!  详情 回复 发表于 2019-12-21 21:51
回复

使用道具 举报

发表于 2019-12-21 20:12:29 | 显示全部楼层
liuzhaoyzz 发表于 2019-12-21 19:23
对于tinypxeserver,有路由器dhcp的环境,我感觉开启了proxydhcp,客户端反而获取不到ip地址,跟官网说的反 ...

github早上下载,10点以前吧,其它点都比较慢,基本上很多都不好下载。

点评

克隆到国内的码云,源代码压缩包下载倒是挺快,可是release版本克隆不下来。  详情 回复 发表于 2019-12-21 21:52
回复

使用道具 举报

发表于 2019-12-21 21:51:33 | 显示全部楼层
江南一根葱 发表于 2019-12-21 20:01
如果是楼主的grub2,这个放进去生成就行了,取tftp上的,grub.cfg的。

感谢分享!
回复

使用道具 举报

发表于 2019-12-21 21:52:32 | 显示全部楼层
freesoft00 发表于 2019-12-21 20:12
github早上下载,10点以前吧,其它点都比较慢,基本上很多都不好下载。

克隆到国内的码云,源代码压缩包下载倒是挺快,可是release版本克隆不下来。一个8MB的zip包,github下载时断时连,要下载半天。好难啊。

点评

码云是自动同步的源码 https://gitee.com/a1ive/grub 但是码云不支持同步releases,好像也不能自动发布releases, 而且最坑的是码云下载releases要登录.国内网站都有这种坏习惯.  详情 回复 发表于 2019-12-21 22:00
回复

使用道具 举报

 楼主| 发表于 2019-12-21 22:00:03 | 显示全部楼层
liuzhaoyzz 发表于 2019-12-21 21:52
克隆到国内的码云,源代码压缩包下载倒是挺快,可是release版本克隆不下来。一个8MB的zip包,github下载 ...

码云是自动同步的源码 https://gitee.com/a1ive/grub
但是码云不支持同步releases,好像也不能自动发布releases,
而且最坑的是码云下载releases要登录.国内网站都有这种坏习惯.

点评

登录下也无所谓啊,下载速度快就好。有请wintoflash大神把码云的下载地址分享到一楼!  详情 回复 发表于 2019-12-21 22:02
回复

使用道具 举报

发表于 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
回复

使用道具 举报

 楼主| 发表于 2019-12-21 22:27:19 | 显示全部楼层
liuzhaoyzz 发表于 2019-12-21 22:02
登录下也无所谓啊,下载速度快就好。码云确实不能同步release,就是这一点不太爽,而且码云不是自动同步 ...

是最新版的,实时同步。以前是手动,后来我用了一些奇技淫巧实现了自动同步。
现在所有的流程都实现了自动化。
每次我向github推送代码,github actions 就会自动把代码推送到码云,并且自动编译。编译好之后会自动发布。
码云好像对这一套不怎么上心,似乎实现不了。
回复

使用道具 举报

发表于 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
回复

使用道具 举报

 楼主| 发表于 2019-12-21 22:39:37 | 显示全部楼层
liuzhaoyzz 发表于 2019-12-21 22:36
码云没有发行版,只有2.04-rc1,2019-04-08 13:30,几秒钟下载了。
github上面release版本,我下载了一晚上 ...

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


回复

使用道具 举报

发表于 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
回复

使用道具 举报

发表于 2019-12-22 21:32:12 | 显示全部楼层
W大又增强W大版grub2的功能,独立完成了如此多的工作,确实要大赞啊。。。
回复

使用道具 举报

发表于 2019-12-25 09:12:43 | 显示全部楼层
本帖最后由 gower 于 2019-12-25 09:22 编辑

最近的1222这个版本的bios模式下显示无法找到“map"命令,不好意思,没注意是UEFI
回复

使用道具 举报

发表于 2019-12-25 19:48:35 | 显示全部楼层
GRUB2又丢了蛮久了,又得重新学习。脑子不够用啊
回复

使用道具 举报

发表于 2019-12-26 09:15:05 | 显示全部楼层
wintoflash 发表于 2019-11-4 18:32
cat /proc/cmdline 看一下。
建议单独开一帖讨论。

grub4dos使用map命令引导后在初始化命令这里无法启动,grub2使用你上面提供的loopback命令成功启动,grub4dos可以使用loopback命令吗

回复

使用道具 举报

发表于 2019-12-26 11:13:21 | 显示全部楼层
wintoflash 发表于 2019-11-4 18:32
cat /proc/cmdline 看一下。
建议单独开一帖讨论。

grub4dos使用map命令引导proteus初始化失败,grub2使用上面提供的loopback命令启动成功,grub4dos可以使用loopback命令引导proteus吗

点评

map之后启动里面的vmlinuz(和initrd),而不是直接启动光盘  详情 回复 发表于 2019-12-27 21:42
回复

使用道具 举报

 楼主| 发表于 2019-12-27 21:42:57 | 显示全部楼层
2090147941 发表于 2019-12-26 11:13
grub4dos使用map命令引导proteus初始化失败,grub2使用上面提供的loopback命令启动成功,grub4dos可以使 ...

map之后启动里面的vmlinuz(和initrd),而不是直接启动光盘
回复

使用道具 举报

发表于 2019-12-30 11:45:31 | 显示全部楼层
刚才看了一下,grub2已经升级到了2.04版了,请问楼主这个是在2.04的基础上强化的吧?

点评

不是  详情 回复 发表于 2019-12-30 12:07
回复

使用道具 举报

 楼主| 发表于 2019-12-30 12:07:49 | 显示全部楼层
hhh333 发表于 2019-12-30 11:45
刚才看了一下,grub2已经升级到了2.04版了,请问楼主这个是在2.04的基础上强化的吧?

不是
回复

使用道具 举报

发表于 2020-1-1 10:14:20 | 显示全部楼层
本帖最后由 lhb9900 于 2020-1-1 10:27 编辑

当第一个ISO光盘里的GRUBFM用MAP启动第二个硬盘里ISO光盘PE时,第二个硬盘里ISO光盘(微软)bootx64.efi始终还是跳到第一个ISO光盘里找菜单来启动,导至始终不能启动第二个光盘的PE,这个怎么解决 , 用map --mem也是一样问题

  if [ 'efi' == $grub_platform -a "$grub_cpu" == "x86_64" ]; then
           menuentry "(64)用map直接启动$grub_file"  --hotkey="${i}" --class iso{
                                   echo (正在后台加载文件,请等待。。)
          map $grub_file
    }
    fi
   
    if [ 'efi' == $grub_platform -a "$grub_cpu" == "i386" ]; then
             menuentry "(32)用map直接启动$grub_file"  --hotkey="${i}" --class iso{
                                   echo (正在后台加载文件,请等待。。)
          map $grub_file
    }
   fi  


用他的 [url]http://bbs.wuyou.net/forum.php?mod=viewthread&tid=414814&extra=page%3D2[/url] 直接闪退
regexp --set=imgboot_file '(/.*)'        "$grub_file"

          if [ 'efi' == $grub_platform -a "$grub_cpu" == "x86_64" ]; then
           menuentry "用imgboot64.efi直接启动${imgboot_file}(CentOS尚不支持)"  --hotkey="${i}" --class iso{
                                   echo (正在后台加载文件,请等待。。)
          chainloader ($root)/Boot/grub/imgboot.efi -dev auto -file ${imgboot_file}
    }
    fi

    if [ 'efi' == $grub_platform -a "$grub_cpu" == "i386" ]; then
               menuentry "用imgboot32.efi直接启动${imgboot_file}(CentOS尚不支持)"  --hotkey="${i}" --class iso{
                                   echo (正在后台加载文件,请等待。。)
          chainloader ($root)/Boot/grub/imgboot32.efi -dev auto -file ${imgboot_file}
    }
   fi

          if [ 'efi' == $grub_platform -a "$grub_cpu" == "x86_64" ]; then
           menuentry "(64)用map直接启动$grub_file"  --hotkey="${i}" --class iso{
                                   echo (正在后台加载文件,请等待。。)
          map $grub_file
    }
    fi

    if [ 'efi' == $grub_platform -a "$grub_cpu" == "i386" ]; then
             menuentry "(32)用map直接启动$grub_file"  --hotkey="${i}" --class iso{
                                   echo (正在后台加载文件,请等待。。)
          map $grub_file
    }
   fi   


相同的环境用下面却能启动

loopback isoloop "$grub_file"
menuentry "[w]用wimboot启动ISO内的WIM文件" --hotkey="w" --class iso{
        echo (正在查找ISO内的WIM启动文件,请等待。。即将在菜单末尾列出WIM启动文件)
for loopwim in (isoloop)/*/*.WIM (isoloop)/*/*.wim; do        
                if ! test -e $loopwim; then continue; fi                        
          if [ 'efi' == $grub_platform -a "$grub_cpu" == "x86_64" ]; then
           menuentry "[6]用wimbootx64启动(EFI)$loopwim"  --hotkey="6" --class wim{
                                                       echo (正在后台加载文件,请等待。。)
     wimboot @:boot.wim:${loopwim} @:bootmgfw.efi:($root)/Boot/cdboot64.efi @:bcd:($root)/Boot/cdbcd @:boot.sdi:($root)/Boot/boot.sdi
    }
    fi   
          if [ 'efi' == $grub_platform -a "$grub_cpu" == "i386" ]; then
          menuentry "[3](EFI)用wimbootx32启动$loopwim" --hotkey="3" --class wim{
                                                      echo (正在后台加载文件,请等待。。)
    wimboot @:boot.wim:${loopwim} @:bootmgfw.efi:($root)/Boot/cdboot32.efi @:bcd:($root)/Boot/cdbcd @:boot.sdi:($root)/Boot/boot.sdi
    }
   fi

                if [ "$grub_platform" = "pc" ]; then
                        menuentry "(BIOS)用wimboot启动$loopwim" --hotkey="b" --class wim{
                                                                    echo (正在后台加载文件,请等待。。)
                                set enable_progress_indicator=1;
                                loopback wimboot ${grub_wimboot};
                                linux16 (wimboot)/wimboot gui;
                                initrd16 newc:bootmgr:(wimboot)/bootmgr \
                                  newc:bootmgr.exe:(wimboot)/bootmgr.exe \
                                        newc:bcd:(wimboot)/bcd \
                                        newc:boot.sdi:(wimboot)/boot.sdi \
                                        newc:boot.wim:$loopwim;
                        }
                fi;
   done
}

点评

187# http://bbs.wuyou.net/forum.php?mod=redirect&goto=findpost&ptid=417233&pid=3905367&fromuid=487838  详情 回复 发表于 2020-1-1 10:28
回复

使用道具 举报

 楼主| 发表于 2020-1-1 10:28:48 | 显示全部楼层
lhb9900 发表于 2020-1-1 10:14
当第一个ISO光盘里的GRUBFM用MAP启动第二个硬盘里ISO光盘PE时,第二个硬盘里ISO光盘(微软)bootx64.efi始终 ...

187#
http://bbs.wuyou.net/forum.php?m ... &fromuid=487838

点评

那真的有点遗憾了  详情 回复 发表于 2020-1-1 10:40
回复

使用道具 举报

发表于 2020-1-1 10:40:19 | 显示全部楼层
wintoflash 发表于 2020-1-1 10:28
187#
http://bbs.wuyou.net/forum.php?mod=redirect&goto=findpost&ptid=417233&pid=3905367&fromuid=48 ...

那真的有点遗憾了
回复

使用道具 举报

发表于 2020-1-1 11:06:45 | 显示全部楼层
膜拜大神,感谢大神完善GRUB2!
回复

使用道具 举报

发表于 2020-1-10 10:46:37 | 显示全部楼层
支持一下!grub2 确实强大
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2020-10-31 00:54

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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