Grub4dos 硬盘引导 iso 文件

简介:

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文件也不能很大。





      本文转自rshare 51CTO博客,原文链接:http://blog.51cto.com/1364952/1978706,如需转载请自行联系原作者



相关文章
|
1月前
|
运维
【运维基础知识】用dos批处理批量替换文件中的某个字符串(本地单元测试通过,部分功能有待优化,欢迎指正)
该脚本用于将C盘test目录下所有以t开头的txt文件中的字符串“123”批量替换为“abc”。通过创建批处理文件并运行,可实现自动化文本替换,适合初学者学习批处理脚本的基础操作与逻辑控制。
149 56
|
3月前
|
Windows
基本的Dos命令 在控制台如何进入某一个文件或者进入不同的盘符
这篇文章介绍了如何在Windows DOS命令行环境中进入不同盘符和文件夹,包括使用Win+R快捷键打开运行窗口、通过输入盘符加冒号(如"D:")切换到指定盘符、使用"cd"命令进入文件夹,以及一些基本的文件操作命令如"dir"查看文件和"del"删除文件等。
基本的Dos命令 在控制台如何进入某一个文件或者进入不同的盘符
|
6月前
|
Linux 索引 关系型数据库
Linux 终端命令之文件目录操作,对比Dos相关命令
Linux 终端命令之文件目录操作,对比Dos相关命令
127 0
Linux 终端命令之文件目录操作,对比Dos相关命令
|
存储 Java 编译器
01-Dos基本指令和编译运行Java文件
Java 是Sun公司于1995年5月推出的语言,与我同岁
121 0
|
编译器 Windows
PE文件学习--Dos头部
PE文件学习--Dos头部
206 0
|
IDE 开发工具 C++
Python命令行解析:IDE内点击Run运行代码直接得出结果、基于TF flags(或argparse、sys.argv)在Dos内命令行(一条命令)调用代码文件得出结果
Python命令行解析:IDE内点击Run运行代码直接得出结果、基于TF flags(或argparse、sys.argv)在Dos内命令行(一条命令)调用代码文件得出结果
|
缓存 网络协议 Windows