有阴也有阳 发表于 2015-12-2 20:38:59

GRUB2引导Windows PE等ISO文件的办法

本帖最后由 有阴也有阳 于 2015-12-6 22:06 编辑

         GRUB2不支持GRUB4DOS那样的map操作来引导ISO文件,是长期困扰我的一个问题,在今天之前,我都很

傻地用grub2引导grub4dos然后引导Windows PE……直到我膝盖中了一箭,看到这个帖子。下面好好整理了一下,

希望本文也能帮助你彻底从GRUB4DOS升级换代到GRUB2!

      关于在U盘上安装GRUB2引导器的教程请自行Google,太多这类文章和Wiki了。下面开始GRUB2引导ISO文

件(特别是Windows PE和Windows安装光盘这种)的正题。

      首先下载最新版的Syslinux,解开压缩包,memdisk文件夹下面有一个memdisk文件(没有任何扩展名),把memdisk文件复制到U盘

boot文件夹下(随便你放在哪,这里我是放倒boot这个文件夹下)。

      编辑你U盘GRUB2的配置文件(一般是U盘/grub2/grub.cfg),在启动项那个区域添加以下几行:

menuentry 'Boot Windows 8 PE ISO'{
set root='(hd0,msdos1)'
echo 'Loading Memdisk...'
#insmod memdisk
linux16 /boot/memdisk iso raw
echo 'Loading ISO...'
initrd16 /boot/Win8PE.iso
}

      为了确保从U盘启动运行,也可以用如下的写法:

menuentry 'Boot Windows 8 PE ISO'{
search--set-f/myudisk.txt
echo 'Loading Memdisk...'
#insmod memdisk
linux16 /boot/memdisk iso raw
echo 'Loading ISO...'
initrd16 /boot/Win8PE.iso
}

      (将空白的记事本文件命名为myudisk,形成一个myudisk.txt文件,把myudisk.txt文件复制到启动U盘的根目录,成为启动U盘的路

标文件,search--set-f/myudisk.txt为启动U盘的指路命令——指明文件的路径、指明命令的执行路径......

      search--set-f/myudisk.txt的含义:

      搜索根目录包含myudisk.txt文件的分区并设为root,注意如果多个分区含有myudisk.txt文件,set失去作用。)


       好了,其实关键就是memdisk后面的raw参数!感兴趣的自己看Syslinux的Wiki,我这段代码引导的是U盘boot文件夹下的Win8PE.iso,

请修改成你自己的具体情况。借助memdisk(几十KB的文件),GRUB2就能加载几乎任意的镜像文件(ISO、IMG等)了,相当于是“虚拟光

驱”的作用?不过引导速度比GRUB4DOS稍微慢一点。

      2014-12-22 更新:

      不需要insmod memdisk这一句,因为用的是Syslinux的MEMDISK而不是GRUB2的memdisk模块。当然你也可以直接用GRUB2的memdisk

模块来加载镜像文件。

      2015-02-22 更新:

      为了规范,syslinux的MEMDISK全部大写,以便和GRUB2的memdisk模块区分开来。两者重名了,刚查了一下,GRUB2的memdisk是用

来读取core.img的。和syslinux的MEMDISK完全不同……详见http://wiki.xtronics.com/index.php/Grub2_howto


      这篇文章中提到的“这个帖子”:

      grub2如何才能像grub4dos正确引导iso文件呢?

      直接从menu.lst转换到grub.cfg可以吗?(这种方法我没试过)

      那种引导ubuntu liveCD的方法就不要提了,我知道可以, 我想的是类似虚拟光驱的用法,比较方便。

      解决情况:可行的方法如下 【注意那个“raw”关键字】 :

      #【这就是我想要的效果,不用关心iso里面是什么文件,而是“模拟光驱”,即使它并不是什么iso都可以引导。】

      #memdisk文件来自syslinux

      #给点耐性,等一会,相比grub4dos的方式慢了点。

menuentry ' -- /winpe.iso(memdisk) ' {
insmod memdisk
insmod fat
set root='hd0,msdos1'
linux16 /boot/syslinux/memdisk iso raw
initrd16 /winpe.iso
}


      #grub4dos的方式,在grub2配置中一次写完也可以: 【这不是我想要的方式,但可以。】

menuentry " -- /image/winpe.iso(grub.exe) 2003" --class windows --class os{
linux16 /grub4dos/grub.exe --config-file="map /image/winpe.iso (hd32) || map --mem /image/winpe.iso (hd32); map --hook; chainloader (hd32); rootnoverify (hd32)"
initrd16 /image/winpe.iso
}


      附:memdisk使用方法链接
      http://www.syslinux.org/wiki/index.php/MEMDISK

      Syslinux6.03版的memdisk文已经通过附件上传,方便大家下载。



dos时代菜鸟 发表于 2015-12-5 23:10:23

对于那些 通过 把 pe的iso装入 内存调取的方案,我一直是这样做的:
1、把pe改造成 native 模式,做成小iso,装入内存启动,负责进入 native 模式,
这个iso 也可以做成 hd影像,iso中有grub4dos负责引导iso中的bootmgr,因为memdisk比较认g4d的引导,而其他的甚至 bootmgr 都不好说,当然,如果用 g4d 启动的这个小iso ,就可以在map之后直接 chainloader 这个iso中的bootmgr而不用在走一次iso中的g4d。
2、把pe的主要 wim 文件放在硬盘某处,让进入 native的pe装载,并进入图形界面。

这样节省内存占用,启动也快一些。而且,不用修改本地 bcd.

邪恶海盗 发表于 2015-12-2 23:41:30

**,纯围观...

boy6585948 发表于 2015-12-3 11:31:58

这个比较给力啊啊,在UEFI和legacy Bios下都测试过了么???

lbw2007 发表于 2015-12-3 11:58:59

感谢分享。当年也长期受到无法map的困扰,放弃grub2之后就不关心了。希望以后能发展成grub2的合盘。

还有我这边不挂VPN上不了wiki,难道大家上维基都用代理或者破解版浏览器?
页: [1]
查看完整版本: GRUB2引导Windows PE等ISO文件的办法