|
经过长达1年的折腾,硬盘终于寿终正寝了,出现XXX个坏道(事后检测出来的),不少坏道坏在了INDEX区域上,造成部分目录和文件无法被打开。
由于硬盘里面的数据是很重要的,因此必须先想办法抢救出来。这个时候不应该再对坏硬盘有任何的写操作,并且要尽可能的减少读操作。
经过一番深思熟虑,我们决定采用winhex先对硬盘进行磁盘克隆(WinHEX菜单Tools-->Disk Tools-->Clone Disk)。要进行这个操作,需要目标硬盘(好的银硬盘)比源硬盘(坏硬盘)大,否则是不能进行有效的克隆的。硬盘的克隆完成以后,就可以开始对克隆以后的硬盘进行读操作了。
由于是硬盘出现坏道,因此在磁盘克隆的时候,当WinHEX检测到坏道的时候,会用BAD SECTOR作为标记写入到好的硬盘,因此好的硬盘也会出现目录无法打开或文件无法读写的情况(这个只是文件系统受到损坏),要想抢救硬盘数据,就需要一个很好的文件复制机制。
首先被排除的就是使用资源管理器进行复制,因为当资源管理器碰到无法读的地方时,整个界面可能会陷入假死状态,而且一旦出错会终止所有的复制操作。
命令行下的copy和xcopy命令也是不行的,因为这2个命令当碰到无法读的地方时,会有一个超时,然后报告一个错误(我这里报告的是 CRC 数据冗余校验错误),然后退出文件的复制过程。
其他的一些复制工具大多数均有上述问题。
因此,我们需要一个工具当发现无法读取数据时能够自动跳过这个文件,而进行后面的操作。原本打算自己写一个工具,但是当我突然想起微软有一个现成的工具可以满足我的要求时,我放弃了自己写工具的想法。
RoboCopy,Windows Resource Kit Tools 里面的文件同步工具,刚好能够满足我的需求。
RoboCopy,一个功能极其强大的文件同步工具(不仅仅是复制了,已经上升到文件同步的高度),能够按照需求进行各种各样的文件复制、同步操作,包括:
文件复制断点续传
自动判定源文件和目的文件是否相同,是否需要拷贝
当源目的发生变动时自动进行同步
重试次数,当超过一定数目以后跳过这个文件进行后面的操作
按照源目的的文件结构进行复制(类似于XCOPY)
复制一些特殊属性
目的文件和源文件的文件同步操作
……
功能非常的强大,在今天下午的操作中,在RoboCopy的帮助下,我成功的完成了从受损硬盘的克隆版本里面拿到了尚未受损的数据(40GB)。之所以RoboCopy能够做到,是因为RoboCopy有一个机制:重试和放弃机制,当RoboCopy发现源文件无法被复制的时候,会根据用户的设置进行一个重试(默认是100万次,两次之间的间隔时间是30秒),对于部分受损的硬盘来说,这个功能刚好可以满足跳过损坏的文件而拷贝后面正常的、没有受损的文件。相比之下,XCOPY就没那么方便了。
完成数据的复制工作以后,我怀着非常好奇的心情简单的看了一下RoboCopy的工作原理,不看不知道,一看吓一跳。从引入表分析,除了使用到了2个没有在MSDN里面完全公布的API:BackupWrite和BackupRead(这2个API可以在Platform SDK的示例代码里面找到使用方法),其余的API均是大多数Win32开发者经常使用的。微软能够把这些最最常用的API用到如此的地步,的确让人佩服。
关于RoboCopy的更多的使用技巧,还是请大家自己发掘了,呵呵。 |
|