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

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
}

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

借助MEMDISK(几十KB的文件),GRUB2就能加载几乎任意的镜像文件(ISO、IMG等)了,相当于是「虚拟光驱」的作用?不过引导速度比GRUB4DOS稍微慢一点。

关于PE的话这里多说点,建议去无忧论坛看看,我用无忧论坛的东西做启动维护工具估计都快七八年了!各种启动维护工具的讨论和分享。

嗯,现在我应该可以把U盘的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

Published by

librehat

自由軟體萬歲!

38 thoughts on “GRUB2引导Windows PE等ISO文件的办法”

  1. UEFI 32位上这方法行不通
    linux16 跟 initrd16 都没法执行~~~
    我原本以为能用这个来简单的在山寨平板上安装 Linux

  2. 最近也是想怎么grub2直接启动iso,找了不少资料,这个syslinux的memdisk在发行版安装后都有,我就复制的ubuntu下面的.不过呢,这个有点慢,他要把整个iso文件复制到memdisk.如果iso小,还可等一下,现在的winpe合集都7-800m,加载的非常慢,假如你u盘速度也慢的,那启动iso慢的无语.不知道还有其他高招么

    1. 是的,要整个复制所以很慢……要不就只能加载老的GRUB4DOS然后在那边引导ISO了,比这个要快些。只用GRUB2是没有别的办法的

  3. 同样的情况,我在https://www.kernel.org/pub/linux/utils/boot/syslinux/最新版的下载中没有找到memdisk的binary,都是source。 博主你从哪个文件里找到的?能不能把你的发上来?

    1. 有时候就算发行版用grub引导他也会安装syslinux
      /boot下找找吧
      我记得debian有个叫grub-imageboot的软件包
      你可以apt-get download grub-imageboot后拆开这个包试试

      1. 谢了。我从CentOS里面挖了一个出来结果没用。又根据博主发帖子的时候找当时最新的memdisk好像是5.1,还是不行。我是UEFI环境跑得grub2的x86-64的EFI引导起来的。还有其他解么?

        1. efi下貌似没看到能仿真memdisk的😰
          洗洗睡吧
          grub-efi下根本不能linux16 uefi毕竟不存在16位实模式了

        2. “efi下用C写个磁盘仿真不会比win下写个虚拟磁盘困难”无忧那边说是这么说啦

        3. 应该说是无忧论坛的人日常吹水的内容吧
          根本就没个影的东西
          哪有源码啊😪
          就不知道linux社区那边有没有人动手就是了

  4. “memdisk文件夹下面有一个memdisk文件(没有任何扩展名)”,我没有找到没有扩展名的memdisk,HELP ME?

  5. 既然要linux16 /boot/memdisk iso
    那为毛还要insmod memdisk呢?
    grub的memdisk是个摆设么?

    1. 我才知道GRUB2的memdisk模块好像也能直接加载镜像,不过我没试过加载WinPE能不能行。

      多谢提醒,已经更新文章了……

      P.S. 我已经很久不折腾启动引导程序了

      1. 我只是很奇怪…几乎所有的文章都要insmod memdisk
        但是又都用了Syslinux的memdisk………………….
        grub的memdisk模块怎么用又没人讲……

      2. 从无忧论坛的相关描述来看 memdisk.mod是让grub的配置去内存……
        什么意义?
        这个模块的描述是官方文档没说明
        文章也少的可怜
        不过我找到了一个叫“grub-imageboot”软件包 封包了syslinux的memdisk 路径就是/boot/memdisk debian下是有这个包的 这也算方便了一点吧

          1. grub4dos的维护者说
            “没有用过grub2不太清楚”
            …………..
            这个我实在是无力了…..
            从前面几篇文章来看没必要insmod memdisk
            而且grub2的memdisk.mod并不是让你用来把iso直接塞到内存里的………….
            至于具体功用嘛…
            我反正是挖不出来了

          2. 隔了久 来看这个也是比较微妙memdisk.mod确实是用来加载打包到.img的.mod的(啥用就不知道了)貌似是memdisk
            .mod生成的ramdisk只能给grub2用…….
            然后其实忽然想到这里呢…
            是因为由于某些需求我需要整一个uefi下能用的引导工具…
            于是就想起了我grub2不就是为了这个重构的代码吗?
            但是找了一万年都没找到uefi环境下能用的memdisk…..
            貌似无忧那边讲貌似没人写efi下的memdisk(Syslinux也没有)
            Grub4dos的维护者表示“uefi啥的 忘了吧 我觉得grub4dos挺好的 现在功能也够用 修修补补凑活用吧 实在要用为什么不试试grub2呢?由于uefi对其他操作系统并不友好(secure boot),最后没办法就听微软的吧,微软让你用啥你就用啥,linux还是和旧电脑一起死吧,grub4dos就当陪葬吧”
            legacy bios貌似也要死….我的X86平板就无法从uefi bios切换到legacy bios,然后听说有点软的Surface就已经无法关闭secure boot了…ubuntu这些个给微软交了99$保护费的发行版好像是能运行啦 可是还有一些发行版交不起保护费呢……
            然后pc上的uefi是amd64架构…..但是寨板上有ia32架构的uefi……….
            这导致了如果寨板也锁secure boot的话那么没有编译且签名ia32efi固件的ubuntu x86镜像也是无法启动的 x64镜像由于efi固件是amd64架构的也是无法启动…………
            此时我的内心几乎是崩溃的

          3. 现在说的x64就是amd64吧,一个东西了。如果你指的是ia64那个奇葩架构已经被Intel器坑了啊。x86平台的64位就只有一个:amd64(Intel管它叫intel64,其实是一个东西)。
            引导工具这种东西,那个Coreboot行么?(不过我不知道Coreboot是什么东西)

      3. 常见的桌面平台上的uefi都是64位的嘛
        但是奸诈的微软和英特尔为了移动市场丧心病狂的推出了一堆1gRAM的 x86板上64位系统很明显不明智 但是貌似英特尔又不打算整legacy BIOS(可能和某个OS厂打算用uefi加强其控制力的战略也有关)于是丧心病狂的搞出了32位uefi这种东西……结果就是上面了……
        我真是日了狗了

        1. 那你何必要买1G RAM的板子……我一年多之前买的手机都2G内存了,不敢想象1G内存的平板(而且还是Windows平板)。正好给了你动力折腾……少年,快快破解32位UEFI!

          1. C?饶了我吧,我也就玩过某些脚本语言,其实………….
            买个1G ram的板子是因为我觉得 win8平板这东西搞不好就放着吃灰了 花多了钱可惜 要买就买最便宜的 才288….包邮….(三月京东卖199….)
            事实上这板子也能用……………
            可以撸AVG
            也可以临时用来刷机…..
            只不过可能要买一堆的配件
            然后电池才3000毫安时…..

        2. 订正一下这个黑屁
          好像微软的某个协议说是如果要让x86设备贴上微软认证的标 就必须能关闭secure boot(当然不是出于微软的善意 如果不这么做可能微软会面临一堆反垄断官司和罚款)

  6. 刚才我为了启动iso里面的winpe,居然先chainloader到grub4dos,然后再map iso….惭愧…学习了

  7. 我试了楼主的方法,U盘引导Win8 ISO 提示错误:
    couldn’tfind suitable memory target.
    MEMDISK: No ramdisk image specified!

    我也是刚从 grub4dos 迁移到 grub2,我的 grub.cfg:

    menuentry “Install Windows” {
    insmod memdisk
    set root='(hd0,msdos1)’
    linux16 /Tools/Bootloader/syslinux/memdisk/memdisk iso raw
    initrd16 /Tools/OS/Test.iso
    }

    楼主有没有遇到过?

    1. 没有遇到过这个问题,我用memdisk就引导PE而已,你说的Win8 ISO是Windows 8的完整ISO镜像么?完整的Windows镜像的引导的话,你去syslinux的wiki看看吧,我记得好像新版的Windows引导是有些问题还是什么的来着。
      我这篇文章仅限引导PE~

Comments are closed.