误差修正:文件存储和归档亟需的功能

本文作者Henry Newman是Instrumental公司的首席技术官,他在高性能计算和存储领域拥有28年的行业经验。

我最近参加了一次由美国政府部门主办的保护归档研讨会,这些设备必须以数字格式永久保存信息,我认为在现实归档中那些文件需要被更好地保护。

此次研讨会主要是讨论保存归档文件所面临的某些困难,那些文件在从其他原始模式格式转换成数字格式时不能发生变化。

与会的大多数业内人士都认为,随着时间的推移,数字数据会不可避免地发生变化(某些字节从0变成1,或从1变成0),或多或少的字节将发生变化或导致误读,那样文件就会变得不可读或因为某一部分损坏而变得不可用。丢失一个文件中的某一部分还是小事,如果丢失了文件定义的部分,那么整个文件就可能丢失了。

来自电影行业的某位与会者提到,甚至是放了100年之久的老电影通常也能正常播放,大多数电影都是可供人们观看的,清晰度也足够。他提出,为什么数字文件格式不能保持这种耐用性呢? 这是个好问题,但是没人能够回答。

文件头和文件系统超级区

我的一位来自仿真行业的厂商朋友对我说,在上个世纪七十年代,他曾经在一项工程中为他们生产的每个仿真文件都使用了两个文件头。那不禁令我想到,文件系统是如何写入多个超级区的呢?超级区跟数字文件的文件头具有相同的功能。 从微软的应用文件到数字音频和视频文件,几乎每一个文件都只有一个文件头。文件系统的超级区可以保证文件系统是可读和可处理的,如果丢失了某个磁盘的超级区的位置,文件系统就会试着读取其他磁盘然后判断是否还有超级区的有效副本。

这种需求跟音频或视频数字格式或任何其他文件的文件头没什么两样。虽然这只是问题的一部分,但是如果一个文件可以被多个文件头写入,并且应用软件也知道到哪里去寻找文件头的话,那么这个问题就迎刃而解了。 你可以想把文件头放在文件不同的地方,因为如果放在一起的话,一旦那个扇区出现故障,那么两个文件头就同时丢失了。

那么,让我们假定你将一个文件头放在文件开始的地方,将另一个文件头放在文件结尾的地方,那么你怎样知道哪一个文件头是好的呢? 显然,这就需要创建一个文件头数据的校验数字,然后将它与其他的校验数字对比。这也就是说,你必须读取文件头并验证校验数字。另一个办法是给文件头增加误差校正码,这样就可以纠正较少的损坏数据。 许多电信系统和航天飞机都采用了这种方法,这种方法被称为表决法,即读取三个或更多的文件头,然后将它们进行对比,看哪些会得出相同的结果。我想,给文件头增加误差校正码是最可行的候选方案,原因是:

你只需读取相对较少的数据

由于你只需读取一个文件头而不是多个文件头,因此你在文件中搜索的范围就小了很多。

误差校正码可以同时检测并修正多个错误,因此这比验证校验数字的方法更有用。

如果误差校正码出错,我们现在显然有能力去验证和修正文件头。

这种候选方案的不足之处在于,如果文件头所处的扇区损坏严重,你可能就不能重建文件了,因此对于最重要的文件来说,不妨同时采用双文件头和误差校正码两种方案。用多个文件头保护扇区故障以及用误差校正码保护少量数据出错同时使用可最大限度保护数字数据。

这种方案的另一个特点是,文件头可能会很大,甚至占满整个磁盘扇区,现在一个扇区有512字节,以后可能会变成4096字节。

广播行业的先例,重复数据删除

误差校正码方案已经使用了数十年的时间,现在是开始考虑使用这种技术的时候了,以免文件因为一点字节出错而丢失。由于现在各种压缩技术的应用非常普遍,通常丢失一个字节就可能会导致整个文件的丢失。 你遇到多少次在家中打开某个数字图片结果发现文件不可读取的情况?

在上个世纪九十年代,有一些RAID公司为广播行业提供了读取容错技术。这些公司这么做是因为如果你正在为超级碗播放某个商业广告,在重播时丢掉一点字节总比整个文件完全不可重播并损失数百万美元的收入要好一些。 通常,丢失少量数据甚至不会被注意到。广播行业一直认为丢掉少量数据比丢掉整个广告商机要好一些。 我们如今面临的问题是,由于图片、视频和音频文件都经过了压缩,丢失少量字节的数据而造成的影响比以前更大了。

有些应用软件会为每一个文件都创建校验数字,但是那并不能解决文件中的问题,它只能告诉你文件已经发生了变化,当你无法显示某一部分画面或者某一部分画面看起来很难看时,那显然就是文件的某一部分出问题了。 我是压缩技术的狂热爱好者,也许我们需要做的是吸取重复数据删除业界的一些教训。许多重复数据删除产品都有误差校正码,可以修正每一个扇区。 误差校正码的数量因厂商而异,但是你为岳母的照片文件创建的误差校正码也许跟美国政府保存归档文件所需的误差校正码是不同的。

虽然我也不想分出太多的磁盘空间、CPU、内存带宽和时间去处理误差校正码,但是我当然想让重要文件具备更多的误差校正码。如果有办法在文件发生变化后去设置和重新设置误差校正码的数量就好了,但是文件格式仍需一种在某个误差校正码所处扇区出现故障时仍能显示文件的方法。 如果某个误差校正码所处的扇区出现故障,我也不会丢失整个文件。比如一张鱼的图片文件的某些数据所处的扇区出现故障,导致鱼眼无法显示,那么也能让我显示其余部分的图片,这样我还能够用Photoshop做些补救。

我认为,文件和数据完整性的现状必须发生变化,我们最终将失去所有的长期归档数据。对于业界和全球各国政府来说,潜在的代价是巨大的,我们可能会丢失一部分历史,这意味着我们必须做些什么来预防这种情况的出现。 一切都在走向数字化,从病历到老电影,从照片到文件。现在的方法也许在过去是适用的,但是它们在未来肯定是不适用的。