网络硬盘数据保护及还原精灵实战
关键字:数据恢复、硬盘维修技术与资料
长期以来,学校机房、网吧等人员流动大,机器很多的场所,系统管理员的工作都非常烦琐,经常要重新安装系统、查杀病毒等。如何对硬盘中现有的操作系统和软件进行保护和还原就成了一个课题。
一、软件系统的保护与还原
长期以来,学校机房、网吧等人员流动大,机器很多的场所,系统管理员的工作都非常烦琐,经常要重新安装系统、查杀病毒等。如何对硬盘中现有的操作系统和软件进行保护和还原就成了一个课题。
系统的保护和还原的方法从原理上来说主要分三类,一是保护,二是还原,三称为虚拟还原。
1.系统保护
系统保护,就是防止硬盘的重要信息被破坏,防止注册表改写和文件I/O操作等。用户被置于一个预先设置好的环境中,只能干此软件系统允许你干的事情。相对而言,这种方法对用户的约束太多,局限很大,对操作系统进程的干预也比较多,运行效率有一定影响。基于这种思路的软件代表有:美萍、网管大师、方竹等等。另外,通过手工修改注册表隐藏一些系统功能也属于这种方法。
系统保护,好比筑堤抗洪,“千里之堤,毁于蚁穴”,系统漏洞可谓防不胜防,事实上水平高点的用户都有办法饶过它的防护。另外,操作系统升级带来系统内部一些功能变化,这些软件也必须做相应修改,很被动。总的来说,这类软件从思路来说是一种被动防御的姿态,效果不会太理想。
系统保护只是对一些操作进行了限制,硬盘上的数据是动态变化的,它不能根据需要恢复到某一个时点的系统内容。
2.系统还原
系统还原,就是预先将系统内容做好全部或部分备份,当系统崩溃或者混乱需要重新安装的时候,将原来的备份进行恢复,将系统内容还原到备份那个时点的内容。这种方法不干预用户的操作,不干扰系统进程。基于还原最简单也最原始的方法是用一个同样大的硬盘一比一地将系统克隆或拷贝下来。更好一点的方法是将系统分区(一般是C盘)用GHOST或WINIMAGE等做个镜像,保存到另外的硬盘或分区上。
系统还原比较于系统保护,虽然有诸多优点,但它的缺点也很明显:需要占用很大硬盘空间,需要大量的还原时间。这些缺点实际上阻碍了它在实际工作中的应用范围,除了家庭用户和一些重要部门对重要数据用这个方法以外,学校和网吧等极少采用这种“笨”办法。
系统还原的特点是可以根据需要将系统还原到备份那个时点的内容。
3.虚拟还原
虚拟还原的工作原理实际上是基于系统保护的,但它的保护做在系统的最底层,先于操作系统,类似于引导型病毒(A型病毒)。它对系统进程有一定干扰,但是这个干扰几乎可以不被察觉。它不干预用户的任何操作,对普通用户来说,可以当它是透明的——根本不存在。
虚拟还原的工作方式又类似于系统还原,可以在需要的时候将系统进行“备份”,这个备份的速度非常快,最多十几秒就可以完成。它需要占用少量硬盘空间,占用率低于数据量的千分之一。同时它的还原速度也是惊人的,同样最多需要十几秒种。
正由于虚拟还原同时具有系统保护和系统还原的优点,又尽可能避免了它们的一些重要缺点,所以基于虚拟还原方式的软件越来越受到用户青睐。这些软件的代表有:还原精灵,虚拟还原,硬盘还原卡(其实是做在硬件上的软件,主要为了防止盗版)等。
虚拟还原的保护看上去相当神奇,如果按系统还原的工作原理来理解,从硬盘占用到还原速度绝对不可思议。它的保护原理在下一节里面再和大家一起分析。
谈谈容量限制的成因
关键字:数据恢复、硬盘维修技术与资料
对于大部分拥有硬盘的用户来说,特别对于那些正在准备升级到大硬盘但是却不打算升级系统的其它部分的用户,它们首先考虑的是自己的系统是否支持这么大容量的硬盘。这个问题同硬盘结构、BIOS和操作系统息息相关--归根到底这些问题的出现是由于当时的人们由于条件所限制而缺乏长远考虑的结果。在当时这样的设计根本没有问题,但是随着技术的进一步发展这些问题就曝露了出来,而且影响颇广。
好在这些问题都已经被通过不同的方式解决了。本章节将会同大家一起来谈谈容量限制的问题。下面的容量限制分别采用两种方式表示,前面的一种采用的是 1GB=1000MB和1MB=1000KB的换算,而后面的容量采用的是1GB=1024MB和1MB=1024KB的换算。
528MB/504MB容量限制
这并不是历史上第一个硬盘容量限制问题,但是它是第一个引起人们广泛关注的容量限制问题。这之前硬盘的容量限制问题也一再的出现过,但是因为PC用户非常的少,所以很多人并不知道这些问题,这里我们做一个简短的回顾:
* 10.4 MB容量限制:这个问题出现在最早的IBM PC/XT上,这种设备使用了一种专门设计的硬盘,它有312个柱面(cylinders)、4个磁头和17个扇区,这样算来它的最大容量只能为10MB,这种容量限制来自于硬盘。
* 16MB FAT12容量限制:第一种用于硬盘的FAT格式是12bit的,它最多能容纳4086个大小为4096字节的簇,因此总容量为16,736,256字节,也就是大约16MB。
* 32MB DOS 3容量限制: 为了解决16 MB容量限制,DOS 3.x开始支持FAT16文件系统,不过由于这种文件系统只能允许16384个容量为=2048字节的簇,所以它就造成了32MB的容量限制问题,不过由于多分区的概念的引入,硬盘的容量并没有因此受到太大的限制,只是每个分区的容量不能超过32MB。
* 128MB DOS 4容量限制:DOS 4.x开始支持65526个容量为2048字节的簇,所以其容量上限提升到了128MB
可以看到上面的这些容量限制的问题大都是由于MS-DOS系统所引起的,这之后的DOS 5允许每个簇的最大容量为8192字节,因此最大分区容量限制为512 MB,不过这个容量限制并没有引起人们的广泛关注,因为在这之前由于BIOS和IDE规范所引起的504MB容量限制首先曝露了出来(大约是1994年左右)。如下表所示:
标准
用于柱面的Bit
用于磁头的Bit
用于扇区的Bit
用于定义整个结构的Bit
IDE/ATA
16
4
8
28
BIOS Int 13h
10
8
6
24
最小定义
10
4
6
20
可以看到IDE/ATA标准和Int 13h组织的标准非常的不一致,因此当分别符合这两个标准的设备配合使用的时候,只能遵循其中的最小规范。下面我们把bit所代表的容量换算了出来:
Standard
最大柱面数
最大磁头数
最大扇区数
最大容量
IDE/ATA
65,536
16
256
128 GB
BIOS Int 13h
1,024
256
63
7.88 GB
最小定义
1,024
16
63
504 MB
对于上面的数字是这样算出来的:1024×16x63×512/1024×1024=504MB,如果不除以1024×1024而是除以1000000的话得到的数字是528MB--按照不同的换算方法,得到的容量不同但是其实指的是一个意思。
2.11/1.97GB容量限制
前面的504MB容量障碍的成因之一是BIOS无法支持超过1024柱面,不过现在的BIOS系统都能支持超过1024柱面。不过当时的部分 BIOS系统虽然却只能支持不超过4095个柱面,这是因为它采用了12bit来表示柱面,这样所支持的最大容量就是4096 x 16 x 63 x 512字节了,也就是1.97GB。这个问题是在1996年左右浮现出来的,可以通过软件的方法来解决。
2.11/2GB容量限制
这个容量限制注意的人们会更多一些,它也是由于文件系统的定义造成的分区容量限制,同BIOS没有什么关系。从DOS 6和Windows 3.x以后开始支持FAT16文件系统,如果在这些系统使用容量超过2GB的硬盘必须对于硬盘进行分区,而且每个分区的容量不会超过2GB。
FAT16最大只能支持65536个32KB容量的簇,那么也就意味着每个分区不能超过2GB的容量。估计现在没有用户还会遇到这个问题了,因为只有DOS、Window 3.x和Windows 95第一版会有这个问题,升级到更高版本的支持FAT32或者NTFS文件系统的操作系统(Windows 95 OEM SR2、Windows 98、Windows ME、Windows 2000和Windows XP都支持FAT32,其中后两者都支持NTFS文件系统)就没有这个问题了。
3.26/3.04GB容量限制
这种容量限制的影响范围也非常的小,只是在一些特殊的机型中才出现过,它的出现是由于BIOS无法正确的识别超过6322桌面而造成的--如果用户试图设置高于6322的柱面,系统将会挂起。这个容量限制是这样计算的:6322柱面 x 16头 x 63 扇区 x 512 字节=3GB
Phoenix BIOS容量限制
这是一个比较特别的容量限制,而且范围也非常的小,只是Phoenix BIOS 4.03和4.04这两个版本上出现的问题。它其实只是BIOS设计的一个对于硬盘容量计算错误的bug,基于这两个版本BIOS推出主板的主板厂商有的矫正的这个问题,有的则没有,因此也不是一个绝对的情况,不过这里还是告诉大家,万一有用户遇到一些不能解释的问题,或许这是一个启发。
这个问题比较怪异,如果用户把IDE设备的磁头数目设置为16,而扇区设置为63,那么柱面设置为6349一下不会有任何问题,也就是说硬盘容量不能超过3.05 GB;如果把柱面数目设置为6350-8322之间,程序将会死锁;如果柱面设置为8323-14671之间,那么系统可以正常的工作,但是硬盘的容量无法正常的显示。不过以后版本的BIOS都修正了这个问题。
4.22/3.94GB容量障碍
在解决了504MB容量限制之后,业界对于通过BIOS结构转换(geometry translation)来解决这个问题驾轻就熟。这种方法主要是把硬盘的柱面数除以转换系数来把IDE/ATA的柱面数限制在BIOS能转换的范围之内(也就是1024之内),当然为了保证正确识别硬盘容量在IDE/ATA磁头数目乘以同一个系数(因为BIOS支持的磁头数是256),从而实现对于超过 BIOS Int13h规范的硬盘的正确支持。不过这样依然会存在一个3.94GB的容量限制。
下面的表格所表示的是如何让一个符合BIOS int13h规范的BIOS正确的支持容量为6.4GB的硬盘:
柱面数目
磁头数目
扇区
容量
IDE/ATA 限制
65,536
16
256
137 GB
硬盘逻辑结构
12,496
16
63
6.45 GB
BIOS转换系数
除以16
乘以16
–
–
BIOS转换后的结构
781
256
63
6..45 GB
BIOS Int 13h 限制
1,024
256
63
7.88 GB
这款6.4GB的硬盘的逻辑结构为12496柱面、16磁头和63扇区,但是BIOS int13h规范最大只能支持1024个柱面,因此通过除以16使得柱面数目低于1024,而磁头数目乘以16这样的方式,既不会影响硬盘的总容量却巧妙的解决了IDE/ATA和int 13h之间不统一的问题。不过,部分BIOS无法正常的支持256逻辑磁头的转换,所以人们变通了一下,把转换系数改为了15:
柱面数目
磁头数目
扇区
容量
IDE/ATA 限制
65,536
16
256
137 GB
硬盘逻辑结构
12,496
16
63
6.45 GB
BIOS转换系数
除以15
除以15
–
–
BIOS转换后的结构
833
240
63
6..45 GB
BIOS Int 13h 限制
1,024
256
63
7.88 GB
可以看到当转换系数改为15之后,依然可以满足BIOS柱面要求,而磁头数目只有240。
7.93/7.38GB容量限制
这个容量限制主要是由于接口的限制所形成的,因为这个。不过,在部分系统上由于Int13h接口的限制它的最大容量只有7.38 GB。
其实这个容量限制的成因前面已经提到了,虽然Int13h接口规范支持1024柱面、256磁头和63个512字节的柱面,不过DOS和部分版本的 Windows无法转换256逻辑磁头,因此只有使用15做为转换系数,这样最大的磁头数目只能是240,因此这个容量限制为:
1024 x 240 x 63 x 512= 7,927,234,560字节
解决这个问题只有通过Int13h扩展方案。
8.46/7.88GB容量限制
这个容量限制更加通俗的称为8GB容量限制,估计很多看到这篇文章的朋友都经历过这次容量限制。起因还是因为Int 13h规范,它仅仅使用10bit来定义柱面数(最大1024),使用8bit定义磁头数目(最大256),使用6bit定义扇区数目(最大64,但是因为不使用0,所以最大是63),每个扇区的容量是512字节,那么最大的容量为8,455,716,864,这个容量限制是无法通过逻辑结构转换来避免的。
这个时候显然必须要对于Int13接口规范进行修改了,Int 13扩展规范则解决了这个问题。因为操作系统也是通过Int 13h来访问硬盘的,所以实现对于Int13扩展接口规范的支持也需要操作系统的支持,DOS 6.22及其以前的版本、Windows NT 3.5都不支持Int13h扩展,因此使用这些系统无法支持8.4GB以上的硬盘。
32/29.8GB容量限制
微软在1999年宣布Windows 95将不支持容量超过32GB的硬盘,不过Windows 98以及Windows Me都对于32GB以上的硬盘提供了很好的支持,其主要的原因是Windows 95中的Scandisk在保护模式下对于容量超过32GB的硬盘进行磁盘扫描的时候,对于967363以后的柱面全部柱面都报错,显然这仅仅是一个软件错误,但是微软宣布Windows 95不支持超过32GB容量的硬盘,显然是不希望用户再使用这个“古老”的系统了。
33.8GB/32GB容量限制
其实这个容量显示是我们通常所说的32GB容量限制,它的起因还是BIOS。部分版本的Award BIOS无法识别超过65535个柱面,最大只能支持16个逻辑磁头和63个扇区,这样最大支持支持32GB左右的容量。这个问题出现在1999年左右,这之后的产品已经很好的解决了这个问题。
其实为了解决8GB容量限制的问题,人们做了比较长远的打算,开始使用LBA来代替原来的使用柱面、磁头、扇区定位的方式,因此对于出现这个32GB容量限制的问题非常的令人费解。
137/128GB容量限制
这个容量限制是由LBA形成的,LBA通过一个28bit的地址定义了268435456个扇区,每个扇区的容量为512字节,这样LBA最大可以支持137438953472字节的容量,以1000字节=1GB来换算的话,就是大约137GB容量。在BIOS中引入LBA模式时可以计算到这个容量限制为137GB,不过那个时候的硬盘容量只有几个GB,137GB只是一个笑话而已,然后硬盘容量的发展速度的确超乎了人们了想像,目前200GB的容量的硬盘已经在市场上销售了。
那么这些大容量硬盘是如何得到正确的支持的呢?Technical Committee T13组织通过一个48bit的地址来定义了更多的扇区,不出意外的相当长的时间里这个解决方案都不会遇到容量障碍的问题(144155188 GB)。不过由于,现在的用于PC的Windows操作系统都是32bit的,这样就带来了一个2200 GB的容量限制,如果最近几年我们使用的操作系统不能过渡到64bit的话,我们很快就会遇到这个容量限制的
数据恢复与软故障处理基本指南
关键字:数据恢复、硬盘维修技术与资料
第一篇、广义的数据恢复
长期以来计算机领域数据恢复似乎缺乏一个把握全貌的,如果说给出一个比较能把握全貌的说法,我们首先应当给计算机数据一个广义的概念,某些人觉得只有类似文本文件、数据库中的记录或表这样的东西才是数据,其实从广义上说,任何位于计算机存储介质上的信息都是数据,无论是哪种介质,也无论是具体作用,他们都是数据。与这种概念对应,任何使这些信息发生非主观意愿之外的变化都可视为破坏。那么数据恢复是就是一个把异常数据还原为正常数据的过程。
一、对数据的潜在威胁
1、恶意的程序:大家最熟悉的恶意程序就是病毒,很多人认为病毒对数据的影响仅仅是病毒的破坏性,这是不正确的,实际上病毒的感染本身就是一种破坏,一个病毒无论他借助修改你的引导区、可执行程序还是OFFICE文档,他都把你正常的数据做了改变,当然,你可能举良性伴随性病毒这种极端的例子。但毫无疑问,他同样对数据构成了破坏,至少他减少了你的硬盘的可用空间。同时,恶意的程序还包括特洛伊木马,逻辑炸弹等等。恶意的程序造成的破坏可能是最难恢复的。
2、其他恶意的破坏,即使不借助病毒或者其他的工具,只要拥有足够的权限,任何系统都有一定的“自毁”能力。比如依靠系统正常的删除、移动、格式化等操作也可以达到破坏数据的目的。随着网络技术的发展,威胁已经不仅仅限于本机,
3、误操作:很多数据丢失源于使用者的操作失误,比如误删除,误格式化等等。
4、操作系统或应用软件的错误:随着操作系统和应用程序的代码量的成倍增加,BUG也在不断增加。我们最常用的桌面系统WIN9X就是一个BUG大王。操作系统和应用软件的错误,往往会给人的工作带来一些不可预期的影响。比如前阶段,发现FRONTPAGE98的一个BUG,触发后会把你目录下的文件全部删除,另外,象著名的游戏神话II,出现了如不安装在默认目录中可能会使你丢失扩展分区这样严重的问题。
5、加密和权限:尽管加密和权限设置是你保护数据的有效手段,但遗忘密码也会带来很大的问题。
6、掉电:机器突然掉电的后果可能不仅仅是内存数据的丢失,也可能造成磁盘数据的丢失,或导致系统无法正常启动。
7、内存溢出:导致内存溢出或者进程非法终止等低层错误的原因很多,他就象掉电一样,会使你损失当前的工作。
8、升级:软件系统升级有时会带来一些问题,后面我们将举相应例子。
9、硬件损坏和失窃:这可能是最严重的威胁之一。有时这把你恢复数据的可能降低为零。
二、数据丢失的各种逻辑现象
对数据的恢复,基本上是一种逻辑处理。只有对情况有一个准确的判定,才能做出准确的应对。一般的来说,问题可以归纳为以下几种情况。
1、硬盘无法完成正确引导:因物理故障造成的逻辑损坏、引导区故障、重要扇区崩溃等等,都会使系统不能完成正常的自举过程。
2、文件丢失:由于有意破坏,误删除等等都会造成数据的丢失。另外,这种归类不仅仅包括某个或某几个文件,也适用于目录,分区或卷的丢失。
3、文件无法正常打开:由于病毒感染,加密,文件头损坏等情况,会使文件无法正常打开。
4、数据紊乱:由于各种因素的影响,数据库中的信息,文本文件等,可能面目全非。
三、保护数据的建议
这个专题是探讨数据恢复的,而不是信息保护的,因此点到为止,一句话,那就是防患于未然,我们列举了对数据的威胁,如果我们最大程度的减弱了这些威胁,对每一种可预知的潜在威胁都有相应的预防和对策,我们的数据安全才会有最大的保障。这些对策主要包括选择良好的反病毒和系统维护产品、加强保安全措施、采用UPS掉电保护、提高用户操作水平和安全意识、形成系统的信息管理和备份制度等等。都可以有效的保证数据的安全,总之,我对数据恢复的认识与病毒是相同的——与其亡羊补牢,不如防患未然。
第二篇、数据恢复的准备知识
1、系统工作机理的简单介绍(本节由lowpower缩写)这一部分在原作中是最重要的一章,考虑到篇幅关系,进行了大量的删节。
①、DOS(DOS兼容系统)硬盘数据的构成
DOS磁盘系统,可以按照逻辑分区的概念管理物理空间,不同分区可以装载不同的OS系统。示意如下:
硬盘空间
第一扇区 | 分区1| 分区2| 分区3|分区4 |
主引导扇区|引导扇区|引导扇区|引导扇区|引导扇区|
各分区公用|各个分区相对独立,可安装不同操作系统。
对FAT结构的分区每一分区都有独立的引导记录,FDT表,FAT表等。同时,系统还有一个最为重要的主引导记录。在0柱0面1扇区,今后我们用CYL代表柱、SIDE代表面,SEC代表扇区。以下一个FAT结构分区的简图。
保留区--磁盘参数表、DOS引导记录
控制区--FAT表1、FAT表2根目录区
数据区--数据区
以下简单介绍一下重要的部分:
主引导记录又称主分区表、MBR等等:MBR占一个扇区,在CYL0、SIDE0、SEC1,由代码区和数据区构成。其中代码区是一端标准的程序,完成BIOS自举到OSBOOT之间的工作,为OS启动做最后的准备。标准代码区可以由FDISK/MBR重建,但对于多系统引导的不标准MBR,将被这一操作破坏。MBR的数据区记录了分区情况。
系统扇区:CYL0、SIDE0、SEC1-CYL0、SIDE0、SEC63,共62个扇区引导区又称BOOT区:CYL0、SIDE1、SEC1这是我们过去称的DOS引导区。也占一个扇区。
文件分配表又称FAT:是记录文件占用簇的情况和连接关系的地方。一般有两个FAT表,起到备份的作用。FAT12、FAT16的第一FAT表一般均在0-1-2,FAT32的第一FAT表在0-1-33。由于FAT表记录文件占用扇区连接的地方,如果两个FAT表都坏了,后果不堪设想。
由于FAT表的长度与当前分区的大小有关所以FAT2的地址是需要计算的。
根目录区(ROOT、FDT):这里记录了根目录里的目录文件项等,ROOT区跟在FAT2后面。
数据区:跟在ROOT区后面,这才是数据内容。
其实,MBR、隐含扇区、BOOT区,重建都比较容易。数据恢复的关键在于恢复数据文件。由于FAT表记录了文件在硬盘上占用扇区的链表,如果2个FAT表都完全损坏了。那么恢复文件,特别是占用多个不连续扇区文件就相当困难了。
②、主引导记录简单说明:
主引导记录是硬盘引导的起点,关于代码区不多说了,其数据区,比较重要的是2个标志,80H和55AA,80H一般在偏移1BE处,80是分区激活的标志的标记表示系统可引导,且整个分区表只能有一个80标记。另一个就是结尾的55AA标记,用来表示主引导记录是一个有效的记录。另外,各个分区自身的引导记录,也是以55AA结束,这是我们查找分区的标志。我们后面在介绍如何主引导记录中,给出了一个完整的分区表的例子,大家可对照查看。数据区中,用10H字节表示一个分区,最多可表示4个分区,分别从1BE、1CE、1DE、1EE开始,我们后面给出了分区表项对应地址的含义。大家可以对应分析一下以下分区的情况。
800101000BFEBFFC3F00-00007E86BB00
①②③④⑤⑥
①:激活标记,80表示可引导分区
②:分区开始的磁头号为01、开始的扇区号为01、开始的柱面号为00,由于开始的扇区号为2进制6位,而开始的柱面号为2进制10位,因此扇区号所用字节的高两位要加在柱面号高两位。
③:分区的系统类型FAT32(0B),01是FAT12,04为FAT16,06为BIGDOS,07为NTFS,其他参见分区类型表。
④:分区结束磁头号254、分区结束扇区号63、分区结束柱面号764
⑤:首扇区的相对扇区号63
⑥:总扇区数12289622
2、常见手工处理工具与DOS外部命令介绍
DEBUG:古老和最为常见的调试跟踪软件,始终捆绑在微软的DOS/WIN9X操作系统中。有19个子命令。有编写执行汇编指令,直接读写绝对扇区和内存单元等功能,可以在最艰苦的条件下工作。DOS6.22以下的系统,DEBUG.EXE在DOS目录下,WIN9X系统中它在WINDOWS\COMMAND目录下,它也出现在WIN9X所生成的应急盘中。
DISKEDIT:常见16进制编辑软件,字符界面,可以以文件方式和扇区方式读写逻辑内容,可以读写绝对扇区,可以方便的查找编辑分区表、FAT表、ROOT区等重要扇区。这一点要比DEBUG更方便。但在一些重要扇区损坏的情况下,DISKEDIT可能无法启动。DISKEDIT软件可以在著名的NortonUtilities软件包中找到。最新的DISKEDIT出现在NU4中。
NDD:常见的FAT文件结构磁盘修复工具,就是著名的NORTON磁盘医生,可以自动修复分区丢失等情况,可以抢救软盘坏区中的数据,强制读出后搬移到其他空白扇区。希望大家不要再使用NORTONFORDOS7或8的NDD,这个版本由于不支持大分区、FAT32、长文件名等技术,会给你带来大量的麻烦。建议大家使用NortonUtilities4或更高版本中的NDD.EXE,这是纯DOS下的工具。在硬盘崩溃或异常的情况下,他可能可以带给用户以希望。WIN9X下的磁盘医生调用的并不是这个程序,而
是NDD32.EXE.
FDISK:FDISK当然是个危险的命令,很多人非常恐惧,事实上,FDISK命令的运行并不影响任何分区内的硬盘数据,他对分区的设置操作,只改变主分区表的数据区。而特别是FDISK异常重要的隐含参数/MBR,可以重建主分区表的代码区,清除主引导型病毒等。这是非常有用的操作。DOS6.22以下的系统,FDISK.EXE在DOS目录下,WIN9X系统中它在WINDOWS\COMMAND目录下,它也出现在WIN9X所生成的应急盘中。
FORMAT:在一些人眼中,FORMAT是最可怕的命令,但他并不是对硬盘清零,特别值得注意的是,很多文件恢复工具都建议你恢复前先FORMAT该分区起到保护的饿作用。DOS6.22以下的系统,FORMAT.COM在DOS目录下,WIN9X系统中它在WINDOWS\COMMAND目录下,它也出现在WIN9X所生成的应急盘中。
HD-COPY:传统的软盘COPY工具,2.0版本以后加入了强制读的功能,可以读出一些损坏扇区的内容。
SYS:SYS命令是重建BOOT区的最简洁的手段,也可以杀除BOOT区病毒。DOS6.22以下的系统,sys.COM在DOS目录下,WIN9X系统中它在WINDOWS\COMMAND目录下,它也出现在WIN9X所生成的应急盘中。
令我非常遗憾的是,至今我没有发现比较出色的扇区级备份镜象工具,我曾写过一个HD-MIRROR,但由于错误较多,我提供下载的第二天就停止了发布,另外fixc的作者noz写过一个clone.exe,但可惜只适合相同的硬盘。我也曾以为GHOST可以做到这点,事实上,你目前还不能指望他为你备份一块深度破损的硬盘。。如果有一个有效的能以按扇区机制(而不是文件机制)压缩备份一块硬盘将之做成一个镜象文件的话,那么我们的恢复工作就拥有了更多的保证和余地。我们可以更大胆的做恢复的尝试。
3、一些自动处理工具或软件包
首先介绍国内的一些免费修复工具
FIXMBR:何公道先生写的一个修复MBR的工具,适合处理逻辑分区丢失的情况,有一些可选参数,支持FAT32、FAT16,不支持NTFS、LINUX等分区,支持8.4G以上硬盘。可修复CIH发作后的扩展逻辑分区。
VRVFIX:北信源公司的推出的修复硬盘共享工具,适合处理逻辑分区丢失的情况,处理的基本比较准确。支持FAT32、FAT16,不支持NTFS、LINUX等分区。也不支持8.4G以上硬盘。
FIXC:国内最早出现的可以修复部分被CIH破坏的C盘的工具,作者是NOZ,新版本也加入了修复分区信息的功能,支持FAT32、FAT16,有限支持NTFS,不支持8.4G以上硬盘。目前的版本已经比较完善。
FIXHDPT:TBSOFT工作室的分区信息修复工具。支持FAT32、FAT16,不支持NTFS和LINUX,不支持8.4G以上硬盘,是历史比较长的工具之一。
RE(ReapirEasy):本人早期写的分区表修复工具,支持FAT32、FAT16,有限支持NTFS,不支持8.4G以上硬盘,和某些BIOS不兼容。其整体水准低于前面列举的工具。国外一些系统维护的工具目前已经达到了非常强大的程度。
NortonUtilities:历史最悠久的系统维护工具。不仅可以数据恢复,还可以系统加速和修补内存错误。目前最新的版本是NU4.5FOR9X、NU2FORNT等。
Tiramint:最为出色的灾难恢复工具之一,有NTFS、FAT32、FAT16、NOVELL4种版本。生成急救软盘,可以对深度破坏的磁盘进行交叉恢复。
4、常用的基本操作
①读出主引导记录:这是系统级数据恢复可能涉及最多的程序之一。例:
DEBUG
-a100;从此处开始汇编
126C:0100movax,201;读操作一个扇区
126C:0103movbx,300;送入地址300
126C:0106movcx,1;0面1扇
126C:0109movdx,80;80H为硬盘,头为0
126C:010Cint13
126C:010Eint3
126C:010F
-g=100;执行
AX=0050BX=0300CX=0001DX=0080SP=FFEEBP=0000SI=0000DI=0000DS=126CES=126CSS=126CCS=126CIP=010ENVUPEIPLNZNAPONC
这里用了I/O中断13,涉及的寄存器含义为ah,操作方式,02H为读,03H为写,al送扇区数,bx送准备装入扇区的内存偏移地址,cx送从哪一道哪一扇区开始,我们一般依靠改换CX来读写不同逻辑盘某个逻辑扇区。dx送盘符和头数INT 3是断点中断,使程序运行到此停止。
②显示引导区内容:我们把扇区读到某个内存地址并不是目的。而是为了看到他的内容,在DEBUG中D命令可以方便的查看内存单元的内容。续前例,如果我们要看到主引导区的内容的话,既然装载到300。-d300l200就可以查看了,一个引导区的映象类似如下,可以直观的看到我们前面所提到的代码区和数据区。是否正常请大家自行分析一下
126C:030033C08ED0BC007CFB-5007501FFCBE1B7C3…..|.P.P….|
126C:0310BF1B065057B9E501-F3A4CBBEBE07B104…PW………..
126C:0320382C7C09751583C6-10E2F5CD188B148B8,|.u………..
126C:0330EE83C61049741638-2C74F6BE10074EAC….It.8,t….N.
126C:03403C0074FABB0700B4-0ECD10EBF2894625<.t………..F
126C:0350968A4604B4063C0E-7411B40B3C0C7405..F…<.t…<.t.
126C:03603AC4752B40C64625-067524BBAA5550B4:.u @.F.u$..UP.
126C:037041CD1358721681FB-55AA7510F6C10174A..Xr…U.u….t
126C:03800B8AE0885624C706-A106EB1E886604BF….V$…….f..
126C:03900A00B801028BDC33-C983FF057F038B4E…….3…….N
126C:03A025034E02CD137229-BE4607813EFE7D55.N…r).F..>.}U
126C:03B0AA745A83EF057FDA-85F67583BE2707EB.tZ…….u..’..
126C:03C08A98915299034608-13560AE812005AEB…R..F..V….Z.
126C:03D0D54F74E433C0CD13-EBB8000000000000.Ot.3………..
126C:03E05633F65656525006-5351BE1000568BF4V3.VVRP.SQ…V..
126C:03F05052B800428A5624-CD135A588D641072PR..B.V$..ZX.d.r
126C:04000A4075014280C702-E2F7F85EC3EB7449.@u.B……^..tI
126C:04106E76616C69642070-6172746974696F6Envalidpartition
126C:0420207461626C650045-72726F72206C6F61table.Errorloa
126C:043064696E67206F7065-726174696E672073dingoperatings
126C:0440797374656D004D69-7373696E67206F70ystem.Missingop
126C:045065726174696E6720-73797374656D0000eratingsystem..
126C:04600000000000000000-0000000000000000…………….
126C:04700000000000000000-0000000000000000…………….
126C:04800000008BFC1E578B-F5CB000000000000……W………
126C:04900000000000000000-0000000000000000…………….
126C:04A00000000000000000-0000000000000000…………….
126C:04B00000000000000000-0000000000008001…………….
126C:04C001000BFEBFFC3F00-00007E86BB000000……?…~…..
126C:04D081FD0FFEFFFFBD86-BB00E0A975000000…………u…
126C:04E00000000000000000-0000000000000000…………….
126C:04F00000000000000000-00000000000055AA…………..U.
③反汇编主引导区内容:判定MBR的代码区是否正常,对于数据区的基本情况,我们可以通过直观观察得出,但对于存在引导型病毒,或者引导区出现异常代码的情况,我们可能需要分析MBR中代码区的指令。这一般要对已经读入内存的引导区进行反汇编。反汇编用指令U,续前例:
-u300l15D;反汇编主引导扇区代码区内容
126C:030033C0XORAX,AX
126C:03028ED0MOVSS,AX
…………
126C:045C65DB65
126C:045D6DDB6D
④写内存单元,在我们的前例中,主分区类型是0B是FAT32的,假定这个类型实际是NTFS的,我们该如何修改呢?由于主分区类型的偏移是4C3H,我们可以用E命令写到内存单元中,从附表中查得NTFS的类型为07。因此-e4c37再比如说,假定我们想把无效的分区表清零,那么,我们应当用另一个命令F,这个命令可以用填充一个内存地址范围。清零分区表的操作就是-f4be4ff00,以下两个操作也比较常见。
重置80标记,-e4be80
重置55AA标记,-f4ff4fe55aa
不要忘记了,此时仅仅是改动了内存中的数据,并未写到硬盘上。因此需要用int13中断把改写的结果,写回硬盘。续前例,
-a100
126C:0100movax,301;写操作一个扇区
-g=100;执行
其实,我们相当于修改了刚才输入的读主引导扇区程序,使程序变为。
126C:0100movax,301;写操作一个扇区
126C:0103movbx,300;从内存地址300
126C:0106movcx,1;0面1扇
126C:0109movdx,80;80H为硬盘,头为0
126C:010Cint13
126C:010Eint3;断点
⑤绝对磁盘内容的读出与写入
类似操作在FAT32结构硬盘被CIH破坏的修复中比较常见,我们后面将讲到恢复的基本思路就是用第二FAT表覆盖第一FAT表。那么无疑要读出第二FAT表的内容,再回写到第一FAT表的位置上。一般的来说,大量连续扇区的读出写入DISKEDIT进行非常方便,如果用DEBUG做则要写一段子程序,不过程序的主要技巧就是利用int25绝对磁盘读中断读出的内容,而用int26绝对磁盘写做内容写入。
5、数据可恢复的前提
有人觉得这个题目说法比较奇特,但数据恢复,作为一个数据再现的过程,一定要解决两个问题,第一是从哪里恢复的问题,第二是怎么恢复的问题。解决了这两个问题,我们事实上就把握了数据恢复的全部思想脉络。而这一部分就是从哪里恢复的问题。
①、有效而及时的备份中是数据恢复最可靠的来源,在许多人倡导备份到秒的今天,恐怕不会有人怀疑这点。而有些备份机制则是系统内建的,比如两份FAT表。
②、数据的实际有效性的判定是关键,对我们来说,硬盘无法自举、文件找不到、文件打不开等现象,其实并不与数据丢失画等号。因为此时往往数据只是从操作系统的角度是一种逻辑丢失,而从物理扇区意义上,它仍然存在或部分存在。最明显的就是文件删除的例子,事实上,这只是把文件首字节,改为0E而已。而此时文件体依然存在。
③、数据损坏过程的可逆性分析:对数据的改变无非两种,取代和变换,前者是不可逆的,而后者则是可逆的。我们以杀毒为例,对于大多文件性病毒来说,那些以附加而非代换方式感染的文件型病毒,理想的杀毒过程就是感染的逆过程。这种分析也常见与重要信息被隐藏搬移或者被加密的情况,但分析将比较复杂。
④、数据本身是否是标准信息:有些信息实际是通用或局部通用的,你无须考虑如何从本机抢救。只要相同或相近的系统版本就可以了,比如BOOT区、隐含扇区、WINDOWS的DLL文件等等。典型的例子如分区表的代码区,这是一段标准代码,事实上,它就放在你的FDISK程序里面,你可以用DEBUG把他提取出来。
⑤、数据本身是否可以由其他信息统计再生:有些信息尽管丢失了,也没有备份。但它实际可以从其他数据中间接求得。最典型的就是主分区表中的分区信息,即使你把他清零也不必害怕,因为你可以从你几个分区中计算再生。
⑥、破坏的完成程度:事实上,FDISK、FORMAT都不会彻底破坏数据,一般只有低格和扇区覆盖操作才会彻底破坏数据。但有时,破坏过程或者误操作过程会因人工终止、死机等原因不能完成。最明显的就是CIH病毒的例子,由于CIH是以1024字节为单位覆盖扇区,这当然是不可逆过程,于是我们最初都认为,破坏是很难恢复的,除非人工终止。事实上,当病毒覆盖某些扇区时会与9X系统发生冲突,从而造成死机,使数据得到了保护。
第三章、数据恢复基本攻略
1、硬件或介质问题的情况
①、硬盘坏:硬盘自检不到的情况一般是硬件故障,又可分为主版的硬盘控制器(包括IDE口)故障和硬盘本身的故障。如果问题在主板上,那么数据应当没有影响。如果出在硬盘上,也不是一定不能修复。硬盘可能的故障又可能在控制电路、电机和磁头以及盘片。如果是控制电路的问题,一般修好它,就可以读出数据。但如果电机、磁头和盘片故障,即使修理也要返回原厂,数据恢复基本没有可操作性。
②、软盘坏:当软盘数据损坏时,可以有几种处理,一种是用NDD修复,他会强制读出你坏区中的东西,MOVE到空白扇区中,这就意味着如果你的磁盘很满操作是没法进行的。你也可以用HDCOPY2.0以上版本READ软盘,他也会进行强读,使读入缓冲区的数据是完好的,你再写入一张好磁盘就可以了。当然这些方式,要看盘坏的程度。如果0磁道坏,数据也并非无法抢救,早先可以通过扇区读的方式,把后面的数据读出,不过一般来说,你依然可以HDCOPY来实验。
2、系统问题的情况
①、在硬盘崩溃的情况下,我们经常要和一些提示信息打交道。我们要了解他典型提示信息的含义,注意这些原因仅仅分析逻辑损坏而不是硬盘物理坏道的情况。
提示信息
可能原因
参考处理
InvalidPartitionTable
分区信息中1BE、1CE、1DE处不符合只有一个80而其他两处为0
用工具设定,操作在前面已经讲了。
ErrorLoadingOperatingSystem
主引导程序读BOOT区5次没成功。
重建BOOT区
MissingOperatingSystem
DOS引导区的55AA标记丢失
用工具设定,把前面读写主引导区程序的DX=80改为180即可
Non-SystemDiskorDiskError
BOOT区中的系统文件名与根目录中的前两个文件不同
SYS命令重新传递系统,
DiskBootFailure
读系统文件错误
SYS命令重新传递系统,
InvalidDriverSpecifcationg
如果试图切换到一个确实存在的逻辑分区出现以下信息,说明主分区表的分区记录被破坏了。
根据各分区情况重建分区表,或者用自动修复工具修复。注意分区丢失是最常见的故障之一,此时不要紧张,一般的说此时数据并没有问题,如果你不了解处理的方法。你可以选择我前面介绍的自动修复分区工具进行处理,他们大多只改写主分区表的数据区,不会影响你的其他数据。特别提醒大家,这些工具有的不支持8.4G硬盘,有的与BIOS对硬盘的识别有关系。如果你在一台机器上不行,可以换台BIOS不同的机器实验一下。
Badormissingcommandinterpreter
这是说找不到COMMAND.com,或者COMMAND文件坏了。
如果你COPY过去COMMAND文件还是如此,一般来说是感染了某种病毒。
Invalidmediatypereadingdrive
X,Abort,Retry,Fail?
该盘没有高级格式化,或BOOT区中I/O参数表被破坏。
这里情况较多,手工处理比较复杂,特别指出,此时DISKEDIT可能无法运行,建议用工具修复。
IncorrectDOSVersion
可能是文件版本不统一,对9X来说,有95,95osr/2,98,98oem/2等版本,重新SYS时,不要弄错了。
用正确版本的启动盘重新SYS系统。
另外说明一下,对于比较老的机器还有1071和notfoundrombasic、ROMBASICOK等提示,在目前机器中以消失。另外,当代码区完全被破坏的情况下,系统关于无系统的提示是来自BIOS的,这条提示与BIOS的种类有关。另外,FDISK/MBR对代码区的重建是我们经常采用的。再介绍一种比较极端的情况,就是硬盘自检正常,而用软盘和硬盘都无法正常启动的情况,这可能是,病毒或恶意程序利用,DOS3以上版本启动中都要检索分区表这一特点,把分区表置为死循环。造成启动中死机。网上曾经流传过DOS6.22k修改方案,其实是修改西文MS-DOS6.22的IO.SYS,把C20306E80A00077203替换为:C20390E80A00728090就可以启动被类似情况锁住的硬盘。
②、WIN9X无法正常进入或工作:以下仅仅是对可能的软故障分析,没有考虑硬件故障.
进入图形界面前死机情况比较复杂,可能与加载的某些驱动有关可以在STARTMSWINDOWS时,用F8激活菜单,设置为stepbystep,看是哪项使系统死机。而后从CONFIG或者SYSTEM。INI中删除
进入图形界面后死机:一般这与开机加载的程序有关进入安全模式(此时自动运行的程序将不能加载),对注册表中的HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run*中的键值和启动组中加载的程序进行分析。必要的予以删除。
显示IEXPLORE.EXE错误,不能进行任何操作可能有某个系统的动态连接库损坏覆盖安装WIN9X,或从其他机器上COPY损坏的连接库。(确定哪个库损坏一般比较困难)
频繁出现出错各种信息:一般是虚拟内存不足造成的看C盘是否剩余空间过少,或者打开的应用程序和窗口太多。
2、全盘崩溃和分区丢失
首先重建MBR代码区,再根据情况修正分区表。修正分区表的基本思路是查找以55AA为结束的扇区,再根据扇区结构和后面是否有FAT等情况判定是否为分区表,最后计算填回,主分区表,由于需要计算,过程比较烦琐,就不仔细介绍了,希望大家用前面介绍的工具,比如NDD处理。如果文件仍然无法读取,要考虑用TIRAMINT等工具进行修复。如果在FAT表彻底崩溃的情况下,恢复某个指定文件,可以用DISKEDIT或DEBUG查找已知信息。比如文件为文本,文件中包含“软件狗”,那么我我们就要把他们转换为内码C8EDBCFEB9B7进行查找。
3、文件丢失、误格式化的情况
一般的来说,文件删除仅仅是把文件的首字节,改为E5H,而并不破坏本身,因此可以恢复。但由于对不连续文件要恢复文件链,由于手工交叉恢复对一般计算机用户来说并不容易,在这篇缩略版中就不讲了,建议用工具处理,如果已经安装了NortonUtilities,可以用他来查找。另外,RECOVERNT等工具,都是恢复的利器。特别注意的是,千万不要在发现文件丢失后,在本机安装什么恢复工具,你可能恰恰把文件覆盖掉了。特别是你的文件在C盘的情况下,如果你发现主要文件被你失手清掉了
,(比如你按SHIFT删除),你应该马上直接关闭电源,用软盘启动进行恢复或把硬盘串接到其他有恢复工具的机器处理。误格式化的情况可以用工具处理。
4、文件损坏的情况
一般的说,恢复文件损坏需要清楚的了解文件的结构,并不是很容易的事情,而这方面的工具也不多。不过一般的说,文件如果字节正常,不能正常打开往往是文件头损坏。就文件恢复举几个简单例子。
类型
特征
处理
ZIP、TGZ等压缩包无法解压
ZIP文件损坏的情况下可以用一个名为ZIPFIX的工具处理。不过如果你的文件是从FTP站点上下载的,那么有可能是你没有定义下载模式为BIN。
自解压文件无法解压
可能是可执行文件头损坏,可以用对应压缩工具按一般压缩文件解压。
DBF文件死机后无法打开
典型的文件头中的记录数与实际不匹配了,把文件头中的记录数向下调整,遗憾的是公式我找不到了。
5、硬盘被加密或变换
此时千万不要FDISK/MBR,SYS等处理,否则可能数据再也无法找回,一定要反解加密算法,或找到被移走的重要扇区。对于那些加密硬盘数据的病毒,清除时一定要选择能恢复加密数据的可靠杀毒软件。
6、文件加密后密码遗忘
对于很多字处理软件的文件加密和ZIP等压缩包的加密,你是不能靠加密逆过程来完成的,因为那从理论上是异常困难的。目前有一些相关的软件,他们的思想一般都是用一个大字典集中的数据循环用相同算法加密后与密码的密文匹配,直到一致时则说明找到了密码。你可以去寻找这些软件,当然,有些软件是有后门的,比如DOS下的WPS,Ctrl qiubojun就是通用密码。Undiskp的作者冯志宏是解文件密码的个中高手,大家不妨去他的主页看看。
7、系统用户密码遗忘的处理:最简单的方法就是用软盘启动(NT的你也可以把盘挂接在其他NT上),找到支持该文件系统结构的软件(比如针对NT的NTFSDOS),利用他把密码文件清掉、或者是COPY出密码档案,用破解软件套字典来处理。前者时间短但所有用户信息丢失,后者时间长,但保全了所有用户信息。对UNIX系统,我建议你一定先做一张应急盘。
第四章、恢复实例
下面举一些数据恢复或者软故障处理的例子,这些事例是从我参与大量的故障处理中选取的一些典型事例。在选取典型事例中,遵循了以下原则。
①、处理过程能够表现一定思想,而不是纯粹的技术手段。
②、处理过程本身并不算复杂,基本不出现汇编程序,一般读者能够理解。
③、处理过程本身并不完美,中间可能犯了一些错误,有的甚至局部失败。可以使大家引为借鉴。
④、处理过程本身并不仅仅是纯粹的逻辑思维,有人的心理活动对技术的干扰。以使大家能更好的避免这些。
1、被CIH破坏硬盘恢复一例
委托恢复人:某银行
硬盘情况:CIH发作,蓝屏死机。该单位电脑人员曾用KV300F10进行修复,但没有成功,又恢复了保存的MBR。
修复工具:
准备好软盘3张:
DISK1-WIN98启动盘(带DEBUG)
DISK2-DISKEDIT等工具(此盘不要写保护)
DISK3-DOS下杀CIH的工具
基本思想:
1、FAT2没有损坏的情况,用FAT2覆盖FAT1。
2、FAT2也已经损坏的情况,我一般是只期待找回其中某些关键的文件了。
我们最期待的是这些文件是连续的。如果不连续的话,也并非没有可能,但这往往还要知道文件的一些细节,包括对一些文件本身的连接结构有了解。如果FAT2没有完全破坏,是有一定用处的,另外,一般来说,FAT16的硬盘因为FAT表靠前破坏的比较严重,一般两个FAT表都坏了,小硬盘也很难恢复了。
修复过程:
把我的硬盘摘下,挂上待恢复的的硬盘,开机,进入SETUP,检测硬盘,把参数记下——CLY620HEAD128PRECOMP0LANDZ4959SECTOR63MODELBA。用准备好的软盘启动:
A:>C:
显示Invaliddrivespecification
FDISK/MBR重建主引导记录。(这是个习惯),重新软盘引导:(可能没有必要)。
此时已经看的见C:硬盘。
启动DISKEDIT,启动过程中显示InvalidmediatypereadingDRIVERC,哎呀,算了,还是先用DEBUG清空分区表,,并置80和55aa标志。
重新启动,再运行DISKEDIT,显示设定为READONLY,没关系,把TOOLS/CONFIGURATION中的只读选项去掉,存盘,好了,可以编辑了。由于当时接的硬盘有多块,我把这块当成了是一块只有C分区,所以没看别的东西,我们期待FAT2没有损坏,以用FAT2覆盖FAT1,在这个时候DISKEDIT要比DEBUG容易的多,在FINDOBJECT中选择FAT,查一下起始扇区,好的,在CYL0SIDE68SEC14,0000H,F8FFFF0F(FAT32的),好的,FAT2没坏。其实如果不用DISKEDIT的可以用一端小程序查,偏移0000的F8FFFF。
由于以为只有C分区,所以,上来就在FIND中查找IOSYS(IO和SYS中要有空格)以查找ROOT区。找到后观察,是否有C:\下常见文件。好的,ROOT区没被破坏。记下了该扇区的CYL0、SIDE68、SEC14,备用。FAT1一般前面已经被破坏了,但后面应该还在,这可以作为检查。因为是32位的,FAT1一般在CYL0SIDE1SEC33。因为有了ROOT区然后应该计算FAT表的长度了,因为FAT2到ROOT前一扇区为止,所以非常简单。
然后可以用FAT2覆盖FAT1,这里用DEBUG还是DISKEDIT都可以,如果用DEBUG一般是用INT25读绝对扇区,再用INT26写入,用DISKEDIT则比较简单。程序:(略)
然后可以恢复主引导记录、隐含扇区和BOOT区,可以先用NDD修复分区表,其他可以考虑可以考虑用标准覆盖法,如果你希望下一步由NORTONUtilities来接手,这些都可以不做。我从另一台FAT32的机器上取来了相应的部分,写了进去。我这时发现好象有一个D盘。先看一下在说吧。
好了,关机串上我的硬盘,用NORTONUtilities4扫描C盘,文件基本恢复,对C盘杀毒,WHY,没有发现病毒,换了2种杀毒软件还是没有病毒,现在显示C盘是948M,有一个D盘,但是95下无法浏览,DOS下乱码。于是打电话核实当时的情况,原来是26日那天,放进一张光盘,光驱灯亮了一会,就硬盘狂响,蓝屏死机了。应该证实我的推断一样,是光盘的AUTORUN程序有CIH病毒。所以说没有实时防御能力的软件是没有意义的。另外,他们的硬盘确实分两个区,而且重要文件在D区。然后在修复D盘吧,再回到DOS,用DEBUG查找结束标志为55AA的扇区,然后根据后面是否有FAT判定是否为扩展分区。此时可算出大小来返回修订主分区表。当然,许多工具也可以很好的完成这一工作。如果你没有把握,就用他们完成好了。其实我就是用自己的RE做的,否则手工做确实太麻烦。
经验总结:
①、你不要听信或者凭记忆想一块硬盘该是怎么样的,一定要自己去看,我就是犯了这个错误。
②、某些软件的修复功能确实如一些网友所讲可能有一定隐患,如果银行的电脑人员在用KV300F10处理之前没有备份,可能要给我找些麻烦。
我们应当看到,恢复数据要本着几项原则。
①、最好先备份,这也是而后我写HD-MIRROR的原因
②、优先抢救最关键的数据
③、在稳妥的情况下先把最稳定的鸡蛋捞出来,(理应先修复扩展分区,再修复C),最好修复一部分备份一部分。
④、要先作好准备,不要忙中出错,此间,由于我的机器没有装过NORTON,先解压,习惯的敲了一个D:\TEMP,这才想起来D盘已经是人家的硬盘,文件险些解在没有完全修好的C盘上。这种错误有时会经常发生。
2、LINUX错误安装带来问题一例
委托恢复人:某信息港
硬盘情况:4.3G硬盘,分三个区,D、E中有很多重要数据。原来装95系统,做主盘。在试图向从盘上装LINUX的时,误将安装盘符选为C,而后发现终止,此时硬盘无法自举。软盘启动无法看到任何有效分区。
工具准备:
DISK1-WIN98启动盘(带DEBUG)
DISK2-DISKEDIT等工具(此盘不要写保护)
修复思想:
修复分区表中的扩展分区,重置主分区的分区类型。
修复过程:
用软盘启动,FDISK/MBR清除LILO,重建代码,用DISKEDIT调入MBR观察,已经没有了扩展逻辑分区的信息。80激活分区的类型已经变成83(LINUX)这时我犯了与前面类似的错误,本应先修复分区信息,但我却依然去先试图C。而且修复C的时是否我又犯了一个致命的错误,那就是我算错了C盘的大小。本来C盘是650M左右的一个分区,应当把分区类型置为06H(大DOS),而我误算C为340M,因此我置为了04H(普通FAT16),这时我想对C做进一步修复,就把硬盘串到我的机器上,开机后C盘可见,文件似乎完好。此时我选择用NU来自动修复它的C盘。最后的结果是,由于我选错了分区类型,修复使C盘彻底崩溃。我重新起机后,再试图用NU检测C时,我的98
马上蓝屏,另一个恶果就是我决定从软盘启动,用DISKEDIT查看时,发现可能由于I/O参数表的损坏,DISKEDIT无法启动了。而后,我用RE恢复分区表,但在我的方正上,RE竟然溢出,后来,我找到一台兼容机,在上面运行RE,这才恢复了D、E两个分区。此时,委托我恢复的朋友打来电话,说只找到D、E就可以。我这才放心。
经验总结:分区类型只是一个字节,却会带来如此严重的后果。可见,修复数据必须异常慎重。
3、NTSERVER硬盘崩溃一例
相应情况:
这是单位里的一台NT服务器。三个NTFS分区,有重要数据在内。硬盘崩溃,不能启动,软盘启动后,用NTFSDOS不能映射任何逻辑分区。
工具准备:
DISK1-WIN98启动盘(带DEBUG)
DISK2-DISKEDIT等工具(此盘不要写保护)
修复过程:
用DEBUG读取主分区表,发现完全混乱。反汇编后发现为一段有逻辑意义的代码,我当时十分紧张,以为硬盘被加密了。只好向一个高手HIT-007求援,不料他用DEBUG看了两下,马上退出来,做了FDISK/MBR。我大惊失色。但重起后,硬盘竟能启动进入NT,当然只剩下C一个分区。而后我很容易的恢复了另外两个分区。他对我说,你一看MBR中的内容就被吓住了,我向后看后面的一些系统扇区情况都是正常的。这就说明只是MBR不正常而已。
经验总结:数据恢复中情绪的因素很重要,无论什么情况不能慌张,因为这可能影响到你是否能全面冷静的思考。
4、NOVELL服务器掉电问题一例:
相应情况:
这是两年前处理过的一个问题,我当时在某证券营业部兼职做网管,开市时,一台NOVELL服务器因UPS故障突然掉电重起。当时的交易系统还是DBF数据库,按照规程,应该运行一个全部数据库重建索引例程。但索引中,却有7个库无法重建,检查发现,是库无法打开。
修复情况:
我恍惚记得深圳一个证券界电脑工程师对我说过,DBF文件头在突然死机中可能会损坏。但不知细节如何。我初步判定,由于库写入时,先修改文件头中的记录总数,再写入记录。可能是掉电时文件头已经修改但记录没有成功写入,因此,应该是记录数不符。但文件头中记录数在哪里呢。我于是这样处理,把这些损坏的数据库和一个完好的数据库COPY到本地,用FOXPRO打开看到记录数,换算成16进制。然后查找这个HEX串,判定找到记录数地址,(这个库记录数应当比较多,减少混淆的可能,否则容易找错)。由于我不知道处理DBF的公式,只好把损坏数据库的记录数每次减一,然后再用FOXPRO打开实验。其中5个数据库减一后就可以打开,只有一个数据库直到减4后才正常。全处理过程从掉电开始只有20分钟,基本没有影响交易进行。
经验总结:当出现问题,但你不知道确切的处理方法时,要充分进行分析。
5、某财务系统数据处理一例:
相应情况:
也是我在证券公司处理的情况,某单机版财务系统,基于Clipper,当时是年初安装,使用正常至6月份底,突然发现该月数据紊乱,与实际出入巨大。出品公司的人来看过后,声称需要1周处理时间和近万元的处理费,我听说后,建议财务部拒绝其“讹诈”,由我来处理。
分析处理过程:
由于我对财务一窍不通,我请财务经理讲明了情况和一些概念,又分析了系统的大致结构。我发现本月每一笔数据都是正常的,只是因为多了上千笔没有发生的收支,才使汇总表发生了变化。那么这些数据是哪里来的,就成了问题的关键。在看了该软件的初始状态后,我似有所悟,问财务软件初装后并没有的上百个“科目”是从哪里建立的。财务经理回忆是上年底从某营业部发来的,我当时就明白了,那个营业部是上一年6月成立的,问题显然出在该营业部提供的初始科目不为空,由于上年1-5月该营业部尚不存在,所以数据为空,而该营业部6月以后的数据则随科目转入了我所在营业部的财务系统。经过对当初转入初始科目的对照,证实了我的判断。于是,我做了一段程序,按照对应关系把相关数据从系统库中摘除。从分析问题到问题的解决,只用了三个小时。
经验总结:
①、当出现数据紊乱时,很重要一点就是找到干扰源。
②、数据处理绝非仅仅就是一个技术问题,特别是金融系统,一定要得到这方面的专业人士的配合。我想如果没有那位财务经理的信任鼓励和让我对会计知识的速成,问题处理就不会如此顺利。
这只是一些简单恢复的例子,类似的,大家可以将在完整版的文章中看到更多。想说明一点,有一些朋友建议过我把一些复杂的灾难恢复和数据抢救的细节写出来,但因为这些涉及到相关单位一些系统信息等等,就对不起大家了。最后,如果相关问题的话,大家可以到我们主持的169电脑医院查找更多资料,我们的虚拟域名是usafe.yeah.net
–附表:
1、磁盘分区表
地址|说明|字节数
1BEH|分区信息1|10H
1CEH|分区信息2|10H
1DEH|分区信息3|10H
1EFH|分区信息4|10H
1FFH|结束标志55AA|2H
2、分区信息说明
偏移长度含义
0|字节|激活状态,80H:活动分区(可引导区),0H:非活动分区
1|字节|分区起始的磁头
2|字|分区起始的扇区和柱面
4|字节|分区类型
5|字节|分区终止的磁头
6|字|分区终止的扇区和柱面
8|双字|分区起始决对扇区
0CH|双字|分区扇区数
3、分区类型表(这是一个比较全的分区类型表了)
0Empty
1FAT12
2XENIXroot
3XENIXusr
4FAT16<32M
5Extended
6FAT16
7HPFS/NTFS
8AIX
9AIXbootable
aOS/2BootManag
bWin95FAT32
cWin95FAT32(LB
eWin95FAT16(LB
fWin95Ext’d(LB
10OPUS
11HiddenFAT12
12Compaqdiagnost
16HiddenFAT16
14HiddenFAT16<3
17HiddenHPFS/NTF
18ASTWindowsswa
24NECDOS
3cPartitionMagic
40Venix80286
41PPCPRePBoot
42SFS
4dQNX4.x
4eQNX4.x2ndpart
4fQNX4.x3rdpart
50OnTrackDM
51OnTrackDM6Aux
52CP/M
53OnTrackDM6Aux
54OnTrackDM6
55EZ-Drive
56GoldenBow
5cPriamEdisk
61SpeedStor
63GNUHURDorSys
64NovellNetware
65NovellNetware
70DiskSecureMult
75PC/IX
80OldMinix
81Minix/oldLin
82Linuxswap
83Linux
84OS/2hiddenC:
85Linuxextended
86NTFSvolumeset
87NTFSvolumeset
93Amoeba
94AmoebaBBT
a0IBMThinkpadhi
a5BSD/386
a6OpenBSD
a7NeXTSTEP
b7BSDIfs
b8BSDIswap
c1DRDOS/sec(FAT-
c4DRDOS/sec(FAT-
c6DRDOS/sec(FAT-
c7Syrinx
dbCP/M/CTOS/.
e1DOSaccess
e3DOSR/O
e4SpeedStor
ebBeOSfs
f1SpeedStor
f4SpeedStor
f2DOSsecondary
feLANstep
ffBBT
4、DOS8 3结构磁盘目录项
偏移|说明|长度(10进制)
00H|文件名|8
08H|扩展名|3
0BH|属性|1
0CH|保留区|10
16H|生成/最后修改时间|2
18H|生成/最后修改日期|2
1AH|起始簇|4
1CH|字节长度|4
RTF文件结构分析及其应用
关键字:数据恢复、硬盘维修技术与资料
RTF是一种非常流行的文件结构,很多文字编辑器都支持它,VB等开发工具甚至还提供了Richtxtbox的控件。编写通用工具的程序员应该考虑在自己的软件中加入读写RTF文件的功能,这样就需要对RTF的结构有充分的了解。而现在最重要的信息发布手段莫过于WWW了,在编辑软件中提供RTF到 HTML的转换也是程序员应该考虑的事情。尽管WORD中已经有这个功能,但不能因此就对您的顾客说:“先用我的程序存成RTF,然后再用 WORD……”。
下面将对RTF文件结构分析及其应用进行讨论。
一、RTF文件结构分析
RTF的结构并不复杂,但内容繁多,本文不可能一一说明,只能从总体上讨论一下(如果想阅读详尽的RTF文档,则可在Internet上寻找或与笔者联系。)每个RTF文件都是一个文本文件,显示时由RTF阅读器格式化。文件开始处是{\rtf,它作为RTF文件的标志是必不可少的,RTF阅读器根据它来判断一个文件是否为RTF格式。然后是文件头和正文,文件头包括字体表、文件表、颜色表等几个数据结构,正文中的字体、表格的风格就是根据文件头的信息来格式化的。每个表用一对大括号括起来,当中包含了很多用字符“\”开始的命令。例如,某个颜色表如下:
{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\ blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}
开始时用\colortbl标明大括号内是颜色表,接着是\red0\green0\blue0,登记了一种颜色,这种颜色的红绿蓝分量都为 0。其它表依此类推。文件头之后是正文,正文由版面格式化命令、文字和各种特殊命令组成。其中只有特殊命令用大括号括起来,而版面格式化命令和文字是“开放式”的,从而把文字和命令分离。文件结束时有一个“}”,和第一个“{”对应。在整个文件中,“}”和“{”必须一一对应。这种格式是RTF阅读器和转换器算法的基础。
RTF格式还有一个特别之处,就是有些字符在命令中有特殊的含义,所以当它们作为文本出现时需要在它们的前面加一个“\”,例如“\”本身就要表示为“\\”。事实上,这种形式在大多数编程语言中是很常见的。
二、算法分析
本节介绍的算法虽然是针对RTF的读写,但也是一般文件过滤器通用的方法,适用于各种格式文件之间的转换。具体来说就是把各种文件都转换成一种中间格式,再根据要求进行显示或转换。其中有个原则是一定要遵守的:程序必须能过滤掉不认识的格式。各种文件都有其特殊的格式,在转换过程中不可避免会出现格式损失的现象,在算法中要考虑这种情况。对于RTF这类格式化文本文件来说,最重要的是要正确地显示或转换文件的大小、颜色、字体等风格。因此,在程序中应该用一个数据结构把这些信息存起来,这个结构就是所谓的中间格式,怎样规定悉听尊便。以下是其流程图:
三、难点分析
在开发过程中我们遇到了不少问题,其中有两个问题特别有意思。
第一个问题是中文的表示方式。在RTF中中文用命令的形式表示:“\’内码”。内码就是汉字机内码。不过,请注意:RTF是文本文件,内码是用ASCII码来储存的,必须把它转换成数字才能使用。例如,“电子与电脑”在RTF中的形式是:
\’b5\’e7\’d7\’d3\’d3\’eb\’b5\’e7\’c4\’d4
第二个是图片的问题,这也是本文的重点。RTF中图片以两种方式存在:第一种方式是直接嵌入,以{\pict开始;第二种方式是作为OLE对象嵌入,这时以{\object开始。当RTF处理器能直接使用OLE时,RTF文件中提供了OLE的数据;否则,文件中直接提供图片的数据,以{\ result开始。在使用中最常见的图片格式是内含DIB BITMAP的元文件(METAFILE),这种格式在SDK中没有说明,而且在RTF中是以压缩形式储存的,所以在转换时有一定困难。我们采取了一种比较新的方法:先把META FILE的数据读出来存成一个文件,然后用GetMetafile和PlayMetafile函数把文件中的图形打印在一个内存DC上,最后用抓图的方法把它存成BITMAP文件。以下是具体程序:
void WmfToBmp(int width,int height,char *metafile)
{
//width为图片宽度,height为图片高度,*metafile为元文件名
static HMETAFILE hmf;
char num[4];
FILE *fh;
HDC hMemDC;
HBITMAP hbmp,hold;
BITMAPFILEHEADER hdr;
LPBITMAPINFOHEADER lpbmpih;
HGLOBAL hg;
BitmapCount++;
if(BitmapCount==3)
{
width=128;
height=132;
}
if(BitmapCount==1)
{
width=80;
height=50;
}
ToString10(BitmapCount,num);
//把字符串转换成数字的函数
lstrcpy(bmpFile,FilePath);
lstrcat(bmpFile,num);
lstrcpy(gifFile,bmpFile);
lstrcat(bmpFile,”.bmp”);
lstrcat(gifFile,”.gif”);
hmf=GetMetaFile(metafile);
hDisplayDC=CreateDC(“DISPLAY”,NULL,NULL,NULL);
hMemDC=CreateCompatibleDC(hDisplayDC);
hg=GlobalAlloc(GHND,sizeof(BITMAPINFOHEADER));
lpbmpih=(LPBITMAPINFOHEADER)GlobalLock(hg);
lpbmpih->biSize=sizeof(BITMAPINFOHEADER);
lpbmpih->biWidth=width;
lpbmpih->biHeight=height;
lpbmpih->biPlanes=1;
lpbmpih->biBitCount=8;
lpbmpih->biCompression=0;
hbmp=CreateCompatibleBitmap(hDisplayDC,width,height);
GlobalUnlock(hg);
GlobalFree(hg);
hold=SelectObject(hMemDC,hbmp);
SetMapMode(hMemDC,MM_ANISOTROPIC);
SetWindowOrgEx(hMemDC,0,0,NULL);
SetViewportExtEx(hMemDC,width,height,NULL);
PlayMetaFile(hMemDC,hmf);
hbmp=SelectObject(hMemDC,hold);
if((fh=fopen(bmpFile,”w+b”))==NULL)
{
return;
}
hdr.bfType=0×4d42;
hdr.bfSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQUAD)+width*height;
hdr.bfReserved1=0;
hdr.bfReserved2=0;
hdr.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQUAD);
fwrite((LPSTR)&hdr,sizeof(BITMAPFILEHEADER),1,fh);
hg=GlobalAlloc(GHND,sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQUAD));
lpbmpih=(LPBITMAPINFOHEADER)GlobalLock(hg);
lpbmpih->biSize=sizeof(BITMAPINFOHEADER);
lpbmpih->biWidth=width;
lpbmpih->biHeight=height;
lpbmpih->biPlanes=1;
lpbmpih->biBitCount=8;
lpbmpih->biCompression=0;
lpbmpih->biSizeImage=width*height;
lpbmpih->biClrUsed=256;
lpbmpih->biClrImportant=0;
j=GetDIBits(hMemDC,hbmp,0,height,NULL,(BITMAPINFO*)lpbmpih,DIB_RGB_COLORS);
lpbmpih->biSize=sizeof(BITMAPINFOHEADER);
fwrite(lpbmpih,sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQUAD),1,fh);
GetDIBits(hMemDC,hbmp,0,height,(LPSTR)FileBuffer,(BITMAPINFO*)lpbmpih,DIB_RGB_COLS);
fwrite(FileBuffer,width*height,1,fh);
GlobalUnlock(hg);
GlobalFree(hg);
fclose(fh);
DeleteDC(hMemDC);
DeleteDC(hDisplayDC);
DeleteObject(hbmp);
DeleteObject(hold);
DeleteMetaFile(hmf);
}//end function WmfToBmp()
用这种方法还有一个好处,那就是当你从最底层开始开发RTF阅读器时,只需把PlayMetaFile的参数从内存DC换成屏幕DC就可以显示图片了。
四.RTF格式的扩展
最后讨论一下RTF格式的扩展。RTF格式作为一个标准应该是统一的,但在某种情况下进行扩展是必要的。最明显的例子是微软的WORD,它有自己独有的RTF命令。如果想使自己的软件在技术上占有优势,也可以通过创造新的RTF命令来实现。例如,如果你希望在软件中支持DHTML,则可在RTF 中嵌入{\dhtml或{\java之类的命令。由于RTF阅读器有过滤不认识命令的功能,所以这样做不会影响RTF文件的通用性。
NTFS 和 FAT 文件系统中的尺寸限制
关键字:数据恢复、硬盘维修技术与资料
每个文件系统都支持一个最大的卷尺寸,文件尺寸,已经每卷可容纳的文件最大数量。因为 FAT16 和 FAT32 分别支持 4GB 和 32GB 的卷,要创建大于 32GB 的卷,就必须使用 NTFS 格式。如果在多系统共存的计算机中使用 FAT16 或 FAT32 格式,就必须对其尺寸限制有所了解:
一、小于 16MB 的 FAT 卷会被格式化为 FAT12 格式
二、使用 MS-DOS,Win95,Win98,WinMe,以及其它很多操作系统的计算机,其 FAT16 卷如果超过 2GB 就不可访问了。这个 2GB 的限制是由于这些操作系统不支持超过 32KB 的簇。
三、理论上说,FAT32 卷可以达到约 8TB;而实际上,WinXP Professional 可以格式化的最大 FAT32 卷也就是 32GB 而已。所以,必须使用 NTFS 格式来格式化超过 32GB 的卷。但,WinXP Pro 可以读写用其它操作系统格式化的更大的 FAT32 卷。
四、如果要建立包含多个物理磁盘的卷,例如跨区卷和带区卷,那么卷的大小就取决于每块磁盘上所使用了的空间。在多物理磁盘上创建大于 32GB 的卷,仍然要使用 NTFS 格式。
有关 FAT16 和 FAT32 的更多信息,参见“FAT 文件系统”。
NTFS 卷上的最大尺寸
理论上,NTFS 的最大卷包含 264减 1 个簇。实际上,WinXP Pro 中,NTFS 卷的最大限制是 232减 1 个簇。举例来说,如果是 64KB 的簇,那 NTFS 卷的最大尺寸就是 256TB 减 64KB 这么大。如果使用默认的 4KB 簇,NTFS 卷的最大尺寸就是 16TB 减 4KB 这么大了。
由于主引导记录(MBR)中分区表的限制,硬盘仅仅支持最大 2TB 的分区。要超过这个限制,必须建立 NTFS 的动态卷。Windows XP Professional 使用了一种有别于分区表的特殊的数据库来管理动态卷,这就是动态卷可以超过在分区表中 2TB 限制的原因。动态 NTFS 卷可以达到 NTFS 支持的卷尺寸的最大限制。使用 GUID 分区表的安腾计算机也可以支持超过 2TB 的 NTFS 卷。
注
如果在一个 NTFS 文件夹中包含了大量的(300,000 或更多)的文件,请禁止生成短文件名,特别是当长文件名的前 6 个字符相近的时候。详见后续译文“NTFS 性能优化”。
NTFS 性能优化
NTFS 的性能受很多因素影响,比如簇的大小,磁盘碎片的多少,以及象反病毒软件等应用程序的使用情况等等。此外,NTFS 的一些特性,如压缩和索引服务同样可能影响其性能。可以通过下面的一些方法来优化 NTFS 的性能。
簇的大小
在格式化一个 NTFS 卷之前,你首先要对自己要保存在该卷上的文件的类型做一个评估,以便决定是否使用默认的簇大小。即,重要的是先回答:
这些(要保存)的文件是否大小基本一致?
是否大部分文件的尺寸要小于默认簇的大小?
这些文件的尺寸是不变的还是常变的?
如果大部分文件都小于默认簇的大小(比如 4KB)并且都保持文件尺寸不变,使用默认簇大小将减小磁盘空间的浪费。因为,此时簇的尺寸变小将增加碎片产生的可能,尤其当这些(4KB 左右)的文件占用了超过一个簇的空间的时候。所以这时候可以在格式化卷的时候对簇的大小做相应的设定。如果要存储的文件会比较大,或者尺寸可能会增大,就该用 16 或 32KB 的簇来替代 4KB 的簇。
注意:压缩功能只在 4KB 或更小的簇为基本存储单位的卷上才可以实现。
在 Windows2000 或更早版本的 windows 产品中从 FAT 到 NTFS 转换的时候也可能影响簇的大小。因为,被转换的卷,簇的大小是 512 byte,主文件表(MFT)也很可能在转换过程中产生碎片。作为优化性能的考虑,应该备份该卷的所有数据,重新格式化该卷,并在格式化的过程中指定簇的尺寸,然后再恢复数据。
如果想进一步了解对簇的尺寸选择的相关知识,请参考本章前面讲过的“簇尺寸”内容。
短文件名
每当建立一个长文件名的文件时,NTFS 就会自动产生一个类似 8-3 短文件名的备份条目。8-3 短文件名即用 8 个字符表示文件名,3 个字符表示文件的扩展名,文件名和扩展名之间用一个句点隔开。
如果在一个文件夹中包含了非常多(例如 300,000 个或更多)的文件,而且所有文件都采用了长文件名规则命名并且初始的字符都相同,那么建立这些文件所需的时间就要增多。这是由于 NTFS 是根据长文件名的前 6 个字符来建立短文件名索引的。在多于 300,000 个文件的一个文件夹中,由 NTFS 用 8-3 规则建立文件名相似的长文件所对应的短文件名备份时会产生冲突。这种在建立新的短文件名时和已经存在的短文件名之间的冲突,会使 NTFS 在建立新文件的时候,所耗费的时间是没有这种冲突时的 6 到 8 倍。
要减少这种在建立新文件时所耗费的时间,可以在命令提示符下使用 fsutil behavior set 这个命令来禁用 8-3 规则以优化文件系统性能。详见本章最后部分:“在 NTFS上建立 MS-DOS-可读取的文件名”。
如果既要让 NTFS 使用 8-3 命名规则建立文件名备份,又要提高其系统性能,可以通过建立命名规划,使长文件名在文件名的开始而不是在结尾来体现文件名的不同。详见“WindowsXP Professional 中的文件名”一节。
文件夹结构
NTFS 支持在每个卷上有大量文件和文件夹的多个卷的存在,由使用者来组织文件夹结构以达到最优化的工作表现。在决定一个文件夹的结构时,下面几点是要考虑到的:
如果要频繁和快速地建立、删除、打开和关闭其中的文件,就要尽量避免把大量文件放入一个文件夹内。最好的解决方案就是把它们分门别类地放到几个子文件夹中去,这样才能条理清晰地分配自己的工作量。
要是文件之间没有彼此的关联,无法放到几个逻辑上有关联的文件夹中去,那就应该禁用 8-3 文件名的生成。而如果的确需要 8-3 文件名(译者注:例如在 dos 下兼容的需要),提前制订自己的命名计划,使长文件名的前 6 个字符不尽相同。
关键点
文件夹越大,运行 chkdsk.exe 命令所需的时间越长。详见“磁盘与文件系统常见问题集”。
磁盘碎片
存在大量碎片的卷,其性能要比经常做碎片整理的卷差。可以通过磁盘碎片整理控制台或者命令提示符下的 defrag 命令在每周空闲的时候进行磁盘碎片的整理。详见本章前面的小节“对 NTFS 卷进行磁盘整理”。
反病毒程序
反病毒程序在系统之上扫描病毒,就像撑起了一个保护伞,这也影响到文件系统的性能。这种影响对不同的杀毒软件来说也不一样。在评价杀毒软件的时候,要看哪一个软件在进行基线测试的时候对系统环境影响最小。众多反病毒软件都提供了随用户意愿来自定义软件运行参数的调节选项以降低对操作系统性能的影响。
压缩功能
压缩功能同样增加了系统的额外开销。即使在同一计算机内拷贝文件的时候,压缩文件系统也要经历一个解压缩、拷贝、重压缩为新文件这样一个过程。详见本章前面的小节“文件压缩”。
索引服务
对 Win2000/XP 用户来说,如果经常在 NTFS 卷上查找文件,可以通过开启索引服务来大大减少查找的时间。就是对资料的内容(而不仅仅是标题,译者注)进行查找的时候,索引服务同样起作用。
开启索引服务后,NTFS 会使用系统的一部分资源来建立和维护索引,跟踪文件更改并对这种更改进行记录。而这些操作仅仅带来很小的性能牺牲。实际上,对于经常进行搜索的卷来说,启用索引服务所带来的查找速度的提升幅度,要远远高于由此带来的文件系统性能下降的幅度。
详见本章前面小节“索引服务”。
最近访问时间
NTFS 卷上的每个文件和文件夹都有一个属性,就是“最近访问时间”(LAT),这个属性表明了该文件或文件夹的最后访问时间。比如当某用户打开文件夹列表,在文件夹中添加文件,读取一个文件,或者对某文件进行更改的时候,都会改变这个属性。LAT 是存储在内存中并最终在磁盘的两个地方完成写入:
一、MFT 记录中文件属性的部分
二、该文件的目录项中。目录项存储在包含该文件的文件夹中,包含多个物理连接的文件(译者理解:文件在空间上的物理存储是不一定连续的,可能有多个物理片段,每个片段称为一个“连接”)也就有多个目录项。
磁盘上已经存在的 LAT 并不总是最新的,这是由于 NTFS 每隔一个小时才将在内存中打开的文件的该属性保存一次。在用户或应用程序对文件进行只读操作的时候,NTFS 也会延后“最后访问时间”属性的写入,比如在列文件夹目录或者读取(但不是更改)文件夹中的一个文件的时候。如果对于“读”操作, LAT 属性也要保持最新的话,所有的“读”操作就变成了“写”操作,这对 NTFS 的性能是影响很大的。
注
基于文件属性的 LAT ,即使它的所有在当前存储于磁盘上的值完全不正确,也无关紧要。NTFS 会随时将磁盘上的可疑属性值用内存中存储的精确值来替换。
NTFS 最终会在下列位置,将内存中的 LAT 存储到磁盘上。
在文件的属性中
如果当前内存中的 LAT 和上次保存在硬盘上的 LAT 有一个小时的时差,或者内存中对该文件的所有进程都结束的时候,NTFS就会对该文件的 LAT 属性进行更新。例如,如果当前一个文件的 LAT 是 1:00 P.M.,而你在 1:30 P.M. 又读取了该文件,NTFS 不会更新该 LAT。而如果你又在 2:00 P.M. 的时候再次读取该文件,NTFS 会把该文件的 LAT 属性更新到 2:00 P.M.,因为此时该文件的 LAT 存储属性为 1:00 P.M. 而内存中的属性为 2:00 P.M.。
在文件的目录项中
在下列事件发生时,NTFS 更新目录项:
当 NTFS 更新文件的 LAT 的时候,检测到该文件的 LAT 比在目录项中存储的 LAT 差别在一个小时以上的时候。这种更新最为典型地发生在当某个应用程序关闭在文件夹中用于访问该文件的句柄的时候。如果该程序延长该文件句柄的打开时间,就会在更新目录项的时候出现迟滞。
当 NTFS 更新其它的文件属性比如“最近更改时间”(LMT),而 LAT 的更新未决的时候。在这种情况下,NTFS 会在不影响系统性能的前提下,随其它属性的更新而更新 LAT。
注
NTFS 不会在内存中对某文件调用的所有进程都结束的时候更新该文件的目录项。
如果有某个 NTFS 卷,包含了大量的文件夹和文件,那么当某个应用程序对每个文件依次进行简短的访问的时候,由建立 LAT 更新所占用的 I/O 带宽会在全部的 I/O 带宽中占据非常明显的比重。为了加快访问文件夹或文件的速度,可以使用 fsutil behavior set disablelastaccess 这个命令来禁止更新 LAT。在应用了该命令并重启计算机后,LAT 就不会再被更新了。此时建立一个新的文件,它的 LAT 就会永远保持在它最初建立的时间上。要了解 fsutil behavior set disablelastaccess 命令的更多信息,请查看 WinXP 的帮助
巧用EasyRecovery恢复误格式化的磁盘分区
在我们使用电脑中,有时稍不留意,便会误将重要的文件、硬盘分区删除和格式化 (format),自己在硬盘的某个分区辛辛苦苦整理保存的大量数量顷刻化为灰烬。这是一件非常令人头疼和痛心的事情。因此我们极力提倡要经常进行重要数据的备份操作,以便能够保证重要数据的绝对安全,彻底排除各种安全隐患。那么有没有一个工具能够将误删误格的文件和硬盘分区恢复呢,经过查找大量的资料文件,笔者终于找到了一款非常实用的数据恢复软件——EasyRecovery。这是一款功能十分强大且操作非常简单、非常实用的一款硬盘数据恢复工具,能够重建硬盘分区表,恢复文件系统和丢失的文件。今天笔者将重点为大家介绍一下硬盘分在误格式化后利用EasyRecovery硬盘恢复工具进行硬盘分区数据恢复的操作过程。
一、EasyRecovery数据恢复原理
在步入主题前,我们有必要向大家介绍一下数据恢复的一些基本原理。当我们利用Format命令或是DEL格式化分区或删除硬盘分区上的文件时,有经验的朋友都会知道此时硬盘上的数据并没有真正的被删除,文件的结构信息保留在了硬盘上,除非是写入新的数据将其覆盖。明白这一点后,我们在操作时可要注意了,特别是在误格式化硬盘分区以后,千万不要再往这个分区中写入任何的数据文件,而要尽快利用软件修复误格的分区。一旦写入新的数据后,新数据便会将已存在的数据覆盖掉!无论如何都找不回你想要的数据了,神仙也救不了你了,这一点一定要切记!!!如果你需要修复的分区恰恰是系统分区,也就是C盘,那么此时你首先做的应该是尽快退出系统,然后将硬盘取出,挂到另外一台机器上进行修复,并将修复好的数
保存在硬盘的其它分区上,然后再重新装系统。因此我们极不推荐将重要的资料存放在系统盘上。
用EasyRecovery找回数据、文件的前提就是硬盘中还保留有文件的信息和数据块。EasyRecovery使用复杂的模式识别技术找回分布在硬盘上不同地方的文件碎块,并根据统计信息对这些文件碎块进行重整。接着EasyRecovery在内存中建立一个虚拟的文件系统并列出所有的文件和目录。哪怕整个分区都不可见、或者硬盘上也只有非常少的分区维护信息,EasyRecovery仍然可以高质量地找回文件。
二、EasyRecovery 6.0功能简介
笔者这次使用的是EasyRecovery 6.0版本,这个版本虽然并不是最新版,便功能也是十分强大。EasyRecovery 6.0版提供了包括磁盘诊断、数据修复、文件修复、邮件修复等各种功能。
在磁盘诊断中,此软件可以对测试硬件潜在的故障(DRIVETESTS)、监测并报告潜在的硬盘驱动器故障(SMARTTESTS)、磁盘驱动器空间使用、详细报告(SIZEMANAGER)、查找磁盘驱动器的条件设置(JUMPERVIEWER)、分析现存的文件系统结构(PARTITIONTESTS)和创建可引导诊断工具的紧急启动盘(DATAADVISOR)。在数据恢复中,EasyRecovery提供了使用高级选项自定义数据恢复功能(ADVANCEDRECOVERY)、查找并恢复已删除的文件(DELETEDRECOVERY)、从一个已格式化的卷中恢复文件(FORMATRECOVERY)、不依赖任何文件系统结构信息进行恢复(RAWRECOVERY)、继续一个以前保存的数据恢复进程(SUMERECOVERY)、创建可引导的紧急引导软盘(EMERGENCYDISKETTE)。
在文件修复中,该软件提供了对WORD文档、EXCEL电子表格、POWERPOINT简报、ACCESS数据库及ZIP压缩文件的修复功能。并且软件还提供了对电子邮件OUTLOOK的修复功能。怎么样,这款软件的功能是不是十分的强大呀。
三、利用EasyRecovery巧妙恢复误格式化的硬盘分区
在介绍了数据恢复原理、EasyRecovery的主要功能后,我们重点来看一下误格式化硬盘分区以后利用EasyRecovery磁盘工具进行数据恢复的操作过程。
首先我们打开EasyRecovery,在数据恢复选项中,我们选择使用高级选项自定义数据恢复功能(ADVANCEDRECOVERY)选项,我们可以看到EasyRecovery自动对硬盘的各个分区格式及分区大小进行了分析,这里我们选择要进行数据恢复的分区后,并点击ADVANCED OPTIONS按钮进行设置,我们可以看到选中的磁盘分区在整个硬盘中的分布情况,并可以手动设置分区的开始和结束扇区,这里我们选择默认即可。
在file system Scan选项中,我们可以看到有三个选项供我们选择。File System下拉列表中提供FAT32、FAT16、NTFS和RAW等几个选项,大家可以看到这些选项自然是分区的不同格式,在这里需要进行说明的是RAW用于修复无任何文件系统的分区,RAW将对分区的每一个扇区进行一个一个的扫描,此扫描模式可以找到小到一个簇中的小文件和大到连续存放在各种大文件,这里建议选择利用RAW扫描,当然所消耗的时间较会长一些。
“Simple Scan”和“Advanced Scan”为两种不同的扫描模式,其中“Simple Scan”为只扫描指定分区的结构信息,而“Advanced Scan”将扫描硬盘全部分区的所有信息,花费时间较长。由于这里我们已经选择了要恢复的分区,所以选择“Simple Scan”即可。
设置完成后,选择OK确定回到上一个窗口并选择下一步,EasyRecovery将会对磁盘分区内的数据进行扫描,这个过程将会根据计算机的配置和分区的大小所消耗的时间有所不同。
扫描结束后,系统会将扫描到的文件按不同的后缀进行排列,这里我们选择要进行恢复的文件,比如文档文件、图形文件和MP3文件等,并单击下一步。
我们在Recover to local Drive中选择中恢复文件的保存地址,这里必须选择其它的非修复中的分区,可以点击Browse选择,其它选项保持默认即可,然后点击下一步。
我们点击确定,即完成了此分区文件的恢复过程。这个软件是不是很简单很实用呀。在恢复文件以后,我们按照不同的分类对恢复的数据进行重新整理,重新分类即可。在实际的应用中,我们可以利用EasyRecovery恢复大部分文件,当然也有例外的情况,只要你多动手实用,相信重要文件还是能够找得回得。这里再次提醒朋友们,学会文件的恢复固然重要,但如果经常对重要的文件进行备份,如今DVD刻录机相当便宜了,将重要的文件刻录成图保存相当安全而且省事,那么也不用这么费力了。
一次硬盘数据恢复经验
关键字:数据恢复技术与资料
硬盘作为用户存储数据的主要场所,其最大的用途莫过于存储数据,但有时往往由于用户操作不当,造成用户数据的丢失。如果对于普通用户,数据对用户相对而言并不重要,那么丢了就丢了,没有太大关系;但如果数据对用户很重要(对于这类用户,应经常备份数据),这时数据丢失了怎么办呢?此文就是通过一次对硬盘数据的恢复过程来简要说明一下硬盘数据恢复的方法,希望能对大家恢复硬盘数据有一定的帮助。
相关概念
MBR(Main Boot Record)即主引导记录区,它位于整个硬盘的0磁道0柱面1扇区,包括硬盘引导程序和分区表。
DBR(Dos Boot Record)即操作系统引导记录区,通常位于硬盘的0磁道1柱面1扇区,是操作系统可直接访问的第一个扇区,它也包括一个引导程序和一个被称为BPB(BIOS Parameter Block)的本分区参数记录表。每个逻辑分区都有一个DBR。
FAT(File Allocation Table)即文件分配表,是DOS、Windows9X系统的文件寻址格式,为了数据安全起见,FAT一般做成两个,第二FAT为第一FAT的备份。
DIR是Directory即根目录区的简写,DIR紧接在第二FAT表之后。有关硬盘存储结构的详细介绍,可参考我在《电脑报》1999年第20期的文章《硬盘数据结构一瞥》。
估计数据丢失原因:
1.安装多系统引导软件后,异常操作造成。
2.遭到某种病毒感染。数据丢失前状态:2.5GB硬盘,原分区为:C:2GB+D:500MB,D盘装有重要数据。两分区均为FAT16格式。
数据丢失过程
一次系统重启后,D盘丢失。
数据丢失后的操作
该客户曾用Fdisk重新分区,试图按原分区大小再造分区,未果。但没有格式化D盘,只格式化了C盘并重装系统。
客户的数据修复要求
恢复D盘根目录下“数码相机”目录内所有文件。
所用工具:
NORTON DISK DOCTOR:diskedit.exe
数据修复过程:
一、数据备份 主要包括物理0磁道各扇区,各分区逻辑0磁道,FAT表和根目录区等,再配以GHOST备份各分区的数据区。
二、分析该硬盘的主引导扇区MBR(包括主分区表和引导程序)、各分区的引导扇区DBR、FAT表及根目录区。
由于已经重新分区并能顺利启动C盘(抛开病毒原因),故MBR的逻辑结构应该没问题,通过Diskedit命令察看MBR所在的0磁道第一扇区,证实估计正确,但现分区表与原分区表是否完全一致,还不能确定。
通过分区表,可以查找到各分区的引导扇区所在的物理位置,分析后可确定C盘的各项重要数据(引导扇区、第一FAT表、第二FAT表、根目录区)均没有异常,但D盘除了引导扇区DBR外、上述的其他数据均无法对应,DBR之所以无异常,是因为重新分区的结果,而FAT1、FAT2和根目录区面目全非的原因,大致应该有两种可能:一是现分区与原分区不一致,导致数据对不上号;二是数据已被病毒破坏。
由于在察看MBR时,发现0磁道的其他扇区留有不明程序的残余代码,通过察看其中的一些显示信息,可以判定是某种多系统软件留下的,说明客户曾经安装过多系统管理软件。这样大致可以排除病毒破坏分区的可能,分区丢失应该是异常操作多系统管理软件引起的。
三、寻找原有分区 根据前面的分析,由于客户在数据丢失后又进行了重新分区,而且估计现有的分区与原来的分区不一致,这样无疑加大了数据修复的难度,但幸好没有格式化D盘,因为如果单单只是Fdisk,只会改写原硬盘的各分区的第一扇区。如果这个扇区不落在原分区的重要参数区(DBR、FAT、根目录)上,那么修复的成功率还是挺高的。接下来就是寻找原有D盘的重要数据区了。根据客户提供的资料可知,原D盘根目录下有一个叫“数码相机”的子目录,于是用DISKEDIT提供的搜索功能,搜索“数码相机”对应的十六进制代码,可以找到原有D盘的根目录区。历时30分钟,通过过滤搜索结果,最终找到该根目录所在的扇区,然后顺藤摸瓜,向前翻过两个FAT表(根据经验大概400个扇区~500个扇区)找到原D盘DBR所在的扇区,接着再向前
63个扇区,找到原D盘的分区表,至此,最困难的问题攻克了。
四、重建主分区表 因为客户后来用Fdisk重新建立的主分区表与原来的分区表并不一致,故必须手工重建原分区表,通过前面找到的原D盘分区表和原D盘的DBR,可以计算出主分区表,包括各分区的起始、结束扇区、分区大小、分区类型等。算出结果后,改写0磁道1扇区的主分区表。
五、重启系统,出现原D盘,所有文件基本全部恢复。拷贝出“数码相机”目录,做好备份。通知客户取回数据。
说明:
1.数据备份时,不要过分相信GHOST,GHOST只认正确的分区,对于隐藏的分区它不会复制。对于不正确的分区,它会报告错误并停止复制过程。GHOST并非一个纯粹意义上的全盘复制软件,它只复制那些FAT表上存在的文件,并非复制磁盘上所有的数据!
2.走运的是,该客户重新分的D盘刚好比原D盘大几个磁道,故新的D盘分区表被建在原C盘最后端的数据区中。所以本次维修基本上可以说100%地恢复了原D盘的数据。
3.更走运的是,该客户没有重新格式化D盘,不然就不可能有那么高的恢复率了。
给读者的建议
在硬盘数据出现丢失后,请立即联系当地的数据恢复公司。最好不要再对硬盘进行写操作,那样会增大修复的难度,也影响到修复的成功率。
用毒霸备份和恢复您的硬盘分区
关键字:数据恢复技术与资料
如果你的硬盘被病毒损坏,如果你的数据丢失,你是不是自认倒霉,从头来过?其实大可不必,如果我们在这之前,稍稍做一些防范工作,也许就可以挽回损失,得与失就在这一线之间,你愿意尝试一下吗?
《金山毒霸》附带的磁盘工具KAVFix就是一个备份和恢复硬盘分区的小工具,它可以在DOS、Windows 9x/2000/NT系统中直接使用(大小为110KB,在毒霸的安装目录中能够找到,我个人喜欢用毒霸2001版带的DOS版的KAVFix,后来的那个图形界面的我不习惯)。
首先运行KAVFix命令,会看到如图所示的提示(都是E文的,不过毒霸的说明书中有简单的翻译)。
一、失去方知珍贵
要想数据失而复得,首先要对硬盘分区进行备份:
运行 KAVFix,选择 0 修复硬盘,提示选择物理硬盘:
Please input harddisk(0, 1, 2, …):
输入待修硬盘盘号(第一块硬盘为0,其他的顺延)。
Do you want to backup MBR for undo (Y/N)?
提示备份主引导区数据用于修复失败后恢复,选择“Y”。
Please input MBR backup file name:
输入备份文件名称。
**建议使用可靠的软盘,将一张干净的磁盘插入软驱,输入路径和一个文件名如a:mydisk1。
Reading MBR sector…ok!
Saving to file…ok!
表示备份成功。
Do you want to backup the boot record of logic drive(Y/N):
是否备份逻辑分区(一般是指后面的分区),选择“Y”。
Backup file OK!
备份完成。
二、得到就是最好
一旦硬盘损坏,备份的小文件也许就是你的救命稻草了!
Do you want to Rebuild the C Drive(Y/N)?
为了确保只进行分区的调整,建议您使用“N”的选项,不要重新Rebuild C 盘。
Do you want to backup sector for undo (Y/N)?
提示备份修复时将被修改的数据,用于修复失败后恢复:
如果我们不选择Rebuild C盘,那么这个备份也可以省了。
Do you want to write Rebuild Partition Table to MBR(Y/N)?
修复后 KAVFix 将问您是否将已修好的数据写入硬盘的主引导区,请按 “Y” 确认。
至此 KAVFix 已经修复了您的硬盘,请按“Q” 键退出。
重新启动机器,根据我的经验应该说有70%的可能,可以找回您的硬盘和数据了。另外根据测试,KAVFix在Windows 2000系统中使用时对于大于8GB的硬盘的恢复效果比DOS方式要好。您可以将有问题的硬盘挂在其他Windows 2000系统中作为从盘,通过在主盘的Windows 2000中使用KAVFix来进行恢复(当然了选择硬盘编号时注意选择1就是了)。
这里不得不提的是KAVFix的9号功能“Destory Hard Disk MBR(清除主引导记录扇区标志)”这是删除当前分区信息的命令,在当前分区信息出错的情况下清除出错信息,平时请大家不要使用,否则可就不得不自己动手进行恢复了。
如果硬盘中真的有重要数据的话,也可以考虑到专业的数据恢复公司进行处理,金山好像就有(不过听说数据恢复的价格比买块硬盘的价格还高呢,倒是恢复不了不收费)。还是使用KAVFix自己先做个备份吧!
用DOS命令破除UNIX管理员口令
关键字:数据恢复技术与数据恢复资料
一种彻底解决UNIX系统管理员口令被忘记问题的新方案
引言
—-对于广大的SCOUNIX操作系统管理员来说,最不可原谅的过失之一就是忘记了管理员口令(即超级用户口令)。这个过失会导致极其严重的后果,对此凡是具备UNIX操作系统常识的人都应该知道。然而令人遗憾的是,时至今日铸错者依然大有人在。看来,对他们固然要责备,但既然问题客观存在,我们就总还须面对现实,想办法去解决才是。
—-长期以来,许多人就超级用户口令被忘记的问题发表了各种看法。一部分人认为,一旦忘记了超级用户口令,只能重装操作系统,此外别无它法。另一部分人则坚决反对这种"重装论",他们提出了一些经过成功实践的解决方案,使得"重装论"者败下阵来。现在我们可以肯定地说,忘记超级用户口令是有办法解决的。
—-但同时我们也不得不承认,现行的解决方案有很大的局限性,这些局限性决定了现有方案无论怎样变化和发展也不可能成为一种有着强大生命力的最彻底的解决方案。
传统解决方案的局限性
—-上面已经谈到,目前有多种针对超级用户口令被忘记问题的解决方案。为了叙述上的方便,本文将这些方案统称为传统解决方案。传统方案乍看起来似乎各不相同,但经过认真分析和归纳后就会发现,它们实际上大同小异,都有以下共同点:必须有一套(两张)EmergencyBootFloppy(紧急启动软盘)。这套软盘均为文件系统格式,必须在SCOUNIX上制作,并且在不同类型机器上制作的紧急启动软盘相互不能通用。
用紧急启动软盘启动后,将硬盘根文件系统mount到某个目录下(一般为/mnt目录),然后进入该目录(即进入硬盘根文件系统的根目录),修改相关目录下与超级用户口令有关的信息(各种方案的不同之处主要体现于此)。最后回到软盘根目录,拆卸/dev/hd0root,重启机器。
—-这些共同点实际上反映了传统方案的局限性:
—-一、操作平台局限性:要求自始至终必须在SCOUNIX操作系统平台上实施。
—-二、操作工具局限性:对紧急启动软盘的依赖性太大。万一软盘发生损毁,必须找一台类型相同的机器再制作一套,这就是前面所说的"专盘专用"的限制。
—-三、操作对象局限性:必须依靠硬盘根文件系统的支持。即操作者与修改对象(指与超级用户口令有关的信息)被文件系统隔开,操作者不能直接修改对象,只能调用文件系统提供的服务修改。这种方式本是信息科学中倡导的层次化思想的一种体现,在正常情况下应予称道;但任何事物都是有两面性的,在非常情况下–诸如解决忘记超级用户口令这一类问题时–该方式反而有可能带来麻烦。
—-三大局限性说明了传统解决方案可行性的脆弱和狭窄,也决定了它们作为凌驾于文件系统之上的高层方案所必然具有的弊端。于是,打破这些局限性,探索出一种全新的解决方案,就成为了摆在一切UNIX研究者面前的新课题。
新课题
—-所谓新课题,就是找到一种能够突破传统方案局限性的新方案。究竟从何处下手呢?让我们再来看一看三大局限性。
—-操作平台局限性似乎不好突破,因为其它操作系统识别不了UNIX的文件系统格式。
—-操作工具局限性好象就更难了,因为紧急启动软盘既要在UNIX上制作,又要在UNIX上使用,所以如果操作平台局限性突破不了,它就更突破不了。
—-最后看看操作对象局限性。操作对象完全由文件系统管理,操作者必须通过文件系统访问它们。万一文件系统崩溃,那么即使它下面的文件完好无损,操作者也只能认为这些文件已全部丢失–因为文件系统无法访问(例如mount不上来)。其实这个时候还是有办法找到那些文件的,方法就是直接访问物理硬盘。道理很简单:就本质而言,文件系统只不过是一个构筑于物理硬盘之上的逻辑组织,平时我们是通过它来访问物理硬盘的;现在这个组织寿终正寝,不能再为我们服务了,于是我们只好"自己动手,丰衣足食"。直接访问物理硬盘不但可以使文件"失"而复得,而且还有另外一个重要意义
–突破了操作对象局限性。
—-操作对象局限性一旦突破,我们就会惊奇地发现突破另外两大局限性简直可以说是顺理成章了。因为虽然其它操作系统识别不了UNIX的文件系统格式,但在任何操作系统上,我们都可以访问物理硬盘;而只要是带有访问物理硬盘功能的软件,都可以成为我们的操作工具。
—-现在我们要做的仅仅是:找一个大家最熟悉的操作系统和一个最易寻觅的可以访问物理硬盘的软件。
—-大家最熟悉的操作系统无疑是DOS。可以访问物理硬盘的软件很多,但最易寻觅的莫过DEBUG.EXE。所谓最易寻觅,是因为DEBUG是DOS本身的一条外部命令,可以说只要是在安装了DOS的机器上都可以找到它。对DEBUG略知一二的人可能会指出该命令并没有提供访问物理硬盘的选项,但请不要忘记DEBUG是DOS提供给用户的一个汇编语言调试程序,我们完全可以利用它编写、调试和执行一个汇编小程序去访问物理硬盘。应该说,这对一个能够取得系统管理员身份的人并不困难。
—-综上所述,在DOS上运行DEBUG来破除UNIX管理员口令,这就是本文提出的解决SCOUNIX超级用户口令被忘记问题的新方案。
新方案的应用
—-新方案已经提出,下面我们来看看它是如何应用于实践的。
—-首先需要指出,由于文章篇幅和性质的限制,本文不可能将新方案实施过程中涉及到的所有知识以"入门讲座"的方式加以介绍。因此,在阅读本小节前,读者应具备下列基础:熟悉硬盘主引导扇区和UNIX分区及UNIX文件系统的构造(这对UNIX系统管理员来说不成问题)、了解中断13H入口参数含义、使用过DEBUG命令。
—-一台COMPAQDESKPROXL/466服务器,主板内含PCISCSI-2控制器一个,上接富士通硬盘一只,该硬盘主要参数为:1041柱面,64头,32扇。硬盘上装有SCOUNIXSystemV/386Release3.2operatingsystemVersion4.2。现在假设其超级用户口令被忘记。
—-首先,随便找一台安装了DOS的计算机,制作一张DOS系统盘,并在系统盘上拷贝一个DEBUG.EXE文件。
C:\DOS>format /sa:
C:\DOS>copy debug.exea:
—-然后将该盘插入COMPAQ服务器A驱,开机启动DOS操作系统,执行DEBUG命令。
A:\>debug
—-现在我们就编写一段汇编语言程序(以下简称app),来读出硬盘0柱0头1扇区的内容。该扇区存放的是主引导记录,读出它是为了确定SCOUNIX分区的起始位置。app是调用中断13H实现的,以后我们还要反复用到它,当然入口参数将随所读内容物理地址的变化而变化。
-a
2039:0100 MOV AX,0201
2039:0103 MOV BX,1000
2039:0106 MOV CX,0001
2039:0109 MOV DX,0080
2039:010C INT13
2039:010E INT20
2039:0110
-g
Program terminated normally
—-现在我们可以用"dump"命令查看被读到内存里的扇区内容。从偏移11BEH处开始是分区表,其中类型标志字节为63H的分区是SCOUNIX分区。该分区起始于1柱面0磁头1扇。
—-下面,读出UNIX根文件系统i-node表的第一个扇区,以确定根目录的物理位置。
—-根据UNIX分区起始位置可知根文件系统始于2柱0头1扇。并且,由于2柱0头1扇是引导块,2扇是超级块,3、4扇为间隔,所以i-node表必定始于第5扇。
—-我们用app读出它(CX的赋值应改为"0205")。
—-读出后用"dump"命令查看偏移1040H至107FH的64个字节,这就是2号i-node,即根目录的i-node。
—-下面我们就根据i-node计算根目录在硬盘上的物理地址。
—-我们从偏移1040H看起:
—-ED41H表示文件类型与存取权限为"drwxr-xr-x";
—-1000H表示文件连结数为16;
—-0000H表示文件属主ID为0;
—-0200H表示文件组ID为2;
—-80020000H表示文件字节数为640个;
—-DA0500H表示第一个数据块地址。由于其它12个数据块地址均为0,所以可断定根目录在硬盘上只占了一个数据块。现在我们必须依据DA0500H计算出这个数据块存放在硬盘的第几柱面、第几磁头、第几扇区。计算公式如下:
C=TRUNC(P/(H*S))
C1=C0+C
H1=TRUNC((P-C*H*S)/S)
S1=P-C*H*S-H1*S+1
—-其中:
—-C1、H1、S1分别为数据块物理地址柱面号、磁头号、扇区号
—-P等于数据块地址翻译成十进制数后再乘以2
—-H为硬盘磁头数
—-S为每磁头扇区数
—-C0为根文件系统起始柱面
—-C只是一个中间量
—-将DA0500H代入上述公式,并根据H=64,S=32,C0=2,可算出C1=3,H1=29,S1=21。
因此根目录在硬盘上的物理地址为:3柱面29头21扇。
—-用app把它读出来(CX和DX的赋值应分别改为"0315"和"1D80")。
—-读出后用"dump"命令查看,可以发现偏移1050H至105FH是/etc目录的i-node号和文件名,其中i-node号为22H,即34D。因为每个扇区有8个i-node,所以34号i-node必定在2柱面0头9扇。
—-用app读出它(CX和DX的赋值分别改为"0209"和"0080")。
—-用"dump"命令可看出偏移1040H至107FH正是/etc目录的i-node。我们把它的数据块也读出来。先计算第一个数据块的物理地址。将2D0700H代入公式,算出/etc第一个数据块物理地址是3柱面50头27扇。
—-用app读出它(CX和DX的赋值分别改为"031B"和"3280")。
—-用"dump"命令可看出偏移11A0H至11AFH是/etc目录下的passwd文件名。我们用"enter"命令把它改成zls,然后再运行app(AX的赋值应改为0301)。
—-现在退出DEBUG命令。
—-取出软盘,重启机器,引导UNIX操作系统。
—-按照引导顺序,UNIX显示出硬件配置信息后就该提问超级用户口令了,但就在此时它却突然发现/etc/passwd文件失踪了!(其实只是被改名为zls,但UNIX对此一无所知。)没有了这个文件,UNIX无法提问超级用户口令,于是它只好在屏幕上显示如下信息并允许用户以系统管理员身份直接进入系统维护态:
su:Unknownid:root
/etc/tcbck:file/etc/passwd
ismissingorzerolength
/etc/tcbck:eitherslash(/)ismissingfrom
/etc/auth/system/filesortherearemalformedentries
in/etc/passwdor/etc/group
/etc/smmck:restoremissingfiles
frombackupordistribution.
INIT:SINGLEUSERMODE
****PASSWORDFILEMISSING!****
EnteringSystemMaintenanceMode
#
—-进入维护态后,当然就可以"为所欲为"了。但最好先设置一个新的超级用户口令。要想这样做,首先必须恢复passwd文件名。
#mv/etc/zls/etc/passwd
—-然后,就可以用/bin/passwd命令设置新的超级用户口令了。
结束语
—-在本文行将结束时,我们再来作一个小小的总结。
—-传统方案有操作平台、操作工具和操作对象局限性。新方案则突破了这三大局限性。
—-一、新方案突破了操作平台局限性。传统方案的操作平台必须是UNIX,而新方案则是DOS。DOS比UNIX普及得多,中国的绝大部分计算机用户对UNIX陌生,但对DOS却相当熟悉,使用起来也有亲切感。
—-二、新方案突破了操作工具局限性。传统方案的操作工具必须是两张紧急启动软盘,而新方案仅使用一张DOS系统盘,其上只需拷贝一个DEBUG.EXE文件。紧急启动软盘只能专盘专用,DOS系统盘却不存在这个问题–用任何一台机器上的DOS制作出的系统盘,可以用来解决任何一台机器上的UNIX超级用户口令被忘记的问题。至于用来访问物理硬盘的软件,当然更不是非DEBUG不可,任何软件–只要支持访问物理盘–均可。作者推荐使用Norton8.0软件包里的diskedit程序,对不懂汇编语言编程的人来说该程序无疑是一个最好的选择。
—-三、新方案突破了操作对象局限性。传统方案的操作对象是文件系统管理下的文件,而新方案撇开了文件系统,直接在底层修改数据。
—-最后需要说明的是,对于SCOOpenServerRelease5,因条件所限,作者还没有使用过,所以关于新方案在该版本上执行时步骤是否需要修改以及如何修改的问题,如果有机会,作者会加以适当的补充。
Linux文件系统的反删除方法
关键字:数据恢复技术与数据恢复资料
作为一个多用户、多任务的操作系统,Linux下的文件一旦被删除,是难以恢复的。尽管删除命令只是在文件节点中作删除标记,并不真正清除文件内容,但是其他用户和一些有写盘动作的进程会很快覆盖这些数据。不过,对于家庭单机使用的Linux,或者误删文件后及时补救,还是可以恢复的。
1.Ext2文件系统结构的简单介绍
在Linux所用的Ext2文件系统中,文件是以块为单位存储的,默认情况下每个块的大小是1K,不同的块以块号区分。每个文件还有一个节点,节点中包含有文件所有者,读写权限,文件类型等信息。对于一个小于12个块的文件,在节点中直接存储文件数据块的块号。如果文件大于12个块,那么节点在12个块号之后存储一个间接块的块号,在这个间接块号所对应的块中,存储有256个文件数据块的块号(Ext2fs中每个块号占用4字节,这样一个块中所能存储的块号就是1024/4=256)。如果有更大的文件,那么还会在节点中出现二级间接块和三级间接块。
2。恢复被误删文件的方法
大多数Linux发行版都提供一个debugfs工具,可以用来对Ext2文件系统进行编辑操作。不过在使用这个工具之前,还有一些工作要做。
首先以只读方式重新挂载被误删的文件所在分区。使用如下命令:(假设文件在/usr分区)
mount –r –n –o remount /usr
-r表示只读方式挂载;-n表示不写入/etc/mtab,如果是恢复/etc上的文件,就加上这个参数。如果系统说xxx partion busy,可以用fuser命令查看一下是哪些进程使用这个分区上的文件:
fuser –v –m /usr
如果没有什么重要的进程,用以下命令停掉它们:
fuser -k –v –m /usr
然后就可以重新挂载这些文件系统了。
如果是把所有的文件统一安装在一个大的/分区当中,可以在boot提示符下用linux single进入单用户模式,尽量减少系统进程向硬盘写入数据的机会,要不干脆把硬盘挂在别的机器上。另外,恢复出来的数据不要写到/上面,避免破坏那些有用的数据。如果机器上有dos/windows,可以写到这些分区上面:
mount –r –n /dev/hda1 /mnt/had
然后就可以执行debugfs:(假设Linux在 /dev/hda5)
#debugfs /dev/hda5
就会出现debugfs提示符debugfs:
使用lsdel命令可以列出很多被删除的文件的信息:
debugfs:lsdel
debugfs: 2692 deleted inodes found.
Inode Owner Mode Size Blocks Time deleted
164821 0 100600 8192 1/ 1 Sun May 13 19:22:46 2001
…………………………………………………………………………………
36137 0 100644 4 1/ 1 Tue Apr 24 10:11:15 2001
196829 0 100644 149500 38/ 38 Mon May 27 13:52:04 2001
debugfs:
列出的文件有很多(这里找到2692个),第一字段是文件节点号,第二字段是文件所有者,第三字段是读写权限,接下来是文件大小,占用块数,删除时间。然后就可以根据文件大小和删除日期判断那些是我们需要的。比如我们要恢复节点是196829的文件:
可以先看看文件数据状态:
debugfs:stat <196829>
Inode: 196829 Type: regular Mode: 0644 Flags: 0×0 Version: 1
User: 0 Group: 0 Size: 149500
File ACL: 0 Directory ACL: 0
Links: 0 Blockcount: 38
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0×31a9a574 — Mon May 27 13:52:04 2001
atime: 0×31a21dd1 — Tue May 21 20:47:29 2001
mtime: 0×313bf4d7 — Tue Mar 5 08:01:27 2001
dtime: 0×31a9a574 — Mon May 27 13:52:04 2001
BLOCKS:
594810 594811 594814 594815 594816 594817 ………………………………….
TOTAL: 38
然后就可以用dump指令恢复文件:
debugfs:dump <196829> /mnt/hda/01.sav
这样就把文件恢复出来了。退出debugfs:
debugfs:quit
另一种方法是手工编辑inode:
debugfs:mi <196829>
Mode [0100644]
User ID [0]
Group ID [0]
Size [149500]
Creation time [0x31a9a574]
Modification time [0x31a9a574]
Access time [0x31a21dd1]
Deletion time [0x31a9a574] 0
Link count [0] 1
Block count [38]
File flags [0x0]
Reserved1 [0]
File acl [0]
Directory acl [0]
Fragment address [0]
Fragment number [0]
Fragment size [0]
Direct Block #0 [594810]
…………………………….
Triple Indirect Block [0]
使用mi指令后每次显示一行信息以供编辑,其它行可以直接按回车表示确认,把deletion time改成0(未删除),Link count改成1。改好后退出debugfs:
debugfs:quit
然后用fsck检查/dev/hda5
fsck /dev/hda5
程序会说找到丢失的数据块,放在lost+found里面。这个目录里的文件就是我们要的东东。
Now all O.K. Good Luck.