标题：重复数据删除
定义
一种数据缩减技术，通常用于基于磁盘的备份系统，旨在减少存储系统中使用的存储容量。它的工作方式是在某个时间周期内查找不同文件中不同位置的重复可变大小数据块。重复的数据块用指示符取代。高度冗余的数据集(例如备份数据)从数据重复删除技术的获益极大;用户可以实现10比1至50比1的缩减比。而且，重复数据删除技术可以允许用户的不同站点之间进行高效，经济的备份数据复制。 
备份设备中总是充斥着大量的冗余数据。为了解决这个问题，节省更多空间，“重复删除”技术便顺理成章地成了人们关注的焦点。采用“重复删除”技术可以将存储的数据缩减为原来的1/20，从而让出更多的备份空间，不仅可以使磁盘上的备份数据保存更长的时间，而且还可以节约离线存储时所需的大量的带宽。 
就在几年前，D2D备份似乎还好得令人难以置信。受价格低廉的 ATA（以及稍后的SATA）硬盘的影响，很多人会选择用D2D取代虚拟磁带库或做备份到磁盘的工作，使备份速度变得更快，不必再担心在磁带驱动器和磁带库上产生的机械故障，并且使文件恢复变得更加轻松。 
但是今天，我们的磁盘备份设备的容量已经趋于饱和，在数据中心已经没有足够的空间来备份PT级的数据，在这种情况下，当我们希望将备份数据保存一个月时，却只能保存两到三天。问题是在我们的备份设备中有太多的重复数据。现在终于有了解决这个问题的办法，善于抓住机会赚钱的厂商们声称他们的新一代“删除重复数据”产品可以按20：1，甚至300：1的比例缩减我们需要存储的数据量。果真如此吗？让我们仔细看看。 
重复数据删除技术支持在已有的磁盘设备上存储更多的备份数据。因此采用“重复数据删除”技术可以增加您保存备份数据的时间，减少数据中心的消耗，降低成本。如果您删除重复数据后再通过WAN发送，那么您就能够节省大量的带宽，并且可以取代磁带实现网上离线备份。重复数据删除技术唯一的缺点是备份速度变慢。
源起
当您的备份程序在网络中多次从同一目录下备份相同的文件，或者从多个地址处备份相同的文件时，重复的数据在临时区域进行备份。大部分网络上的重复数据量令人吃惊，这些数据从56个用户保存在他们本地目录下的假日聚会的PDF格式邀请函，到每个服务器的系统驱动器上3GB Windows文件，真是包罗万象，应有尽有。 
解决临时区域内文件重复的方案是增量备份。尽管我们很喜欢这样做，尤其是喜欢选择Tivoli Storage Manager 采用的永久增量备份的方法，但当我们考虑到RAID灾难恢复时，我们想到的是重复数据删除，而不是增量备份。增量备份主要是避免重复。 
重复数据删除最基本的形式是出现在CAS（内容寻址存储）设备中的单一实例存储（single-instance store），例如，EMC的 Centera。当每个文件存储到CAS系统上时，CAS系统会为存储的文件内容生成一个散列（hash）；如果系统中已经存在具有相同散列（hash）的文件，系统就会再创建一个表示副本的指针指向已存在的文件，而不是保存另一个副本。 
微软Windows Storage Server的最新版本，Windows服务器的OEM NAS（网络附加存储）版本，采用了与删除重复文件略微不同的方法。当写入数据时，WSS不识别重复文件，而是运行一个后台程序SIS (单一实例存储) Groveler，该程序通过部分文件散列函数（采用二进制比较法）识别重复文件，将重复文件移到公用存储区，原始位置上的文件用连接到公用存储区文件的链接代替。 
尽管文件级SIS能够节省一些空间，但是如果我们不只消除重复文件而且还消除了文件内存储的重复数据，那事情可就变得让人有兴趣了。想想Outlook的 .PST文件。例如一个典型的Outlook用户可以拥有300-MB或更大的.PST文件，文件上保存着他过去所有的电子邮件；每天他都会收到一个或更多新的邮件，就因为那天他的.PST文件改变了，你的备份程序就把这个.PST文件包括在增量备份里了，即使这个300MB的文件只有25 KB 的改变。 
重复数据删除产品能够识别这个25 KB的新数据，并且剔除其余没有改变的旧的数据，只保存25 KB的新数据，从而节省大量磁盘空间。再进一步设想一下，550KB的附件在20个用户的 .PST文件内，如果它们能够被消除，您就可以缩减大量的数据。象下述这样的一组解决方案是Data Domain倡导的采用“重复数据删除”技术进行备份的目标。即这些采用“重复删除”技术的设备管理 VTL (虚拟磁带库) 或 NAS等备份设备，它们从这些备份应用设备（VTL或NAS设备等）中获取数据，透明地执行“重复删除”处理。
方法
厂商采纳的执行重复数据删除的基本方法有三种。第一种是基于散列（hash）的方法，Data Domain、飞康、昆腾的DXi系列设备都是采用SHA-1, MD-5 等类似的算法将这些进行备份的数据流断成块并且为每个数据块生成一个散列（hash）。如果新数据块的散列（hash）与备份设备上散列索引中的一个散列匹配，表明该数据已经被备份，设备只更新它的表，以说明在这个新位置上也存在该数据。 
基于散列（hash）的方法存在内置的可扩展性问题。为了快速识别一个数据块是否已经被备份，这种基于散列（hash）的方法会在内存中拥有散列（hash）索引。当被备份的数据块数量增加时，该索引也随之增长。一旦索引增长超过了设备在内存中保存它所支持的容量，性能会急速下降，同时磁盘搜索会比内存搜索更慢。因此，目前大部分基于散列（hash）的系统都是独立的，可以保持存储数据所需的内存量与磁盘空间量的平衡，这样，散列（hash）表就永远不会变得太大。 
第二种方法是基于内容识别的重复删除，这种方法主要是识别记录的数据格式。它采用内嵌在备份数据中的文件系统的元数据识别文件；然后与其数据存储库中的其它版本进行逐字节地比较，找到该版本与第一个已存储的版本的不同之处并为这些不同的数据创建一个增量文件。这种方法可以避免散列（hash）冲突（请参阅下面的“不要惧怕冲突”），但是需要使用支持的备份应用设备以便设备可以提取元数据。 
ExaGrid Systems的InfiniteFiler就是一个基于内容识别的重复删除设备，当备份数据时，它采用CommVault Galaxy 和Symantec Backup Exec等通用的备份应用技术从源系统中识别文件。完成备份后，它找出已经被多次备份的文件，生成增量文件（deltas）。多个 InfiniteFilers合成一个网格，支持高达30 TB的备份数据。采用重复删除方法的ExaGrid在存储一个1GB的 .PST文件类的新信息时表现优异，但它不能为多个不同的文件消除重复的数据，例如在四个.PST文件具有相同的附件的情况下。 
Sepaton 的用于它的VTL 的DeltaStor也采用内容识别方法，但是它将新文件既与相同位置上的以前的文件版本进行比较，同时也与从其它位置上备份的文件版本进行比较，因此它能够消除所有位置上的重复数据。 
第三种方法是Diligent Technologies用于其ProtecTier VTL的技术，它像基于散列（hash）的产品那样将数据分成块，并且采用自有的算法决定给定的数据块是否与其它的相似。然后与相似块中的数据进行逐字节的比较，以判断该数据块是否已经被备份。
硬件或软件
各大厂商除了采用的方法不同外，他们物理架构的备份目标也不同。Data Domain、ExaGrid 和昆腾是包含磁盘阵列的monolithic appliances（单块集成电路设备）。 Data Domain和昆腾有NAS或VTL接口，而ExaGrid就是一个NAS设备。Diligent和FalconStor销售的是软件产品，运行在Intel 或 Opteron服务器上。 
尽管带有VTL接口的备份设备看起来更高级并且更易于与现存的基于磁带的备份环境集成，但是采用NAS 接口，会为您的备份应用提供更多的控制。当备份文件过了保存期时，一些像赛门铁克的NetBackup之类的备份产品能够从它们的磁盘存储库中删除这些过了保存期的备份文件。当重复删除的NAS设备发现这个删除行为时，它可以重新分配它的自由空间和散列（hash）索引。而对于VTL接口的设备来说，因为您没有删除磁带，所以无法在VTL上释放出空间，直到虚拟磁带被复写，空间才能得以释放。 
当然，在1TB的空间内容纳25TB的数据是要付出一些代价的，不只是在金钱方面。将数据切成块并进行索引来消除重复数据的所有工作会使备份速度减慢。Overland REO 9000 等中级VTL的数据备份速度是300 MBps甚至更快些。Diligent在其ProtecTier上已经具有200-MBps的备份速度，但是需要一个四核Opteron服务器来实现，该服务器前端是装有100多个磁盘驱动器的阵列。 
其它厂商解决该问题的办法是把重复数据删除当做一个独立的过程在备份后运行。在一个系统上运行FalconStor的 VTL 软件，进行备份的数据被写到一个压缩的虚拟磁带文件而不是一个删除重复的虚拟磁带文件上。然后在后台将数据流切成块，消除重复数据并且创建虚拟磁带，该虚拟磁带是执行删除重复数据块在原虚拟磁带上的索引。一旦虚拟磁带的数据执行了删除重复处理，它所占有的空间就返回到可用的空间池。Sepaton的DeltaStor和 ExaGrid也把它们的重复删除当成一个后备份过程来执行。 
尽管后处理能够提高备份速度，但同样也要消耗成本。执行后处理重复删除的系统必须有足够的磁盘空间，因为除了删除重复的数据外，它还需要保存全部标准的备份。如果您希望继续执行每周的全天增量备份的计划，那么一个在后台进行重复删除处理的系统上，你可能需要双倍多的磁盘空间来保存全部的备份直到处理完成为止。 
正因为重复删除在后台运行，所以千万不要忽视重复删除的性能。例如，如果到星期一的晚上您开始再次备份您的服务器时，您的VTL还没有完成对周末备份的处理，这时您会遇到您不想看到的情况，如磁盘空间不可用或重复删除处理使您的备份速度变慢等。
作用：节省带宽
子文件重复删除技术不仅用于在备份应用中节省磁盘空间。新一代的备份应用，包括Asigra的 Televaulting，EMC的 Avamar Axion和赛门铁克的NetBackup PureDisk都采用基于散列（hash）的重复数据删除技术来减少通过WAN发送备份所需要的带宽。 
首先，像生成增量备份的传统备份应用技术一样，新一代的备份应用技术也采用常用的办法如归档位，最后修改的日期，并且文件系统更改从最后一次备份起已经发生改变的文件ID日志。然后它们将文件切成更小的块并且为每个块生成散列（hash）。 
然后，将这些散列（hash）与已经备份在本地的数据块的散列（hash）对象进行比较。没有出现在本地缓存和文件系统元数据中的散列（hash）被发送到中央备份服务器，再将数据与散列（hash）表进行比较。如果没有发现相同的散列，备份服务器发回一个散列表；然后被备份的服务器发送那些散列代表的数据块到中央服务器进行保存。 
与对被备份到多个目标的服务器数据（它们甚至被备份到整个企业的各个目标）进行“重复删除”的备份方案相比，上述这些备份方案缩减数据的程度更高。例如，如果CEO发送100 MB的PowerPoint文件到500个分支机构，只有第一个会被备份，所有其它的只会发送散列到总部并且告知“我们已经收到，谢谢。” 
这种方法几乎避免了影响基于散列的系统的可扩展性问题。因为每个远程服务器只保存其本地数据的散列（hash），散列表不会增长到超出可用的空间，中心位置的磁盘I/O系统比传送备份的WAN 的速度快得多，在磁盘上搜索一个巨大的散列索引也比发送数据快得多。 
尽管Televaulting, Avamar Axion 和 NetBackup PureDisk 共享一个相似的架构，并且都是根据重复数据删除存储的大小进行定价，但是还是存在一些不同的地方。NetBackup PureDisk采用固定的128KB的数据块，而elevaulting 和 Avamar Axion采用可改变大小的数据块，这会使重复删除技术性能更好。PureDisk 支持NetBackup，赛门铁克承诺未来进行更好的整合，即提供我们希望的可以将重复删除与数据中心备份工作整合的设备。Asigra也向服务提供商销售Televaulting产品，以便不想建立自己架构的小企业也可以利用重复删除技术。 
有几个客户的报告中都写到，他们在不对备份流程做大改动的情况下，的确获得了20：1的缩减比例。小企业可以采用 Asigra, EMC 和赛门铁克的新一代备份软件取代传统的备份方案。中型企业可以采用面向数据中心的备份设备。需要很高备份性能的大型企业可能不得不等待下一代产品了。
不要惧怕冲突 
我们之前一直听说用户害怕使用基于散列的重复删除，因为有可能发生散列冲突----两组数据生成相同的散列，从而导致数据损毁。尽管有因为散列冲突导致数据损毁的风险，但是它发生的概率与每天存在的存储管理风险相比是非常小的。 
重复删除技术通常采用MD-5 (a 128 字节的散列) 或 SHA-1 (a 160字节的散列) 算法。生成相同的MD5散列的两个随机数据块的可能性大约是1/1037。如果一个PB的数据采用 MD-5算法，以平均大小为4KB的数据块进行“重复删除”处理，两个块生成相同MD-5散列的可能性大约是1/1020。 
通过比较，具有一百万小时MTBF（平均故障间隔时间）的两个互为镜像的驱动器在彼此一小时内发生故障的可能性是都是1/1020---比发生散列冲突的机会几乎高10亿倍。通过以太网或FC发送的数据受CRC-32检验和的保护，其未检出数据差错的概率大约是1/4x109。 
记住存在散列冲突是很重要，但并不意味着数据会全部丢失。如果重复删除系统错误地把两个数据块识别成含有相同数据的块，当它们不被存储时，系统会继续执行操作。但当存储数据时，数据被错误识别的这个文件会被破坏。所有其它的数据会被正确地恢复。发生散列冲突的概率应该小于行星碰撞或黄石公园大火山喷发的概率。 
存在于数据重复删除中更大的风险是来自硬件故障的灾难性的数据损失。因为任何特定的备份工作的数据，实事上，是任何特定的大文件被切成块，分散在整个重复数据删除设备中，它不关心你备份了那个服务器多少次，如果你在重复删除设备中损失了一个RAID设置，你会损失很多数据。于是增强的数据保护功能，例如电池备份缓存和RAID 6，对重复删除目标来说，比对基本的存储应用更重要。
分类
按照部署位置的不同，重复数据删除可分为源端重复数据删除和目标端重复数据删除。源端重复数据删除是先删除重复数据，再将数据传到备份设备。目标端重复数据删除是先将数据传到备份设备，存储时再删除重复数据。
按照检查重复数据的算法不同，重复数据删除可以分为对象/文件级和块级的重复数据删除。对象级的重复数据删除保证文件不重复。块级重复数据删除则将文件分成数据块进行比较。
根据切分数据块方法的不同，又可分为定长块和变长块的重复数据删除技术。变长块的重复数据删除，数据块的长度是变动的。定长块的重复数据删除，数据块的长度是固定的。
根据应用场合的不同，可以分为通用型重复数据删除系统和专用型重复数据删除系统。通用型重复数据删除系统是指厂商提供通用的重复数据删除产品，而不是和特定虚拟磁带库或备份设备相联系。专用型重复数据删除系统是和特定虚拟磁带或备份设备相联系，一般采取目标端重复数删除方式。
恢复
恢复过程中，你所需的数据可能不是存储在连续的磁盘块中，甚至存储在未经重复删除的备份中。当备份数据过期、存储空间释放时，就会产生存储碎片，延长恢复时间。由于数据及其指针可能是无序存储，被删除的重复数据也会产生碎片，从而降低恢复性能。[1]
一些提供重复数据删除功能的备份和存储系统供应商预料到了恢复过程的性能问题，并将产品优化，解决磁盘碎片问题。ExaGrid Systems、Sepaton等供应商的解决方案可以完整地保存最近一次的备份副本，因此，最近一次备份的数据能迅速恢复；而其它的解决方案则需要几天、几星期甚至几个月才能重构数据。其它解决方案在备份期间分散重复数据删除的负荷，而在恢复期就集中负荷，以加快恢复速度。这种情况同时使用了软件和硬件方法。如果供应商能加快多个节点的重复数据删除速度，并允许添加节点，那么其性能扩展能力就优于那些只有一个摄取点/处理点的产品。
性能由多方面的因素决定，包括备份软件、网络带宽、磁盘种类等。单个文件的恢复时间与完全恢复截然不同。因此，你应该测试重复数据删除技术在各种恢复场景下的运行情况，尤其是当数据恢复需要较长时间时更应如此，从而判断重复数据删除技术对你的环境有什么影响，这一点非常重要。