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