中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » GRUB4DOS、SYSLINUX及其它启动管理软件讨论专区 » 在 GRUB for DOS 下直接读取光盘映象 ISO 中的文件
作者:
标题: 在 GRUB for DOS 下直接读取光盘映象 ISO 中的文件 上一主题 | 下一主题
hnlyzhd
高级用户




积分 544
发帖 164
注册 2004-10-17
状态 离线
『楼 主』:  在 GRUB for DOS 下直接读取光盘映象 ISO 中的文件

在 GRUB for DOS 下直接读取光盘映象 ISO 中的文件

不点 | 14 八月, 2005 17:21

如果你不曾知道的话,这或许是一个极其隐蔽的技巧了。而事实上,所有的技术都是现成的,一点也不神秘。(这篇文章也早就想写,只是没有时间写。)

用一个通常的例子来说明吧。假定你有一张光盘的映象,它是由一个可引导的软盘映象制作出来的可引导光盘的映象,或者像 Mandriva 那样,是用 no-enulation 模式制作出来的可引导光盘映象。大家知道,要通过仿真来直接引导这样的光盘映象,实属困难,没有一个成熟的技术。但是,我们退一步,不求引导它,但求读取其中的文件,这一点是完全可以做到的。

通常我们在得到一个 LINUX 发行版的光盘 ISO 映象之后(假定我们不用它刻录一张真实的光盘的话),需要用操作系统的工具,如 Windows 的 WinImage,以及 Linux 的 mount 命令等,来抽取光盘里面我们所需要的某些个引导文件,如 floppy.img, vmlinuzz, all.rdz 等。需要把它们拷贝出来,放到硬盘,然后才可以引导 Linux 的安装过程。

我们这里介绍的技术,可以略过所有这些复杂的步骤,而是很简单地,达到我们启动安装程序的目的。我们不需要在操作系统之下抽取文件了,因为我们的 GRUB for DOS 本身就可以读取光盘映像中的全部文件!!酷酷!!

我们这里做出一个假定,那就是,硬盘上的光盘映像在物理上是连续存放的。这是因为,我们要用到 GRUB for DOS 的磁盘仿真能力,而 GRUB for DOS 的磁盘仿真,在没有 --mem 参数的情况下,要求被仿真的文件(也就是我们的 ISO),必须在物理扇区上是连续存放的。如果你的内存足够大,比如有 1G 那么大,你就可以使用带有 --mem 参数的磁盘仿真命令,在这种情况下,整个 650M 的 ISO 文件,都放到了内存中,因此,不再要求 ISO 文件的连续性了。考虑到目前绝大多数人没有 1G 内存,所以,我们只好要求 ISO 文件的连续性了。

好了,关子卖完了,该说点实质的了:

map (hdX,Y)/your_distro.iso (hdZ)
map --hook

别骂我哟!其实只要有这两条命令就够了,我刚才叙述得是否太过神秘?别骂,因为如果我不吹一吹,你很可能懒得看下去,也就看不到这里了(你甚至得感谢我吹牛,呵呵)。

对于上述命令,也许那些不熟悉 GRUB 的人会感到某些疑惑,所以,我在这里简单解释一下。

第一条 map 命令,是将你硬盘上的 ISO 文件,仿真为一个原来不存在的硬盘 (hdZ)。比如,假定你的机器原来只有4个硬盘(hd0),(hd1),(hd2),(hd3),现在这个 Z 就可以是 4 了,(hd4) 就是第五个硬盘。

map --hook 的意思是,让这个仿真在 GRUB 环境下立即发生作用,而不是等到敲入 boot 命令之后才起作用。

现在你在 GRUB 下检验一下,是不是可以访问 (hdZ) 中的文件了呢?如果不行,你尽管把吐沫星子喷过来,我认了。

由于 (hdZ) 是 ISO9660 格式的文件系统,而我们的 GRUB 正好可以识别 ISO9660 格式的文件系统,也正是因为这个,所以,我们可以顺利读出 ISO 里面的文件。原理上就是如此简单啊,没有什么需要进一步解释的。

接下来就看你的了!既然 (hdZ) 中有你光盘中的全部内容,你也就不需要拷到硬盘上了,你直接用 kernel 和 initrd 等命令来启动安装,这就完了。如果里面有个软盘映象,需要你再次启动仿真,那对你来说,应当是轻车熟路了,这回用

map --mem (hdZ)/.../floppy.img (fd0)
map --rehook
chainloader (fd0)+1
rootnoverify (fd0)
boot

就可以了,因为软盘不会太大,你的内存应当足够容纳下它了。

需要说明的是,如果你前面的 ISO 是用 --mem 来仿真的,那么这次的软盘也必须用 --mem 来仿真。这是因为,把一个不带 --mem 的磁盘仿真的 BIOS 磁盘号码,定向到真实的内存(而非磁盘介质)中,这是要失败的。

