|
ms的bug
dos和 win的格式化版本不同
如果有朋友问:“我在用DOS启动盘启动后格式化了C盘,重启后照样进入了原先C盘的操作系统,反而D盘的内容全部不见了。”你会毫不犹豫地回答:“那是因为你的C盘在装系统时或装了系统后被转换成了NTFS格式,而NTFS格式的C盘在实DOS模式下不可见,所以你在DOS中见到并格式化的C盘其实是WIN里面的D盘。”事实如此,NTFS格式的分区在实DOS模式下的不认盘符已经是大多数朋友掌握的知识。
但如果反过来问:“我在用DOS启动盘启动后格式化了D盘,重启后硬盘居然进不了系统,经查看D盘的数据还在,反而C盘的数据没有了。”相信会被搞得一头雾水。下面我们就通过一个实验来解决这个故障现象。为方便说明,对Win2000(NT5.0)/WinXP(NT5.1)/Win2003(NT5.2)我们在下面简称“NT系统”;而“DOS启动盘”则指的是我们现在最常用到的Win98版本的DOS启动盘(MSDOS7.1)。为避免在说清楚问题时盘符上的混淆以及我们针对的故障现象,硬盘的分区格式也定为最常用的FAT32格式。
现在我们以标准格式进行操作来做实验。
第一步:DOS启动盘启动,用FDISK对硬盘进行分区:主分区(C盘)、扩展分区、逻辑分区1(D盘)、逻辑分区2(E盘)、激活主分区。重启后对三个分区用FORMAT进行格式化。(这一步操作也可用PQ或DM进行)
第二步:继续用NT系统光盘启动安装系统至C盘。
第三步:安装完成后进入NT系统。打开我的电脑,右击D盘,选择“格式化”(文件格式仍旧选择FAT32)。完成格式化后再往D盘随便复制几个文件,以方便后来查看格式化结果。
第四步:重启后用DOS盘启动系统,再用FORMAT命令对D盘进行格式化:A:\>format d:或A:\>format d:/q
第五步:重启,故障出现:C盘数据全部丢失,D盘文件仍然存在。
分析:只要跳过上面第三步的操作,无故障发生,那我们就从执行第三步操作的前后找起,执行完第二步后我们先不急于执行第三步,而是用DOS启动盘启动,用DEBUG调入D盘的0扇区数据,查看其BPB表中的变化(一些无影响的BPB表数据这里不介绍了)
A:\>debug
-L 100 3 0 1
-D 11C L4
B7 72 13 02
-Q
上面操作显示的字节十六进制值在BPB表中定义为特殊隐含扇区数,下面略述一下其在FAT32和FAT16格式上的不同之处:
FAT32格式中:该值为该逻辑盘起始扇区相对于第一张分区表(也有称为主引导扇区或硬盘0柱0道1扇区)的扇区数,分区大小不同该值不同。
FAT16格式中:该值为该逻辑盘起始扇区相对于该盘分区表(每个逻辑盘对应一张分区表)所在扇区的扇区数,值一般固定,等同于硬盘参数中的每磁头扇区数,现在的硬盘中的每磁头扇区数都为63个,即十六进制3F,在BPB表中体现为3F 00 00 00。
在实际使用中发现,这个四字节的值除了与活动分区引导系统和格式化有关外,其它的读写操作并未发现有不良影响。
记下刚才的BPB表中的四个字节后继续我们的第三步操作,并且在第四步操作中用DOS盘启动后不先进行FORMAT操作,而再次用DEBUG检查一下第三步的执行结果:
A:\>DEBUG
-L 100 3 0 1
-D 11C L4
3F 00 00 00
-Q
我们发现该值竟然被NT系统的格式化以FAT16的标准重写,而DOS启动盘中的FORMAT命令在针对FAT32格式的分区进行格式化时是通过该值进行确定逻辑盘的起始位置,被重写为3F 00 00 00后就刚好与我们的C盘的起始位置相同。现在执行完FORMAT D:或FORMAT D:/Q后,你的C盘的文件就只能看数据恢复软件有无回天之术了。
在这里还发现NT系统的一个奇怪的现象,懂汇编的朋友可以在NT系统的命令提示符中用DEBUG查询一下虚拟DOS的版本号,居然为5.0版,在实DOS模式中的MSDOS5.0正好只支持FAT16而不支持FAT32,相信在其格式化FAT32格式分区时与填写BPB表中的四个字节有一定的联系。
不只是在NT系统的窗口状态下的格式化,还包括在NT系统安装过程中的格式化、控制台中的格式化操作都会使FAT32格式分区的BPB表中的该值转写为FAT16标准,这就给习惯在DOS下处理问题的朋友留下的隐患。当你准备在实DOS模式下对FAT32格式的非主分区进行格式化时就得慎重了。上面实验的例子中,就算C盘已经转化成NTFS格式(FORMAT D:改成FORMAT C:),也难逃一劫。在网上不时会有朋友提起这类故障现象,希望上面的实验和分析,各位朋友能引以为鉴。
预防:在不清楚自己或朋友机器上的FAT32格式的逻辑分区有没有经过NT系统格式化的情况下,如果真的需要在实DOS模式下进行格式化,可以先执行SYS命令(会修复上面提到的影响FORMAT的BPB表中的四个字节),再执行FORMAT命令,以减少不必要的损失。上面的第四步我们如果先执行A:\>sys d:再执行A:\>format d:/q,就可以正确无误地格式化D盘了。 |
|