Board logo

标题: 【转帖】没软驱也从软盘引导系统(vfloppy的用法) [打印本页]

作者: ko20010214     时间: 2003-11-6 00:00    标题: 【转帖】没软驱也从软盘引导系统(vfloppy的用法)


一、提出问题
  为了电脑的安全或加快系统的启动速度,一般在BIOS中设置为优先从硬盘启动系统,可是一但遇到需要用启动盘引导系统的情况时(如在DOS下彻底杀灭病毒、升级BIOS等,就要先进入BIOS修改,完成任务后又要再次进入BIOS将相关设置改回来,十分麻烦,难道就没有一种鱼与熊掌兼得的方法吗?经过不断地摸索与试验,终于找出一种两全齐美的解决方法。

  二、解决问题的思路

  安装Win98与Win2000/XP双系统的朋友都知道,在C盘的根目录下有一个启动管理器的启动配置文件boot.ini,在该文件的Operating Systems小节中有一句:C\=″Microsoft Windows″,它是一种缺省用法,它的完整用法是:C\BOOTSECT.DOS=″Microsoft Windows″,其中BOOTSECT.DOS是Win98的引导扇区文件,隐藏在C盘的根目录下,引号内的Microsoft Windows是引导Win98启动的菜单项。该句的作用是:从“启动菜单”上选择Microsoft Windows,启动管理器就从BOOTSECT.DOS文件中引导Win98启动。从上述双操作系统中启动Win98的过程中可以得出如下结论:如果把启动盘的引导扇区提取出来做成一个文件保存在C盘的根目录下,并相应地修改boot.ini文件中的相关语句,就能实现从“启动菜单”上引导启动盘启动系统,从而避免了修改BIOS。

  三、实施步骤

  1.安装Win2000/XP的启动管理器

  在Win2000/XP或Win98与Win2000/XP双系统中已经安装了启动管理器,下面介绍在Win98安装启动管理器的过程。

  在Win98中运行Win2000/XP安装光盘上的安装程序,选择“全新安装”,一直安装到启动时出现“Microsoft Windows”与“Microsoft Windows 2000/XP安装程序”的启动菜单,此时已安装好Win2000/XP的启动管理器,选择“Microsoft Windows”进入Win98将硬盘各分区中所有以$字符开头并以$字符结尾的文件删除。

 2.制作启动盘的引导扇区文件

  下面介绍用Win98/2000/XP系统中自带的DEBUG工具制作启动盘的引导扇区文件的方法。

  先将启动盘插入软驱,然后在Win98/2000/XP的命令提示符下输入DEBUG并回车,然后在DEGUG的提示符“-”下按顺序输入以下命令并回车:

-L 100 0 0 1
-RCX
:200
-N C:\FBOOT.DOS
-W
-Q

  说明:第一行命令是将启动盘的引导扇区读入内存,第二、第三行命令是将引导扇区文件的大小设置为200B(200B是十六进制,即十进制的512B),第四行命令是给引导扇区文件命名为FBOOT.DOS,读者可根据自己的爱好进行命名,第五行命令是将内存中引导扇区中的数据写入FBOOT.DOS文件中,写入完成后屏幕上会显示“write 00200 bytes”写入文件的大小为200B,表明你引导扇区文件已经制作成功,输入第六行命令Q退出DEBUG。

  3.修改boot.ini

  在Win98系统中boot.ini文件修改如下:

[boot loader]
timeout=0
default=c:\
[operating systems]
C:\=″Microsoft Windows″
C:\FBOOT.DOS=″从启动盘启动系统″

  在Win2000/XP系统中,在[Operating Systems]小节下添加:C:\FBOOT.DOS=″从启动盘启动″,并将timeout的值修改为0。

  四、从启动盘启动系统

  完成上述操作后,重新启动电脑,如果这时需要从启动盘启动系统,就按F8进入 “Windows 高级选项菜单”,选择“返回到操作系统选项菜单”,按回车键进入“启动菜单”将启动盘插入软驱,再选择“从启动盘启动系统”即可从启动盘引导系统。如果不需要从启动盘启动系统,无需任何操作就可以快速启动你的Win98/2000/XP系统了。


作者: ko20010214     时间: 2003-11-6 00:00
虚拟软盘 by lyh728
http://bbs.wwwfox.net/non-cgi/usr/2/2_10625.rar

这是我参考了grub 的源代码和pqmagic 的vfloppy.sys 的
反汇编代码后,实现的一个类似pqmagic 的vfloppy.sys的
虚拟软盘系统。
看 vx_xsj 兄弟写的帖子,见最后。
既然有pqmagic 的vfloppy.sys,为什么我还要修改它呢?
主要是pqmagic 的vfloppy.sys 的引导程序是放在mbr中的
并且占据磁盘开始的3个扇区,也就是说vfloppy.sys安装的时候
需要向从mbr开始的3个扇区写数据,这样如果此时发生错误,
将可能是系统无法引导。
那么有没有其他的引导程序可以完成类似的工作呢?
lilo 需要在linux 下安装,并且不能虚拟软盘
nu2.nu 的diskemu 是在光盘上的,不支持fat ,ntfs
BootScriptor 也是光盘上的,不支持fat ,ntfs
isolinux 也是光盘上的,不支持fat ,ntfs
syslinux 可以支持fat16 ,fat12 ,但是不支持fat32 ,ntfs
grub 支持的格式最多,有人正在朝这个方向进行,目前还不好用(指的是在硬盘上虚拟软盘),最有可能在近期完成这个目标。
............
所以我揉合和grub 的源代码和vfloppy.sys的二进制文件,做成了这个东西。
用法:
假设 vfloppy 放在 c:\boot ,c盘可以是fat16 fat32 ntfs 分区格式
运行 vfloppy -1 vloader.bin -2 vmemdsk.bin -i dos.img ,

在 c:\boot.ini 中 加入一项 c:\boot\vloader.bin ="virtual floopy "
重新启动系统后,在ntloader的菜单上选择virtual floopy
就会加载 c:\boot\dos.img 这个镜像,并运行
特点:
安全,不向引导区写代码,不会破坏系统,无需会恢复mbr
方便,可以随时重新启动系统,进入dos环境
在没有光盘驱动器,没有软盘,只有windows NT ,windows 2k,windows xp ,win2k3
的系统上非常方便的运行别的OS。

测试:
在win2k3 英文标准版的环境下测试通过,支持ntfs ,fat32 ,fat16 的分区。
DOS论坛版主Wengier制作的MS DOS7.10启动盘

参考:
calV 的问题:

我光驱、软驱都坏了,但想在DOS下重装2000,有什么方法吗?帮帮忙,怎么样都行,可不可以删掉一些2000的系统文件,在启动时让它进不了2000,直接跳到DOS方式?

vx_xsj 兄弟写的帖子:
_________ vx_xsj 的发布预告! ! ! ! _________

  calV的问题我已经帮他解决了, 我说可以, 自然是可以, 因为我不善骗人, 所以这个是
有办法实现的 ( 奇怪的逻辑 )

  我之前就发现了这种方法, 只是想做得更好( 主要是启动盘好 ), 所以这段时间一直在
编写这个启动盘, 等相对完善时公布这个发现

  但是帮calV期间遇见了奇怪的事情, 发现开始时这个方法不能成功! 但之后又运行成
功, 为了找到这个原因, 我决定提前公布他

  如果用过Drive Image 5的人就知道, 他运行时是重启之后才开始工作, NT内核系统
看得十分明显, 既然PQDI无法在NT内核下运行, 那么重启后自然进入到了他可运行的系统
——DOS, 但不少人除2000/XP系统外没装其他系统, 这个DOS从何而来?

  据分析, 他有一个程序能将系统启动到虚拟软盘中( 此处省下大量墨笔 ), 这种虚拟软
盘用的实际就是VFD格式的映像( 再省 ), 他配的另一个程序VFeditor.exe, 也就是
WinImage的PowerQuest OEM版, 就是用来编辑他用的, 我的灵感就是由此引起

  既然他能让系统启动到虚拟软盘, 那么以后的启动盘就可以由他代替了, 当本机因为某
些情况无法用软驱/光驱时, 如超薄形的笔记本, 一时没有带光软, 而又要启动到DOS做某些
操作时( 如重装系统, 杀毒 ), 就显得很方便( 因为好像没有病毒说可以感染VFD映像, 所以
安全性就如CDRW一样 )

  介绍就说到这么多, 实际就留给大家试试吧, 我这次放了个临时版给calV, 映像的完善
版大概会在几天后公布

   系统内核为NT的, 且有兴趣
就去拿来试试吧, 记住运行成功将会自动重启, 接着就看到这个临时版的效果了

  如果不成功, 欢迎提出, 等我去改进

                              THX

引用 8cat 发表的贴子:
******************************************
使用方法是不是这样:
在win2k下运行主程序vfinstnt.exe(自动备份分区表) ,重新启动,进入dos,然后就进行相关的操作,操作完毕以后,重新启动,就可以修复正常的分区表

疑问:
如果在进入DOS后重新安装2000,2000在安装过程中对引导区的一些操作会对这个软件的分区表有影响吗?会不会BOOT之后就不认原来的分区表?
如果这样都没有问题,那么用PQ可以吗?
BTW,我也要一个
*********************************************************************

PM了,

估计应该是这样的, 再补充, 引导完dos应该立即就恢复了分区表

当然不会, 原来这个映像中的程序是PowerQuest Drive Image 5, 他无法修改分区表吗? 自然不是

用PQ自然可以
[转自CCF]

作者: ko20010214     时间: 2003-11-6 00:00
终于搞明白了,原来“vfloppy -1 vloader.bin -2 vmemdsk.bin -i dos.img”的目的就是根据现有的“dos.img”文件重建“vloader.bin”和“vmemdsk.bin”这两个文件。所以要想用不同的IMG文件引导,只要把这三个文件名更改一下即可,但文件名不能超过8个字符。例如用“VFloppy -1 VL_RST.bin -2 VMD_RST.bin -i RST442.img”这个命令就是根据现有的“RST442.img”文件重建了“VL_RST.bin”和“VMD_RST.bin”文件,当然,在这之前得先把“vloader.bin”和“vmemdsk.bin”拷贝一份并更名成“VL_RST.bin”和“VMD_RST.bin”。所以我现在在BOOT.INI加入一行“C:\VFloppy\VL_RST.bin="Ram Stress Test 4.42"”,就可以用“RST442.img”引导了!
  我的“BOOT.INI”文件内容如下:
[boot loader]
timeout=5
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
C:\VFloppy\VLoader.bin="MS-DOS 7.10"
C:\VFloppy\VL_RST.bin="Ram Stress Test 4.42"
C:\Bootsect.cdr="BOOT From CD-ROM"
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /fastdetect /noguiboo
  其中第一行是用“DOS.IMG”文件引导虚拟软盘,第二行是用“RST442.img”引导虚拟软盘。
由 Zuima 于 08-20-2003 01:38:45 最后编辑;此贴系转贴。

作者: Wengier     时间: 2003-11-6 00:00
VFLOPPY的优点就不用说了,但它的缺点是两个:不支持1.68MB的软盘IMG文件以及不支持写入功能。现在不点正在为GRUB for DOS加入这两个功能呢。。
作者: hunome     时间: 2003-11-6 00:00
要是grub能象bcdw一样支持任意大小的img文件就好了。
作者: ko20010214     时间: 2003-11-8 00:00
C:\Bootsect.cdr="BOOT From CD-ROM"中提到的bootsect.cdr的下载:
从光盘启动的文件。
打开附件
用法:将此文件放到根目录,在Boot.ini后加一行

C:\Bootsect.cdr="从光盘引导"

作用:从A盘到CDROM扫描一次,试图引导系统。

说明:不能代替BIOS设置里的CDROM功能,BIOS里没有这项,启动也不会成功的。

本人不对此文件负任何连带责任,如果你可以正常使用,那是你运气好,如果不行,我基本上也没什么办法。出了问题可别找我,不过我这测试过没有问题,从原理上讲也不会有任何问题
作者: maple     时间: 2003-11-8 00:00
VERY GOOD!THANK YOU!
作者: 不点     时间: 2003-11-8 00:00


  Quote:
以下是引用hunome在2003-11-6 10:37:46的发言:
要是grub能象bcdw一样支持任意大小的img文件就好了。

yes

grub 将支持任意大小的 img 文件,例如 500M 或者 5G 的 img 文件。下一个测试版的发布将在 2003 年 12 月,请有兴趣的朋友一定要参与测试噢!

中文开发主页在以下地址:
http://www.linuxeden.com/edu/doctext.php?docid=3006


作者: hunome     时间: 2003-11-8 00:00
太好了,支持!
作者: 不点     时间: 2003-11-11 00:00
GRUB 最新测试版已经做出来了, 有些功能暂未实现, 比如 格式化虚拟盘 的操作是禁止的.

这个只能用于测试的目的, 不要作为正式使用, 因为可能很危险, 请在 VMWARE 中测试运行.

详细说明请看以下网页:

http://www.linuxeden.com/edu/doctext.php?docid=3006

谁愿意作为第一批参加测试的人? 给个空间, 我上传它?

我不想现在就公开它, 因为太危险, 希望测试的人也不要把它当作稳定的版本来传播, 谢谢.


作者: cba-xyz     时间: 2003-11-11 00:00
ftp://soft:down@wangdef.xicp.net/上传
作者: 不点     时间: 2003-11-11 00:00
老兄提供的地址不能上传,多次重试也不行。已经上传到这里:

ftp://ftp.cosoft.org.cn/incoming/grub_t01.exe

本来是我应当首先测试,但是我开发完之后,已经没有时间再测试了,最近工作太忙。麻烦老兄代为测试,但是千万小心,不要损伤你的真实机器中的宝贵数据。测试大约半个月,修正一些 BUG,就到下个月了,那时,再在更大范围内测试。谢谢老兄!!

___________________________

用 ftp://ftp.cosoft.org.cn/incoming/grub_t03.exe 之后, 啊------, 我的一个硬盘映像和两个软盘映像已经被破坏掉了!! 好在我也是在 VMWARE 下测试的, 没有造成真正的损失. 大家一定要小心啊!!

t01 和 t02 也肯定有危险.

原因还没有查明. 如果迟迟不能查明, 就要推迟对公众发布了.



[此贴子已经被作者于2003-11-13 14:38:21编辑过]



作者: Wengier     时间: 2003-11-11 00:00
希望GRUB for DOS和VFLOPPY的优点全面结合就好了,因为它们的功能在虚拟软盘这点上本来就比较相似,但却各有优缺点。
作者: lyuzhou     时间: 2003-11-14 00:00
有没有办法启动硬盘上的光盘ISO镜像文件???
作者: 不点     时间: 2003-11-14 00:00
现在还不行. 希望以后有时间做这个.
作者: cba-xyz     时间: 2003-11-14 00:00


  Quote:
以下是引用不点在2003-11-11 23:35:09的发言:
老兄提供的地址不能上传,多次重试也不行。已经上传到这里:

ftp://ftp.cosoft.org.cn/incoming/grub_t01.exe

这个几天测试一下,希望作者多改掉一些BUG,我也是在虚拟机里试,GRUB不大安全,怕怕。
作者: 不点     时间: 2003-11-15 00:00


  Quote:
以下是引用cba-xyz在2003-11-14 20:16:22的发言:
这个几天测试一下,希望作者多改掉一些BUG,我也是在虚拟机里试,GRUB不大安全,怕怕。

怕怕,这就对了。我最害怕胆子大的人了。我赞成小心谨慎严肃的人。

可以说,最近出现的这个 BUG,实在是太伤脑筋,恐怕不知道什么时候才能彻底解决了。所以我可不愿意鼓励大家现在都来测试。在提供给大家公开测试之前,我自己首先应当把已经发现的问题都解决掉。

我希望接下来的正式版本要经过广泛的测试,应当是十分稳定的。

作者: 不点     时间: 2003-11-16 00:00
感觉 GRUB 所出现的问题,主要还像是属于 win98 的 BUG。我详细检查了 grub 仿真部分的代码,没有发现任何可疑的地方。所以,把这一情况当作一个特例来处理,也就是,当扇区不是以 55 AA 结尾时,禁止将它写入仿真驱动器的第一扇区。好了,再测试吧。

ftp://ftp.cosoft.org.cn/incoming/grub_t04.exe
作者: Wengier     时间: 2003-11-16 00:00
不点:刚试了这个T4版,不过在我的电脑上用GRUB启动Win98时当不禁止用“32位(保护模式)磁盘存取”时仍然出现蓝屏或黑屏错误而死机,虽然和T1版相比重启后发现软盘IMG没有损坏。
作者: 不点     时间: 2003-11-17 00:00
我也发现了这个问题,并且,感觉到问题十分严重,也比较奇怪。

我用

map (hd0,0)+1 (fd0)    这是把 A: 盘映射到 C: 盘,所有对 A: 盘的操作,都将转向 C: 盘了

chainloader (hd0,0)+1

boot

启动,结果,C: 盘没事,但 A: 盘所有的偶数字节都显示成 00。


作者: 不点     时间: 2003-11-18 00:00
再看看这个:

ftp://ftp.cosoft.org.cn/incoming/grub_t06.exe

应当差不多了。

我用

map (hd0,0)+1 (fd0)

chainloader (hd0)+1

boot

可以启动 C: 盘上的 win98 了。在 win98 中察看 A: 盘,可以发现 A: 盘的大小是 4G,内容也和 C: 盘完全一样。

A: 盘的大小可以是任意的,这应当比较过瘾了。

作者: Wengier     时间: 2003-11-18 00:00
我刚才下载了GRUB的T6版试了,不过发现在我的VMWare环境中,只要用GRUB虚拟了软驱(不管是map (hd0,0)/xx/xx (fd0)还是map (hd0,0)+1 (fd0)等),然后用chainloader+boot启动DOS(此时一切正常),再输入WIN命令启动Win98(未屏蔽“保护模式磁盘存取”)时总是出现"Unable to write to Drive C"之类的蓝屏错误并死机,不知是什么原因?
作者: 不点     时间: 2003-11-18 00:00
你能否这样试验一下:

map (hd0,0)+1 (fd0)

chainloader (hd0)+1

boot

看看这样能否启动 win98 ?


作者: Wengier     时间: 2003-11-18 00:00
不点,上次就是这样试的呢,不过可惜不行。
作者: 不点     时间: 2003-11-18 00:00
在我的vmware上, 用两种方法启动, 结果是不同的.

如上所说, 第一种从硬盘启动成功:

map (hd0,0)+1 (fd0)

chainloader (hd0)+1

boot

第二种从软盘启动失败.

map (hd0,0)+1 (fd0)

map --hook

chainloader (fd0)+1

boot

没有出现蓝屏, 但是机器死锁了, 不能进入 win98

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

我们来猜测一下, 第一种启动成功, 是因为 C: 是启动盘, win98 把这个盘实施 "保护模式的磁盘存取", 而把 A: 盘实施 "实模式的磁盘存取", 这是通过的, 所以成功了.

第二种启动失败, 是因为 A: 盘是启动盘, win98 试图把 A: 盘实施 "保护模式的磁盘存取", 但是, 由于 GRUB 仿真的磁盘不能进行 win98 的 "保护模式的磁盘存取", 或者说 win98 本身不支持被仿真磁盘的 "保护模式的磁盘存取", 所以, windows 死掉了.

禁止 win98 的 "保护模式的磁盘存取" 之后, 问题得到解决, 这佐证了上述的猜测.

我感觉这已经走到尽头了, 没办法. 除非谁能改进一下 win98 的 "保护模式的磁盘存取" 的驱动程序.

===========

上述两种启动有着本质的不同, 一个从 C: 盘, 一个从 A: 盘. 表面上看起来类似, 但实质上是不一样的(关键之处就在于是从哪个盘启动的). Wengier 兄是否再试试.

如果上述猜想成立的话, 我们基本上就可以收工了.


作者: imp     时间: 2003-11-18 00:00
用vfloppy启动系统后  怎么用软区呀?
作者: 不点     时间: 2003-11-19 00:00
再报告一下新的测试结果。

这次从软盘居然也启动了 win98,  而 win98 的 "保护模式的磁盘存取" 并未关闭。

map (hd0,0)/dos98.img (fd0)

chainloader (hd0,0)/dos98.img

boot

进入 win98 之后,第一次访问软盘还正常,第二次访问软盘,速度奇慢。

第三次访问软盘,win98 报告软盘没有格式化。用 debug 看看软盘的内容,结果,软盘所有扇区在第偶数个字节都变成 00 了。

看来 win98 还是很难伺候的。

整体印象是,win98 对于与实模式兼容的磁盘操作没有经过充分测试,它潜藏着很严重的 BUG。为了尽量伺候好 win98,我们可能得再多编写一大段处理程序,尽量躲过它的 BUG。
作者: Wengier     时间: 2003-11-19 00:00
不点:既然已经基本确定是Win98的“保护模式磁盘存取”自己的BUG了,不如在GRUB的说明文件中加个提示,就说用GRUB虚拟软盘后启动DOS->Win98时不要启用那个模式就行了,或者给GRUB加一段代码让它发现开始启动Win98时自动禁用Win98的“保护模式磁盘存取”功能,如何?免得再去伺侯Win98的"“保护模式磁盘存取”这个麻烦的东东了。


[此贴子已经被作者于2003-11-19 10:00:03编辑过]



作者: 不点     时间: 2003-11-19 00:00
Wengier 兄所说,也正是我想要做的。如果最终不能解决这个难题,那么这就是一个退路。

但是,我实在不想放弃。早期 GNU GRUB 的开发者之所以添加了 map 命令,其目的就是伺候 windows 不能从 D: 盘启动这个弱点。遗憾的是,用了 map 映射之后,照样不能启动 D: 盘上的 windows。在 GNU GRUB 的代码中表明 dangerous ,说明这一映射是不安全的。我曾经用 map 映射在真实机器上启动 D: 盘上的 DOS,但没有用它来启动 D: 盘上的 windows。有人报告说不能启动 D: 盘上的 windows。

然而早期,开发者们没有 VMWARE 这类仿真器。今天我们有了这类方便的工具,是该坚持把技术做到完美了。如果最终不能安全地启动 windows,我自己就感到很失望,我会认为先前的努力都是白费。我想再试试,尽力而为,不想轻易就投降。有了诸位可爱的中国人的帮助,我们达到了今天这个地步,我们的成功就在于,我们发现了问题的根源。这很重要。如果发现不了问题的根源,那就根本没有希望。现在我们发现了问题的根源,只剩下要找到解决的办法了。尽管是伺候 win98,但也值得去做一做,毕竟 win98 在其它方面都是不错的。我相信最终会有满意的解决的。
作者: 不点     时间: 2003-11-20 00:00
又做了一个,再试试吧。

ftp://ftp.cosoft.org.cn/incoming/grub_t07.exe

这次总不至于没有任何进步吧?

我的测试,可以从软盘映象启动 win98 了。在我的虚拟机上没有发现其它毛病。

作者: cavvie     时间: 2003-11-20 00:00
感谢不点兄的不懈努力,真的很喜欢这个软件,给我们带来了很多方便^_^
另外提两个小小的问题:
1.Redhat为grub开发了一个可以显示640*480大小的xpm图片的补丁,请问你可以把你的补丁打进grub for dos中去吗?
2.Grub支持网络启动,不过得在编译的时候就把驱动加进去,请问grub for dos可以添加这一功能吗?

作者: 不点     时间: 2003-11-20 00:00
谢谢你测试这个软件.

两个问题的回答都是: 当然可以. 之所以是肯定的答复, 那是因为 grub for dos 根本不涉及 GNU GRUB 的核心. grub for dos 仅仅改动了 map 磁盘映射部分的代码, 别的都没有改动, 功能上同 GNU GRUB 是完全一样的. 你只要在 LINUX 下编译, 肯定可以通过的. 毫无问题.

但需要说明的是, 我本人不曾涉及到这两个问题, 目前也没有时间关心这两个问题. 希望有兴趣的人动手做吧.

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

我目前很关心 grub_t07.exe 的运行状况. 希望再多几个人参与到测试中, 当然还是要在虚拟机中测试了.

我很害怕这个版本仍然有重大毛病, 那样的话, 恐怕就真的困难了. 希望测试成功的人也来报告成功的消息, 我有些着急. 这次真的害怕失败了. 有用 Virtual PC 测试的吗? 希望有人在不同的虚拟机下测试. 将来更希望有人在一台真实的机器上测试(当然这台测试机是允许遭到破坏的才行).

作者: Wengier     时间: 2003-11-21 00:00
我刚才试了一下这个T7版,可惜在VMWare中启动Win98时仍然出现同一个蓝屏错误并死机,现已将此屏幕切了下来并传了上来:


我想的话,要完全解决这个问题的话,如果用直接伺候Win98的方法难以做到的话,建议还是这样吧:GRUB虚拟软盘后若发现Win98正在启动的话,就通过一段特别的代码自动禁用Win98的“保护模式磁盘存取”功能(禁用仅对本次启动Win98有效就行,或者还可以给GRUB for DOS增加一个选项,让用户跟据自己系统的实际情况来决定是否进行禁用此功能,以增强兼容性),反正一旦自动禁用此功能Win98就可以正常启动了,而且其功能(不管是GRUB for DOS的功能还是Win98的功能)基本上不受任何影响。

[此贴子已经被作者于2003-11-21 6:03:20编辑过]



作者: 不点     时间: 2003-11-21 00:00
现在有一个疑问还没有解决, 就是为什么我的正常了, 而你的还不行?

这差别在什么地方?

我的 软盘映像是 win98 格式化生成的, 里面只有 io.sys, command.com, drvspace.bin, msdos.sys 这 4 个文件. 其中 msdos.sys 是从 C: 盘上拷贝过来的, 覆盖掉 A: 盘上的那个空的 msdos.sys 文件.

我怀疑你的环境可能有 config.sys 的项目. 下面我也准备在我的机器上测试你的环境. 总之, 这个差别一定要找出来, 看看究竟是什么原因造成的.

作者: Wengier     时间: 2003-11-21 00:00
不点:刚才我试了,CONFIG.SYS中只加载了HIMEM.SYS和IFSHLP.SYS两个必备的文件和DOS=HIGH,UMB之类的项目,AUTOEXEC.BAT中基本上什么TSR程序都没有加载,但启动Win98时情况依旧,所以应该不是CONFIG.SYS等启动文件的问题吧。补充一下,我用的是英文版的Win98SE来测试的。

[此贴子已经被作者于2003-11-21 9:25:05编辑过]



作者: 不点     时间: 2003-11-21 00:00
我这里有点奇怪。

我的 C: 盘是被 vmware 保护的 win98。在 D:盘上是 C:盘的拷贝。但在 vmware 中不保护 D: 盘以便可以写入。

我用

map (hd0) (hd1)
map (hd1) (hd0)
map (hd1,0)/dos.img (fd0)
chainloader (hd1,0)+1
boot

启动,可以进入 win98。注意,D: 盘上已经安装了您的 dos7.10 完整版。先启动到命令行,然后用 win 命令启动 win98。config 和 autoexec , 以及 msdos 等统统没有改动。所有的驱动都已经加载。

出现的一个问题是,不能访问 A: 盘了。这个当然可以理解,因为 A: 盘被映射到 hd1 的某个文件,而现在在 win98 下 hd1 变成 hd0 了。因此,我在 win98 中手动用 debug 临时修改 int13 中的映射,将 A:盘映射到 hd0 中的相应扇区序列。这时,可以看到 A: 盘中的文件了,但是,只要试图写入 A: 盘,win98 就说 A: 写保护,不能写入。

看来问题是某个隐藏的东东把磁盘写保护了。

如果写保护 A:盘,那么 win98 当然可以正常启动,正如我所碰到的情况;然而,如果写保护 C:盘,则 win98 就不能启动了,因为 win98 在启动时要写入 C: 盘的,这正如您所碰到的情况了。

我们不要停止,继续追踪它的原因。谢谢您一直以来的辛劳。


作者: Wengier     时间: 2003-11-21 00:00
我怀疑有没有可能是因为Win98的“保护模式磁盘存取”在存取那个正在用于虚拟软盘的硬盘上的IMG镜像时发生错误呢(因为那个IMG镜像文件可能正在使用即正在虚拟中,而说不定那个“保护模式磁盘存取”与此不兼容)?在我这儿的情况是,如果把IMG放在Win98所在的C盘上用GRUB虚拟后启动Win98时,是蓝屏出错后死机;如果把IMG放在另一个驱动器D盘上用GRUB虚拟后启动Win98时则是黑屏死机(非常奇怪)。
作者: 不点     时间: 2003-11-21 00:00
其实您可以跟踪一下, 究竟那种情况死机快一些. 例如, 用 F8 键呼出菜单, 选择 step by step confirmation ,就可以知道究竟是哪个驱动程序导致死机或者蓝屏, 以及它们发生在什么时刻.


作者: Wengier     时间: 2003-11-21 00:00
不点:用F8跟踪是无效的,因为并非哪个可以选择加载的驱动程序有问题,而是在Win98中无法写入记录且无法停止的IFSMGR VXD段(具体可以看相关资源)中有问题,所以这不是跟踪就能轻易判断出来的。
作者: cavvie     时间: 2003-11-22 00:00
我用了grub for dos 0。14和test7的版本,但始终无法正常引导Wengier的“ 超级通用MS-DOS 7.10启动盘 ",提示错误是config.sys中的某一行错误,或者在加载emm386的时候就死了,但是用vfloppy来引导就没有问题。
我的方法为:
map (hd0,0)/msdos71.img (fd0)
chainloader (hd0,0)/msdos71.img
rootnoverify (fd0)
boot

我在虚拟机中和真实的机器中都是这样的错误,不知道是什么原因呢?

作者: 不点     时间: 2003-11-22 00:00
谢谢 cavvie 兄提供这个线索。由于我从来都不用 emm386 ,所以我不曾发现这个问题。

接下来我准备试验一下,先把这个问题解决了再说。很可能两个问题是相关的。

=========

wengier: 有关 IFSMGR 的资料我没有了解过。不知您能否再给出一些提示。


作者: 不点     时间: 2003-11-22 00:00
刚刚下载了 “超级通用MS-DOS 7.10启动盘” 测试过了,在我的虚拟机下运行很正常。

我首先用 F8 呼出 win98 的菜单,然后在命令行下运行

grub_t07

进入 grub> 提示符之后,敲入

map (hd1,0)/msdos710.img (fd0)

chainloader (hd1,0)/msdos710.img

boot

当出现提示 PC-CHACHE,SMARTDRV,CANCEL 的时候选择 CANCEL。

这样就进入了 DOS 的 A:> 提示符。在这里敲入 set 命令,看到

winbootdir=.

这是不能用来从 A:盘启动 windows 的。所以,

set PATH=c:\windows;c:\windows\command

c:

cd \windows

win

好了,win98 正常启动了。


作者: Wengier     时间: 2003-11-22 00:00
我刚才用GRUB for DOS测试了一下这个10月12日版的“超级MS-DOS 7.10启动盘”,基本正常启动,但以前版本的启动盘则没有用GRUB.EXE试过,不知是否也可以。

不点:关于winbootdir=.,我以前曾经在论坛中说过,这是通用的Win9x的启动方法(不管是Win95/95A/95B[97],还是Win98/98SE,无论WIN是中文版还是英文版等,也无论WIN是在哪个驱动器的哪个路径下,甚至无论系统中装有多少个Win3.x/9x[比如10个都没有问题],都可以在这个MS-DOS 7.1下用此方法来启动),具体是设置后只需先用CD命令进入Win9x的所在路径,然后输入WIN命令即可进入Win9x了(不用设置PATH或其它任何内容),包括“MS-DOS 7.10完整安装版”的MSDOS.SYS中默认也是这样设置的。

[此贴子已经被作者于2003-11-22 9:27:14编辑过]



作者: 不点     时间: 2003-11-22 00:00
grub_t08 做出来了,但是有关 int13 的仿真功能没有任何新的改动,完全等同于 grub_t07。这个只是给 wengier 测试用的,其他朋友没必要下载。

增加了大写字母的选项以便可以在 CONFIG.SYS 中用 --CONFIG-FILE 命令行参数来指定另外一个 menu.lst 文件。


作者: cavvie     时间: 2003-11-22 00:00
我忘了把情况说清楚了,我是把grub安装到到mbr中去了
root (hd0,0)
setup (hd0),
然后在开机的时候按“C”进入命令模式,输入
map (hd0,0)/msdos711.img (fd0)
chainloader (hd0,0)/msdos711.img
boot
但是这样无法正常引导,总是显示config.sys line 7 error ,emm386 can't load等,然后整个系统就停住了。
但是如果我不是在启动引导中使用这功能,而是在开机时候按F8进入win98的command line再执行grub_07.exe,然后一样是输入
map (hd0,0)/msdos711.img (fd0)
chainloader (hd0,0)/msdos711.img
boot
这时就可以正常启动了!!!!!

很奇怪,grub for dos安装到mbr或硬盘的其它地方就不能正常使用了吗?非得通过dos方式启动grub.exe才可以正常使用img文件?

作者: 不点     时间: 2003-11-22 00:00
grub for dos 无论在 MBR 还是从 DOS 命令行启动,其效果都是一样的。而从 MBR 启动的效果要更好,因为这时的 BIOS 中断表和 BIOS 数据区还没有经过 DOS 的污染。

在老兄这里的情况下,之所以出现差异,是因为版本不一样。grub_t07.exe 是最新版本,而安装到 MBR 的是老的版本。

即使是用 grub_t07.exe 的 root (hd0,0) 和 setup (hd0) 来安装,也仍旧安装的是旧版本。为什么呢?因为安装到 MBR 的是采用 (hd0,0)/boot/grub/stage2 文件,而完全脱离了 grub_t07.exe 了。这时把 grub_t07.exe 删掉都行。注意,stage2 文件是旧的,需要等待正式版发布后一并更新 stage2 文件。

--------

stage2 文件已经上载到您的 FTP 空间上。您可以试试看。用它替换掉旧的 stage2 文件,然后再用一次 root (hd0,0) 和 setup (hd0) 来安装到 MBR,就可以用新版本了。

安全起见,这里再提醒一次,这不是正式的发布,里面可能潜藏严重的 BUG。为了保证机器安全,请您尽量不要使用 map 命令。这是 test 版本。





[此贴子已经被作者于2003-11-22 20:10:37编辑过]



作者: cavvie     时间: 2003-11-22 00:00
呵呵,谢谢了,低级错误 ^_^
我会加上readonly参数小心使用的了
thx again
作者: 如是大师     时间: 2003-11-22 00:00
你这个vfloppy略做修改就应该可以在win下加载img文件取代真实A盘了。。
那样,使用面不是更广泛吗?
作者: 不点     时间: 2003-12-5 00:00
刚刚做出来, 再试试这个:

ftp://ftp.cosoft.org.cn/incoming/grub_t09.exe

纠正了几个隐藏的 BUG, 应当比较完美了.


作者: cba-xyz     时间: 2003-12-9 00:00
多谢。
作者: jylin     时间: 2003-12-11 00:00
好文章
作者: gao7240     时间: 2003-12-12 00:00
长知识了!!