关于如何让一个文件在磁盘上按照物理扇区**连续**存放,本文不再赘述,请参阅其他的文章。不过简单来说,方法有两个,一个是在空的 FAT12/16/32/NTFS 分区中建立的文件,一般就已经是连续的了。另一个方法是使用磁盘碎块整理,也可以把含有多个碎块的文件,变成连续的文件。在 ext2 分区不可能建立超过 1M 大小的连续文件。所以,要建立连续文件,最好是在微软的分区格式中才有保障。

另外,由于 GRUB for DOS 的 NTFS 模块是含有 BUG 的,因此,你的 map (hdX,Y)/your_distro.iso (hdZ) 命令虽然会成功,但在随后的读取时却很有可能碰到失败,并且文件越大,失败率越高(对于 ISO 这样几百兆大小的文件,几乎肯定会失败的)。因此建议,为了确实保证最大限度的安全、最高的成功率,请尽量避免使用 NTFS 文件系统,而应当把 ISO 文件放在 FAT12/FAT16/FAT32 格式的分区里面。(转载时请注明作者:不点,写作时间:2005年8月14日)

   此帖被 +4 点积分        点击查看详情   
评分人:【 429499381 分数: +4  时间:2008-1-4 05:30




    我的留言簿

http://hnlyzhd.ys168.com            我的网络盘
2005-8-17 09:44
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
quanyongji
初级用户




积分 161
发帖 35
注册 2005-2-9
状态 离线
『第 2 楼』:  

好,帮你祈祷精华,
我一般,慢慢看里边的menu,然后自己改一下看看能不能通过。~



CPU AMD 939 3200+
NF4UK8AA
ST380013AS  SATA
KINGMAX DDR400 512*2
x1300xt

win98启动u盘(4g)WINdows2008r2
2005-8-20 20:48
查看资料  发送邮件  发短消息 网志  OICQ (147350674)  编辑帖子  回复  引用回复
liangshenda
新手上路





积分 8
发帖 6
注册 2006-2-4
状态 离线
『第 3 楼』:  

帮你祈祷精华

2006-2-4 14:50
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zla169
新手上路





积分 2
发帖 1
注册 2006-3-8
状态 离线
『第 4 楼』:  

LZ所说的方法还是不行,请问如何引导一个实创光盘工具盘的映像文件呢?

2006-3-13 00:28
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
KOFGOD
新手上路





积分 14
发帖 6
注册 2007-6-27
状态 离线
『第 5 楼』:  

学习来了,但不是很懂哦,希望能更详细一些。最好能有视频教程。

2007-6-27 04:24
查看资料  发短消息 网志   编辑帖子  回复  引用回复
sxtyp
新手上路





积分 12
发帖 7
注册 2006-2-11
状态 离线
『第 6 楼』:  

学习,谢谢.

2007-6-30 15:48
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
get555
新手上路





积分 16
发帖 7
注册 2006-10-6
状态 离线
『第 7 楼』:  

努力理解中。。。

2007-7-9 16:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
tbs198400
初级用户





积分 46
发帖 22
注册 2006-8-6
来自 郑州
状态 离线
『第 8 楼』:  

真是篇好文章

2007-7-12 10:04
查看资料  发送邮件  发短消息 网志  OICQ (277398336)  编辑帖子  回复  引用回复
429499381
中级用户





积分 452
发帖 202
注册 2006-12-21
状态 离线
『第 9 楼』:  

谢谢你的 提示!! 我的 成功了 !!  

不 过跟你说的 有 一 点 点 不同
  title linux 9.0
map (hd0,6)/ISO/Linux/Rat9/linux1.iso (hd32)
map --hook
kernel (hd32)/isolinux/vmlinuz
initrd (hd32)/isolinux/initrd.img ramdisk_size=8192
map --rehook
rootnoverify (hd32)
boot

2008-1-4 05:30
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
429499381
中级用户





积分 452
发帖 202
注册 2006-12-21
状态 离线
『第 10 楼』:  

我 测试了 红帽子9.0  和 UBUNTU7.10 64  
  都 能成功引导, 只不过红帽子没有我硬盘驱动
  UNUNTU7.10 64 引导过程中出现跳到字符界面去了, 不知道怎么搞了??

2008-1-4 06:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
chen0628
初级用户





积分 43
发帖 16
注册 2007-6-26
状态 离线
『第 11 楼』:  

map --mem (hd0,0)/MY.iso (hd3)
map --rehook

仿真成功

有个问题,我用一个IMG文件(加载IMG后搜索仿真ISO根目录下的GHOST.EXE并运行)
但加载IMG后总是找不GHOST.EXE

请问该怎么解决

2008-1-8 08:26
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wwwcccyyy
中级用户





积分 224
发帖 110
注册 2007-1-7
来自 广东
状态 离线
『第 12 楼』:  

grub dos 确实是强大,还得认真学习了

2008-1-12 18:26
查看资料  发送邮件  发短消息 网志  OICQ (810543626)  编辑帖子  回复  引用回复
429499381
中级用户





积分 452
发帖 202
注册 2006-12-21
状态 离线
『第 13 楼』:  

11 楼说的是什么

  你把你那个找不到的GHOST  menu.lst菜单贴上来.

  也许是MAP后 盘符移位

2008-1-14 11:05
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: