一个NTFS分区“K”双击打开时出现如图4-505所示的提示信息。
图4-505 打开分区“K”时出错
这个分区“K”所在的硬盘没有任何物理故障,显然是文件系统遭到破坏,所以系统会提示分区未格式化。用WinHex打开分区“K”,出现如图4-506所示的信息。
图4-506 用WinHex打开分区“K”出错
看来WinHex也无法打开分区“K”,可以断定DBR一定有错误,只能用WinHex打开分区“K”所在的硬盘,然后跳转到“K”盘的DBR扇区,如图4-507所示。
图4-507 “K”盘的DBR扇区
从图4-507中可以看到“K”盘的DBR扇区已经被完全破坏,DBR是文件系统中的一个非常重要的扇区,这个扇区被破坏了,分区当然无法打开。下面来修复DBR扇区。
首先考虑到NTFS分区的DBR有一个备份,在分区的最后一个扇区,如果能把这个DBR找到,直接复制过来就可以了。
因为“K”盘是硬盘的最后一个分区,找这个分区的DBR备份有很多方法,可以通过分区表计算出DBR备份所在的位置,也可以用WinHex搜索来找。
先用WinHex跳转到硬盘最后一个分区,然后向上搜索“55 AA”,如图4-508所示。
图4-508 搜索DBR的备份
硬盘的最后一个分区的DBR备份应该离硬盘尾部很近,但搜索了很长一段距离居然没能找到DBR的备份,看来这个备份也被破坏了。
通常情况下,NTFS分区的DBR备份被破坏的概率是比较小的,但也不能完全排除被破坏的可能。现在来看K盘的DBR备份确实被破坏了,那么只能采取手工重建的方法来修复这个DBR。
手工重建NTFS文件系统DBR的方法与手工重建FAT文件系统DBR的方法类似,都是以计算并修改BPB参数为主,下面实际操作。
第1步 复制同版本的DBR
先从其他NTFS分区中复制一个完好的DBR扇区,放到K盘的第一个扇区处,但不能把这个DBR当作K盘的DBR直接使用,因为虽然目前这个DBR在结构上没什么问题,但其中的参数与K盘的文件系统结构不匹配,所以无法用这个DBR访问K盘。
第2步 计算并修改BPB参数
NTFS文件系统的BPB中需要修改的参数有:
- 每簇扇区数;
- 隐藏扇区数(也就是分区的相对开始扇区号);
- 扇区总数(也就是分区大小);
- $MFT起始簇号;
- $MFTMirr起始簇号;
- 文件记录的大小描述;
- 索引缓冲区的大小描述。
这7个参数需要计算并修改,其他的就不用修改了。
先用NTFS的DBR模板查看一下从其他分区复制过来的DBR,如图4-509所示。
图4-509 复制过来的DBR的模板
图4-509中用汉字标注的7个参数就是需要计算并修改的。下面开始计算这些参数,为了计算的方便,计算时并不按照上面排列的顺序进行。
(1)隐藏扇区数
隐藏扇区数这个参数也就是分区的相对开始扇区号。如果硬盘的分区表没有被破坏,这个参数可以从分区表中查看。现在K盘的分区表并没有破坏,K盘是主扩展分区中的最后一个驱动器,找到它的EBR,用分区表模板查看这个分区表,如图4-510所示。
图4-510 K盘的分区表模板
从分区表模板中可以看到“隐藏扇区数”为63。
(2)扇区总数
扇区总数也可以从分区表中看到,查看图4-510的分区表模板,该值为132 006 042。因为K盘是NTFS分区,所以DBR中记录的扇区总数比分区表中少一个扇区,应该为132 006 041。
(3)$MFT起始簇号
$MFT起始簇号可以通过搜索文件记录的方法获得,搜索文件记录的具体方法是搜索文件记录的头标志“46 49 4C 45”,如图4-511所示。
图4-511 搜索文件记录的方法
通过搜索很快找到了一个文件记录,查看后发现这就是$MFT自身的文件记录,如图4-512所示。
图4-512 $MFT的文件记录
$MFT的文件记录的80H属性中通过Run List描述$MFT文件的开始簇号。当前值为“0C 00 00”,换算为十进制等于786 432,所以$MFT起始簇号为786 432簇。
(4)每簇扇区数
每簇扇区数的计算方法是找一个文件的文件记录,通过其非常驻的80H属性就可计算每簇扇区数。刚才搜索到的$MFT的文件记录中80H属性就是非常驻的,如图4-513所示。
图4-513 $MFT文件记录中的80H属性
该80H属性的模板如图4-514所示。
图4-514 80H属性的模板
从模板中可以看到“数据流分配大小”为48 431 104字节;从Run List中可以看到文件只有一个数据流,该数据流占2E30H簇,换算为十进制等于11 824。用数据流分配的字节数除以数据流占的簇数,结果就是每个簇的字节数,再除以512,也就是每簇扇区数了。具体算一下:48 431 104/11 824/512=8,所以该分区每簇8个扇区。
(5)文件记录的大小描述
文件记录的大小描述用来说明每个文件记录的簇数,该参数为带符号数。当每个文件记录的大小小于每簇扇区数,该值就是负数。在这种情况下,文件记录的大小用字节数表示。计算方法为:文件记录的字节数=2-1×文件记录的大小描述。
刚才计算得到该分区簇大小为8扇区,而每个文件记录的大小固定为2扇区,也就是1024字节,所以簇大小大于每个文件记录的大小。通过计算式2-1×文件记录的大小描述=1024字节,得到“文件记录的大小描述”值为“-10”。
(6)索引缓冲区的大小描述
索引缓冲的大小描述用来说明每个索引缓冲区的簇数,该参数也是带符号数。当每个索引缓冲的大小小于每簇扇区数时,就为负值。
索引缓冲区的大小一般固定为8扇区,而该分区簇大小也是8扇区,所以每个索引缓冲区为1簇。
(7)$MFTMirr起始簇号
刚才通过搜索找到了$MFT的文件记录,该记录的下一个记录也就是$MFTMirr的文件记录了,从$MFTMirr文件记录的80H属性中就能查看到$MFTMirr起始簇号。
$MFTMirr的文件记录如图4-515所示。
图4-515 $MFTMirr的文件记录
$MFTMirr的文件记录中80H属性显示其数据流起始簇号为“7DE409H”,换算为十进制等于8 250 377,所以$MFTMirr起始簇号为8 250 377簇。
第3步 保存修改的BPB参数
将计算好的7个BPB参数填入DBR中,如果有模板就用模板填,没有模板也可以直接在DBR中填写,但要注意,在模板中按照十进制填写,在DBR中直接填写则需要按照Little-Endian字节序填十六进制。填写好存盘,再双击K盘就可以打开了。