返回列表 发帖

关于sys命令,mbr和启动文件的探讨

首先感谢远望一干人等的讨论,这仅仅是讨论的总结。
       sys的作用是将系统文件传到指定存储器上。如果有时候遇到Win9X/Me系统无法启动的情况,可以试试sys命令,可能会让机器起死回生.但是让很多朋友感到迷惑的是, SYS C:经常不起作用,不知道为什么, 三个文件拷过去了,但是就是不能引导。部分朋友猜测有可能是mbr的问题,所以我们可以试着用fixmbr或者江民KV的硬盘修复工具等等来修复mbr,或者用fdisk /mbr 命令也可。  
     其实说起来,这个SYS命令有时候挺奇怪,按理说用启动盘引导起来之后,运行:SYS A: C:这个命令要往C盘下拷贝三个文件:command.com、msdos.sys、io.sys,但启动盘中的msdos.sys与正常WIN98系统中的msdos.sys并不一样,正常WIN98系统中的msdos.sys大小为1.65K,而启动盘的msdos.sys只有几个字节!当C盘下有msdos.sys这个文件时,SYS命令并不用软盘中的msdos.sys去覆盖掉C盘中的msdos.sys!传送系统后C盘中的msdos.sys依然是原来的那个1.65K的文件。 是SYS命令比较智能化呢,还是C盘下的msdos.sys文件本身具有SHR的属性而不可写呢?


于是,不安分的高手开始试验了。
试验过程:   
一、把硬盘上大小为 1.63KB 的 msdos.sys 连带另外一个可能相关的文件(msdos.---、msdos.bak)全部删除,然后直接退出 windows 系统到 dos 模式,再用 sys c: 命令。此时 C 盘的 msdos.sys 文件会重建,但仅仅是 6 个字节大小。其内容可以用记事本打开,是
;SYS
共 4 个字符。
  
此时,和预料的一样,系统已无法从硬盘引导。当然我们知道,在这种情况下,系统不能引导到图形界面,只能引导到DOS下,msdos.sys是个配置文件。
  
二、启动盘上的 msdos.sys 文件只有 9 个字节大小,内容可以用记事本看到,是
;W98EBD
共 7 个字符。
  
三、如果用启动盘引导计算机,而不是从 win98 退出到 dos 模式,那么执行 sys c: 的结果,还是一样,C 盘的 msdos.sys 保持原来的大小,6 个字节。
  
四、复制原来系统的 msdos.sys 备份到启动盘,覆盖启动盘上的同名但不同大小的文件,用这样的启动盘启动计算机。注意,这个 msdos.sys 文件也一样可以用记事本查看,其内容是:
  
[Paths]
WinDir=C:\WINDOWS
WinBootDir=C:\WINDOWS
HostWinBootDrv=C
  
[Options]
BootMulti=1
BootGUI=1
DoubleBuffer=1
AutoScan=1
WinVer=4.10.2222
;
;The following lines are required for compatibility with other programs.
;Do not remove them (MSDOS.SYS needs to be >1024 bytes).
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxa
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxb
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxc
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxd
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxe
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxf
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxh
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxi
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxj
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxk
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxl
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxm
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxn
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxo
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxp
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxq
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxr
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxs
  
结果一样,硬盘上的文件大小保持为 6 个字节。
  
系统依然无法引导。
  
五、在更改C盘msdos.sys文件属性的情况下,sys c:命令仍然不会改写msdos.sys,因为先前我在遇到这个问题时,为了证明这个问题,事先把msdos.sys去除属性后做了备份,在sys c:后并没有被改写。
六、以上过程在虚拟机中试验通过。虚拟机中已经安装了附加模块。虚拟机中的 win98 系统,在原始版本基础上,基本没有做过大的更改。
  
七、从以上特征中似乎可以推断,sys 命令不仅仅是传输了系统文件,而且也对引导扇区做了修正。
六、以上过程在虚拟机中试验通过。虚拟机中已经安装了附加模块。虚拟机中的 win98 系统,在原始版本基础上,基本没有做过大的更改。
  
七、从以上特征中似乎可以推断,sys 命令不仅仅是传输了系统文件,而且也对引导扇区做了修正。 但是我们现在无法进行最终判断,因此最好能格式化一张软盘,用WINHEX看看MBR,再用SYS做引导化以后进行对比。MSDOS.SYS的问题还是比较容易解决。
现在还存在的问题是:
现在还存在的问题是: 1.            在实际操作中,msdos.sys文件的属性是可以用attrib来更改的,用attrib -h -r -s去掉了msdos.sys文件的只读、系统、隐藏等属性,这是可行的,经过试验的证明的。前面提到过,试验是在虚拟机中进行的。会不会是这个原因造成的不可更改呢?
2            我们的推断是不能马上成立的,原因在于当系统加电自检通过以后,硬盘被复位,BIOS将根据用户指定的启动顺序从软盘、硬盘或光驱进行启动。以从硬盘启动为例,系统BIOS将主引导记录读入内存。然后,将控制权交给主引导程序,然后检查分区表的状态,寻找活动的分区。最后,由主引导程序将控制权交给活动分区的引导记录,由引导记录加载操作系统。对于DOS和WIN9X等操作系统而言,分区引导记录将负责读取并执行IO.sys(Windows9x的IO.sys)。因为引导记录MBR要负责读取并扫行io.sys,那完全可能是MBR出的问题?那样的话用fdisk/mbr一样可以解决问题的。
2            我们的推断是不能马上成立的,原因在于当系统加电自检通过以后,硬盘被复位,BIOS将根据用户指定的启动顺序从软盘、硬盘或光驱进行启动。以从硬盘启动为例,系统BIOS将主引导记录读入内存。然后,将控制权交给主引导程序,然后检查分区表的状态,寻找活动的分区。最后,由主引导程序将控制权交给活动分区的引导记录,由引导记录加载操作系统。对于DOS和WIN9X等操作系统而言,分区引导记录将负责读取并执行IO.sys(Windows9x的IO.sys)。因为引导记录MBR要负责读取并扫行io.sys,那完全可能是MBR出的问题?那样的话用fdisk/mbr一样可以解决问题的。

返回列表 回复 发帖