GRUB for DOS 0.0.x 系列是没有任何磁盘仿真扩展功能的版本,功能上完全等价于 GNU GRUB。这里说明,GNU GRUB 本身就有磁盘映射功能。磁盘映射是一种特殊的磁盘仿真。磁盘映射只能把一个 BIOS 磁盘号码映射到另外一个 BIOS 磁盘号码,也就是说,它只能整盘整盘地仿真,不能用磁盘中的一个文件来仿真另外一个磁盘。这个版本也是最安全可靠的,可以认为,GNU GRUB 有多安全,GRUB for DOS 0.0.x 就有多安全。
GRUB for DOS 0.1.x 系列具有 0.0.x 的全部功能,除此之外还具有软盘仿真扩展。但是只能用硬盘上的 img 文件来仿真 1.44M 的软盘,并且对软盘映象进行了写保护,也就是说禁止软件通过 int13 接口写入软盘的映象。这个版本也没有已知的安全问题。
GRUB for DOS 0.2.x 系列增加了任意规格的软盘和硬盘的仿真功能,是功能上比较完善的版本。它和 0.1.x 系列的最大不同之处是,它默认时不再保护被仿真的磁盘映像。如果想获得与 0.1.x 等价的功能,必须为 map 命令加上 --read-only 参数。【注:0.1.x 系列也支持 --read-only 参数,但即使没有这个参数,0.1.x 系列也会自动保护磁盘映象不被写入。】
版本 0.2.x 虽然支持写入虚拟磁盘映象,但是,格式化虚拟磁盘映象的 int13/AH=05h 功能并未完整实现。当格式化磁道的时候,GRUB for DOS 0.2.x 并不真的采取任何实质性的格式化动作,也即,它并不改变虚拟磁盘中的任何扇区的内容,而仅仅立即返回“格式化成功”的(类似于 fake write 的虚假)消息给调用者。这没有太大的问题。只有一点需要注意:当您在 DOS/Win98 下要格式化虚拟磁盘的时候,您先不要忙着下达格式化命令,而是要首先运行删除命令,将虚拟磁盘根目录下的所有文件以及所有目录都删去,变成一个空盘,然后再下达格式化命令,这样,格式化后的虚拟磁盘能够正常使用。否则,格式化之前的垃圾目录项仍然在残存着,这将影响虚拟盘的正常使用。
由于版本 0.2.x 支持写入虚拟磁盘,所以,对虚拟磁盘边界的检查是必不可少的一个步骤了。程序已经对此作了保护。当试图读取或者写入超过虚拟磁盘边界的那些扇区的时候,int13 接口会返回失败信息“扇区未找到”,而不是真的读取或者写入(!!)硬盘上紧接着虚拟磁盘映象后面的扇区内容。【读取这些越界的扇区,并无实质性的危险;但写入这些越界的扇区,将给硬盘带来灾难。所以这个保护是必须的。】
有关 GRUB for DOS 0.0.x 系列的说明文档,请看这里: DOS下用GRUB.EXE修复启动故障
有关 GRUB for DOS 0.1.x 系列的说明文档,请看这里: 用 GRUB 来引导软盘映象——节约软盘介质了
从这里下载 GRUB for DOS:
http://newdos.yginfo.net/grubdos.htm (英文主页,感谢 Wengier!)
ftp://211.100.7.71/incoming/ 也即: ftp://ftp.cosoft.org.cn/incoming/
接下来,本文只讨论 GRUB for DOS 0.2.x 系列的新功能。
首先,安全的考虑。在版本 0.1.x 的时候,由于只仿真了软盘,并且以只读的方式访问,所以,安全问题不很重要。然而,0.2.x 大大不同了,它不仅可以写入软盘,并且默认就打开了这个功能。所以,如果您不注意的话,您有可能因此而遇到麻烦。大致有以下几种情况:
一、如果您的程序(或者病毒)要写入软盘,那么您的软盘映象可能会改变内容,这可能不是您想要的结果。
二、如果您仿真了硬盘,进入 Windows98 之后,硬盘的号码可能会发生错位【比如 BIOS 磁盘 0x81 变成了 0x82 等等】。这时候如果写入了硬盘映象,可能导致另外一个真实硬盘被破坏掉。这里看到,如果加上 --read-only 参数,安全性仍然可以得到比较好的保障。
三、即使如上述“二”所说加上了只读参数,也仍然存在一定的安全隐患,其原因是,Win98 将我们的 int13 仿真程序当作病毒来对待【在 www.google.com 中查找 MBRint13 就可以找到这类信息】,因此,win98 有可能故意产生某些错误来破坏我们的 int13 的运作。迄今为止并未发现“在加上只读参数后,Win98 仍然破坏磁盘映象”的现象,但也不能保证绝对安全。
四、在整盘映射的情况,加上 --read-only 参数之后,被仿真的磁盘在 DOS 下是只读的,但是在 win98 下不是只读的。这是因为 win98 对于“整盘映射”实施的是“32位磁盘存取”【应当叫做“保护模式磁盘存取”】,它不使用 BIOS,因此它不知道我们加上了 --read-only 参数,所以它会写入磁盘。有鉴于此,所以,在整盘映射的情况下不要使用 --read-only 参数【当然,使用 --read-only 参数并无任何坏处】。
五、如果没有对硬盘进行仿真,也就是说仅仅使用了类似于 map DESTINATION (fd0) 的软盘仿真命令,那么,在 DOS 下应当是比较安全的。然而,如果要在仿真之后运行 win98,请注意这样一个顺序:首先用 map --read-only DESTINATION (fd0) 来运行,当您能够确认 win98 可以正常读出仿真软盘的内容之后,下一次运行 map 命令的时候就可以不再添加 --read-only 参数了。如果不能读出仿真软盘的内容,那就说明读错了位置【可能读出的是别的磁盘上的扇区】,这预示着“写入仿真软盘”将会带来灾难。所以建议在运行 win98 时先用 --read-only 参数进行确认,保证安全。
对于版本 0.2.x 来说,如果某个问题只是引起“死机”,这不被认为是安全问题。只有当某个磁盘扇区被破坏掉了的时候,才算作安全问题。
使用软盘仿真的情况较多,所以,主要用软盘仿真的例子来说明磁盘仿真命令的用法。
1。把硬盘上某个盘符(例如 C:)仿真为 A:,并从 C: 盘引导 win98:
map --read-only (hd0,0)+1 (fd0)
chainloader (hd0,0)+1
rootnoverify (hd0)
boot
上述 (hd0,0) 是 Win98 下的 C: 盘。进入 Win98 后可以发现,现在 A: 盘的内容跟 C: 盘完全一样。这时,如果随意在 A: 盘上删除文件,会导致 C: 盘也删除该文件,因而有可能引起故障(例如死机)。
在 map 命令中,(hdm,n)+1 被解释为代表整个 (hdm,n) 分区,而不仅仅是代表分区的第一个扇区。相比之下,在其它地方,(hdm,n)+1 仍然只代表分区的第一扇区。
2。把硬盘上某个盘符(例如 C:)仿真为 A:,并从 A: 盘引导

投稿指南


