本文讨论的是数据不定期损坏的问题,并非一定会发生,即使是发生数据损坏事故的概率远低于廉价SATA的高端企业光纤信道驱动器也不能例外。 另外,发生问题的部件不一定是驱动器或者控制器,也可能是内存、CPU或者别的什么部件。归结为一点就是,数字世界中的数字资料肯定有可能会损坏。 虽然发生数据损坏事故的情况跟使用的操作系统、硬件和软件都有关系,即使是运行在基于MVS多重虚拟存储系统的IBM大型机上也可能发生数据损坏事故,只是概率要比系统低很多。
>瑞士一家实验室去年发表了一篇关于数据损坏的论文,其中有些内容值得一读。
>你可能会想,这些跟重复数据删除有什么关系。问题是,如果重复数据删除的硬件或者软件损坏了,你可能会失去所有的数据。 如果你打算删除重复的数据,你就必须保证你拥有的那些数据是完好的。
>例如,加入数据在被读出时损坏,而存储在磁盘上的数据仍是好的,那么在进行数据对比时会怎么样? 如果再次读取,可能就能够得到正确的数据。但是如果数据被写入磁盘时的日期出错,你是否还能读取那些文件呢? 让我们一步一步分析这两个例子,看看到底发生了什么事。
>实例1:受损数据读取
>如果从磁盘读取数据,而且那些数据由于某种原因损坏了,然后开始将受损的数据应用于新数据,你可能会遇到一个大问题。当你再次从磁盘读取数据,进行重复数据删除的操作时,它可能就不同了。
>如果将读取的数据与新数据进行对比,内存中的数据将是坏的,所以你找到的所有一样的数据在下次被读取时都将变成其他的数据。因此,基本上从受损数据中读取的任何数据都将被错误的对比,因而变得无法读取。
>如果那些数据由于某种原因被重新读取,而且读取的是正确的数据的话,那么后续数据都将是正确的。除此之外,就会发生无法恢复的调试,你将丢失大量的数据。 令人担心的是,一部分数据是好的,一部分数据是坏的,要想区分开来,非要进行非常细致的检查工作。
>实例2:受损数据重复数据
>但是,如果数据从一开始就出错,在磁盘上就已经受损了怎么办? 这个问题与第一个实例很相似,只是第一个实例中的数据是好的,后来才读取了坏的数据,令所有数据都受损了。在这个实例中,重复数据是在内存中创建的,是好的,但是磁盘上的数据是坏的。 也就是说,你用一个好的重复数据建立了数据,但是一旦从磁盘读取数据,数据就变成坏的了。好的一面是,一旦从磁盘重新读取数据到内存,数据就一样了,所以这个问题不是很严重。 但是在利用内存中的原始数据创建数据时,你不能进行恢复已经删除的重复数据。当你下个月恢复删除的重复数据时,你会获得错误的数据,除非从磁盘读取正确的数据才行。 再次强调一点,这是个调试问题,可能无法解决。
>你需要向厂商咨询些什么
>我自己遇到过数据受损的事故,我也看到其他人遇到过同样的问题,你迟早也会遇到。 我也非常相信新的T10 Data Integrity Field标准,这个标准会从主机向磁盘进行8字节的检验,让磁盘来验证数据,估计很多厂商都将在今年晚些时候提供基于这种标准的产品。我个人很喜欢这个标准,因为有些部分已经应用于硬件的数据通道中,它是由为你提供SCSI协议的同一个厂商提供的。
>文件系统可以进行数据检验,但是如果文件系统在进行检验时修正了数据,你可能会遇到两个问题:
>文件系统在检验之前必须将数据读回到服务器。当数据被写回设备之前,它们是没有被检验过的。
>服务器CPU必须计算出检验数字,并且在文件被读回时进行验证。这对服务器有很大影响。 包括增加内存带宽的要求以及利用CPU高速缓存,要求将应用程序重新从内存载入以及检验数字计算所需的内存带宽。
>如果你运行的应用程序使用了大量服务器资源,这就会构成一个严重的问题了。
>有些产品有着自己的文件系统和检验数字,可以解决我对数据损坏的部分担忧,但是并非所有的厂商都提供了具有这些功能的产品。这只是你应关注的重复数据删除中的一部分问题。 在选购产品时,你还必须考虑其他许多因素,但是这应该是你优先考虑的因素。你在提出这个问题的时候,厂商们也许会说这是你自己的问题,你的系统应该象T10DIF那样。 这种回答是错误的。在你提出问题之前,厂商们必须考虑到你的硬件和软件,如果它们把问题丢给你,你就不用考虑购买它们的产品了。
>在某些环境中,重复数据删除是一种很重要的工具,但是凡事都有两面性,你应该认真规划和执行它。