zoukankan      html  css  js  c++  java
  • Grub4dos 硬盘引导 iso 文件

    一、第一次成功
      网上有成功地用grub4dos引导iso文件的案例,我试图引导winpe的iso文件却一直未能成功。
    在虚拟机xp上安装了废客dos工具箱,从安装目录中提取出isogrub.iso文件,放到任意盘的根目录下,在menu.lst文件写入如下命令:

    ============================
    title find and boot isogrub.iso
    fallback 1
    find --set-root /isogrub.iso
    map /isogrub.iso (0xff) || map --mem /isogrub.iso (0xff)
    map --hook
    chainloader (0xff)
    savedefault --wait=2
    ============================
    重启电脑,用grub4dos居然成功引导。并且成功地启动了里面的winpe。于是进真实机上试验,在进入桌面的时候蓝屏。看来原因在于,这个winpe与我的硬件不兼容。
    不过毕竟用grub4dos成功引导了iso文件,这一实事表明了这种方式的可行性。

    二、既然直接引导下载的winpe的iso文件不成功,原因应该是这些iso文件本身不适合于用grub4dos引导。抱着试试看的心态,用grub4dos来引导自带winpe的ghost系统光盘的iso文件。menu.lst中写入的命令是:

    ==============================
    title find and boot winxp.ISO
    fallback 1
    find --set-root /winxp.iso
    map /winxp.iso (0xff) || map --mem /winxp.iso (0xff)
    map --hook
    chainloader (0xff)
    savedefault --wait=2
    ===============================
    居然一次就获得了成功。
    用ghostxp电脑公司版的获得了成功,用雨林木风版的同样的获得了成功。
    并且,这个iso文件并不一定要放在windows分区,放在linux分区下同样的获得了成功。我的linux分区是ext4文件系统。

    三、意外地成功直接引导启动了win7安装光盘的iso文件。
    在menu.lst中写了两段引导菜单:

    ======================================

    title find and boot winxp.ISO
    fallback 1
    find --set-root /winxp.iso
    map /winxp.iso (0xff) || map --mem /winxp.iso (0xff)
    map --hook
    chainloader (0xff)
    savedefault --wait=2


    ttitle installwin7
    find --set-root /7600.16385.090713-1255_x86fre_client_zh-cn_Retail_Ultimate-GRMCULFRER_CN_DVD.iso
    map /7600.16385.090713-1255_x86fre_client_zh-cn_Retail_Ultimate-GRMCULFRER_CN_DVD.iso (0xff) || map --mem /7600.16385.090713-1255_x86fre_client_zh-cn_Retail_Ultimate-GRMCULFRER_CN_DVD.iso (0xff)
    map --hook
    chainloader (0xff)
    savedefault --wait=2

    ==================================================

    第一段是可以直接引导一个xp的ghost光盘镜象的。
    后面这一段意在引导win7的安装光盘镜象,只是误把title写成了ttitle,这样后面的一段与前面的一段就混在了一起了。在启动菜单中点击find and boot winpe.ISO,启动的居然不是那个ghost光盘,而是直接启动了win7的光盘镜象。我把这个错误改正过来,点击installwin7的时候,居然报错。启动不了。晕!看来是误打误撞解决了一个多少高人未能解决的难题。
    不要以为这样就可以安装win7了,这样启动的win7光盘,其实只是启动了win7安装光盘所自带的winpe系统而已。也无法进入这个安装光盘中的sources文件夹,因而仍然无法直接从iso文件中启动安装程序。需要先把win7光盘解压后,然后再在这个winpe下,运行sources下的setup.exe程序。

    另外,通过引导iso文件启动的winpe,一般也不能加载外置程序(这主要是一些winpe没有考虑到用这种方式进行启动),需要先把一些外置程序放在可以访问的windows分区里面。

    grub4dos引导加载iso是一次性的,因而也不可能直接用它引导winxp和win7的安装光盘进行系统安装。前面引导win7安装光盘的成功,其实也不过是引导加载了win7安装光盘中自带的winpe而已。

    还需特别说明一点,这种方式要想引导成功,要求文件在硬盘上必须是连续存放的。

    由于这种方式引导启动的也不过是光盘中自带的pe而已,并且要求文件是连续存放的,所以这样的一种引导并没有实际意义。网上有现成的win7pe的iso文件下载。可以下载来直接引导。另外可以自己制作,用Ultraiso打开win7光盘镜象,只保留bootmgr文件,boot文件夹以及里面的所有文件。保留sources文件夹以及里面的boot.wim文件。其余的全部删除掉。另存为标准iso文件即可。


    四、引导安装ubuntu9.10,把下载的映象文件放在任意盘的根目录上,在menu.lst中写入如下命令:

    title Install ubuntu
    find --set-root /ubuntu-9.10-desktop-amd64.iso
    map    /ubuntu-9.10-desktop-amd64.iso (hd32)
    map --hook
    kernel (hd32)/casper/vmlinuz boot=casper iso-scan/filename=/ubuntu-9.10-desktop-amd64.iso
    initrd (hd32)/casper/initrd.lz
    boot

    不过,这里有一个要点,我这里所用的写法是
    map    /ubuntu-9.10-desktop-amd64.iso (hd32)
    这种写法要求文件在硬盘上是连续存放的。
    采用下面的写法:
    map --mem    /ubuntu-9.10-desktop-amd64.iso (hd32)
    这种写法并不要求文件在硬盘上是连续存放着的,它是把整个的文件读入内存了。这个文件不过700m左右而已,我的内存是1.5G,正常来说,应该能够成功的。但我的实践却是失败的。这有两种可能,一种是内存还不够大。另一种是,并不是因为内存的原因。而是因为这种办法引导启动后,由于不能继续读取文件。所以安装程序不能继续。看来基本上可以确认是第二种原因造成的。

    如何知道文件在硬盘上是连续存放的呢?在grub4dos下输入命令:
    blocklist filename
    比如:
    blocklist /ubuntu-9.10-desktop-amd64.iso
    我的显示的结果是:
    (hd0,8)640+1414752
    这表明只有一个块,如果后面还跟着逗号,比如:
    (hd0,8)640+1414752,1515752+8
    这就是两个块,不是连续存放的。
    我的试验表明,只要文件在硬盘上不是连续存放的,用map而不加--mem参数,是必会失败的。所以这样的一种引导安装ubuntu的办法并不好。


    五、未能成功的可能原因。
    网上找到的资料是这样说的:

    =============================
    倘若引导不成功,通常可能的原因有:

    (1)光盘镜像的CD-ROM文件系统是Joliet CD格式,GRUB4DOS不支持这种格式。你需要通过工具转换一下镜像文件的文件系统格式。
    (2)BIOS中激活了SATA的AHCI模式。GRUB4DOS可能无法兼容AHCI模式,应在BIOS中将SATA模式设置为IDE。
    ==============================

    后来的试验表明了,我把一个不能成功引导的winpe的iso文件,用UltraISO工具转为标准的iso文件,果然成功得以引导。
    最新的grub4dos已经能够兼容AHCI模式了,这在我的机器上得到了证明。所以如果iso文件不能成功引导,问题基本上出在这个iso文件的文件系统格式不为grub4dos支持,用UltraISO把它转为标准的iso文件即可吧。


    另:把menu.lst中写入的命令中的0xff换成hd32也能成功引导,比如:

    title winpeboot.iso
    #fallback 1
    find --set-root /winpeboot.iso
    map --mem /winpeboot.iso (hd32)
    map --hook
    chainloader (hd32)
    savedefault --wait=2


    最后特别说明一点,由于可以轻松实现用grub4dos引导iso文件的winpe,使得在linux下硬盘引导安装windows变得毫无障碍。


    ps:由于要实现文件在硬盘上是连续存放的有较大的难度。所以不得不把文件完全地读入内存,这就要求如果内存不是很大的话,用来引导的iso文件也不能很大。

  • 相关阅读:
    NFC技术:让Android自动打开网页
    NFC技术:让Android自动运行程序
    NFC技术:概述
    路由器端口映射实现外网访问本地服务器
    Java之MySql数据库链接
    最短路径之Dijkstra算法及实例分析
    各种排序算法的时间性能比较
    C#实现基于ffmpeg加虹软的人脸识别
    虹软SDK在nodejs中的集成
    Android 虹软2.0人脸识别,注册失败问题 分析synchronized的作用
  • 原文地址:https://www.cnblogs.com/endsock/p/2531463.html
Copyright © 2011-2022 走看看