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

Comments

38 responses to “GRUB2引导Windows PE等ISO文件的办法”

  1. 进驻 avatar
    进驻

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

    1. 薛定谔的茶几 avatar
      薛定谔的茶几

      不用加16

    2. librehat avatar

      UEFI的话制作启动盘恐怕复杂一些。可以用Fedora的Live Creator做Fedora启动U盘,是UEFI可引导的。

  2. 小菜菜 avatar
    小菜菜

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

    1. librehat avatar

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

  3. 薛定谔的茶几 avatar
    薛定谔的茶几

    博主你这博客的时间是零时区吗:D

    1. librehat avatar

      恩,伦敦、都柏林、里斯本时间

  4. lzp729 avatar
    lzp729

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

    1. 薛定谔的茶几 avatar
      薛定谔的茶几

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

      1. lzp729 avatar
        lzp729

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

        1. 薛定谔的茶几 avatar
          薛定谔的茶几

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

        2. 薛定谔的茶几 avatar
          薛定谔的茶几

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

          1. lzp729 avatar
            lzp729

            可有相关资料?最好能有点source code :-)

        3. 薛定谔的茶几 avatar
          薛定谔的茶几

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

  5. RB258 avatar
    RB258

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

  6. 薛定谔的茶几 avatar
    薛定谔的茶几

    M$ 你怎么还不被拆分啊!

  7. 薛定谔的茶几 avatar
    薛定谔的茶几

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

    1. librehat avatar

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

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

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

      1. 薛定谔的茶几 avatar
        薛定谔的茶几

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

        1. 薛定谔的茶几 avatar
          薛定谔的茶几

          又看了一下文章
          我感觉grub2好low…………
          真的low

      2. 薛定谔的茶几 avatar
        薛定谔的茶几

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

        1. librehat avatar

          确实方便了一点,所以用syslinux的memdisk到底要不要用memdisk模块呢?

          1. 薛定谔的茶几 avatar
            薛定谔的茶几

            那个模块好像是让grub能访问(memdisk)/boot
            这样的设备
            这里提了一点
            http://works.jinbuguo.com/linux/grub.cfg.html
            这个文章的末尾讲了两者的不同 不过我是看得迷迷糊糊的
            http://wiki.xtronics.com/index.php/Grub2_howto
            启动无忧这里有讨论 但是开始指向的帖子已经打不开了
            http://bbs.wuyou.com/forum.php?mod=viewthread&tid=206521

            我是不是该去问问Gub4Dos的维护者呢?

          2. 薛定谔的茶几 avatar
            薛定谔的茶几

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

          3. librehat avatar

            那就不管了吧,反正也没啥影响,GRUB2和GRUB4DOS差别很大的,你还不如发邮件到GRUB2的开发者列表问问看。

          4. 薛定谔的茶几 avatar
            薛定谔的茶几

            隔了久 来看这个也是比较微妙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架构的也是无法启动…………
            此时我的内心几乎是崩溃的

          5. librehat avatar

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

      3. 薛定谔的茶几 avatar
        薛定谔的茶几

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

        1. librehat avatar

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

          1. 薛定谔的茶几 avatar
            薛定谔的茶几

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

          2. librehat avatar

            我的天!两百多块的东西还指望啥,就玩玩好了。咳咳,都散了吧

        2. 薛定谔的茶几 avatar
          薛定谔的茶几

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

  8. h avatar
    h

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

    1. librehat avatar
      librehat

      其实我之前也不会,都是一个慢慢学习的过程嘛

  9. mymbrooks avatar
    mymbrooks

    我试了楼主的方法,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. librehat avatar
      librehat

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

  10. guxen avatar
    guxen

    这么屌?

    1. librehat avatar
      librehat

      屌的点在哪里?