数据期待用机械硬盘长期冷保存( 最好 20 年以上),定期通电即可,还是需要读取甚至覆写?

发布时间:
2024-09-10 18:07
阅读量:
9

更新于2022年6月11日

竟然有人追更,不知道更新点啥,随便写两个东西吧,一个是硬盘是什么设备,另一个是关于数据校验。

0.硬盘是什么设备

之所以说这个问题,是有人在评论里说硬盘多少年了都能使,还有就是硬盘有了自己的纠错机制是否还需要软件层面的检查。

这里要说明的是硬盘是块设备,读取硬盘中的内容都是以块为单位读取的,当把数据读到内存中的时候,数据才可以以真正的随机方式读取。在读到内存之前(写入硬盘之后)读/写只能精确到块,而不能精确到位。由于格式化时的配置不同,块的大小范围常用的为512B-4KB,不同的文件系统还会留有一些校验块保证数据完整性。

可以看到,如果磁盘自身没有纠错机制,系统级实际只能发现块的错误,而不能发现位的错误。这样的后果就是一个位的损坏就可能造成整个块不可用(可能会因为一个位破坏块校验)。在有了磁盘自身的纠错能力后,可以有一种基础的保障,就是当单个位翻转或丢失,保证整个块可用,尽量不造成致命损失。

由于磁盘的这种特性,自身的纠错和系统的纠错缺一不可。换句话说,如果简单的一些位的丢失,在这两种机制协调下,可以保证数据不受致命伤,但当错误超出了纠错的能力,那伤害必然是不可挽回的。也就是说能读不代表没丢东西,只是这些纠错能力协调的把丢的东西找了回来,或者减少了丢失,使其并不致命。但一旦读不出来,那就可能遭受不可挽回的损失。

上面说磁盘的特性提到了校验块,简单说说校验。

1.校验

1.0 码距

说到校验不得不提到的一个名词叫“码距

在信息编码中,两个合法代码对应位上编码不同的位数称为码距

这个定义看的应该是及其难懂,而且不明所以。这里面有两个关键词,一个是“合法代码”,一个是“不同位数”。

什么是“合法代码”?合法代码就是能表示信息的代码。那设么是非法代码?非法代码换成人话就是没用的代码,或者无法代表任何信息的代码。当一个合法代码变成非法代码的时候,代表的就是数据丢失。

什么是不同位数?这个说起来就比较麻烦,这里只要知道不同的位数越多,数据丢失的概率越低就好。

码距的增加是可以提高数据安全性的,验证位的加入提高了码距,使其可以在当一个合法代码变成代码非法的时候有一定恢复能力。校验码的种类很多,但是不论什么校验码,在目前都是以更多的存储空间换取数据的安全性。

1.1校验可以加在什么上?

可以加在块上,比如使用哈希算法算出一个校验码,当这个块的位发生变化的时候算出来的校验码也会改变(也有一定概率哈希冲突)。如果校验码出错了,就可以知道这个块的数据坏了,不能再用了。但是这种算法是不可逆的,也就是说只能知道块坏了,却没法修复。为了保证磁盘不出现这种情况,磁盘自身校验是非常必要性。

也可以加在多个块上,使1个块验证1个甚至多个块的相同位置的数据是否出错。说起来绕,举个例子。现在有一个磁盘,上面有两个块,都是512字节的大小。现在让这两个块存一模一样的数据(数据镜像),当其中一个块出问题的时候(哈希校验出错),我读取另一个块的数据来覆盖另一个块的数据,从而保证了数据不丢失。当这两个块分别存在不同的磁盘上,这就是RAID 1。同理我也可以使用一个块使用不同的可逆算法验证多个块,分在不同磁盘的时候就变成了RAID 5、RAID 6、RAID DP等等。


更新于12月13日

今天看到了一句话,非常受用

一个可能出错的事物与一个不可能出错的事物之间的主要区别是,当一个不可能出错的事物出错了,通常也就意味着不可修复。
——Douglas Adams,《基本无害》(1992)

用在数据存储上简直再合适不过了,永远不要认为一种存储方式不会出错,当它出错的时候,也就变成了不可修复,一切介质的可靠性都不如多备份,多检查。


更新于11月19日

说两个问题,一个是关于光盘的,一个是关于硬盘的。

先说光盘的:

评论中有人大吹威宝的档案级光盘,号称现在档案级存储都要用光盘,可这种说法我实在没听说过,各大国内外企业以及档案馆我也没听说过有谁使用。

M-disc使用了与微软Project Silica类似的技术不假,但是它是不是能达到号称的千年,以及是否满足企业需求等等真的不好说。

上图是M-disc和普通盘的结构图对比,这里简单说下光盘到底是怎么存储数据的,以及M-disc与普通盘的区别。

普通光盘是通过激光头发射的激光,在激光穿过数据层时不同“开孔”(标识0和1)时反射的不同来读取存储数据。从图中可以看到光盘结构,由于光线需要反射回来才能读取到数据,所以有一个反射层;由于数据层非常脆弱,所以下面有一层聚碳聚酸酯层(类似塑料)来进行加固。从结构中就能看出,整个结构最脆弱的就是数据层,其次是反射层,而作为加固结构的聚碳聚酸酯层也同样的不怎么靠谱。反射层和数据层的剥离估计大部分用过光盘的人都见过,简单加热冷却,很容易就会产生剥离,而加热冷却又是在光驱内不可避免的(如果在机房环境中则更麻烦,机房是恒温恒湿的,而光驱内温度50-60度都是很正常的,光盘拿出来烫手的经历应该都有)。加固结构由于需要光线穿透,聚碳聚酸酯层必须达到相当的光洁度才可以,灰尘指纹划痕都可能对光盘的读取造成障碍(我曾试着抛光过基层划伤的光盘,抛光前完全不能读取,抛光后有部分读取出来,但是盘读完了也绝对废了)。聚碳聚酸酯这东西也是非常怕热的,基于以上这些原因,光盘实在过于脆弱。

M-disc从结构上看,改进了数据层和反射层,这两层合在一起使用了“Project Silica中使用的二氧化硅”相类似的材料,这种材料从材料本身来说应该是没什么问题的。但是很不幸的是基层没有任何改变还是聚碳聚酸酯,这东西一直是企业弃之不用的一大原因,因为其对拿取放置等等都及其不友好。只要有划伤,指纹等等出现,就意味着可能会有数据丢失,更别说进退光驱和进退储藏环境时本身就可能造成划伤等伤害,这种丢失概率企业应用中是绝对不允许的。随便一收拾就可能造成数据丢失,敢用在归档存储里?

对比下磁带,平时使用的时候掉地上是常事,直接信封一包发快递也是常规操作,长时间存储稍微控制下温湿度即可。收拾的时候也不用特别注意,归档磁带进退带库直接手工就能操作,甚至不用什么防护措施。20-50年的保存期限在刨除新技术的情况下可以算是最优解了。

现在说关于硬盘的:

评论中有人说自己的硬盘快20年了还能用……这能证明什么呢?目前世界上年龄最大的世界纪录为141岁,而平均寿命2015年的统计结果为71岁,您觉得是71更具有代表性呢还是141更具有代表性?下边的回复说的非常的对,丢失1个bit你真的不可能感觉得出来,甚至连续的几个bit你都不大可能感觉得出来,因为计算机在设计之初就已经做了大量的冗余,这些冗余度保证了即便在有一些小问题的情况下机器仍然能正常运行。

当运行磁盘检测的时候,会用红黄绿标识坏块,绿的代表正常,黄色代表快不行了,红色代表坏块。我相信使用机械硬盘的运行磁盘检测的时候多少都会有红色的坏块,甚至出厂时候厂家就没想着100%没坏块,所以刚出厂时就有几个红色是很正常的。这些坏块通过硬件设计的冗余和软件设计的冗余(比如地址偏离,屏蔽坏块等等)保证了机器能正常运行。当坏块增加,冗余度不够的时候,可感知的数据丢失就出现了,而这个冗余度什么时候不够,是不是造成关键数据丢失谁都说不好。所以才有一个评价方式叫平均无故障时间,通过这个参数就可以大概估算冗余量是否足够,但哪怕再多的冗余量也只是将不发生丢失的概率从99.9%后面再多加更多个9而已。


更新下关于存储的内容。

之前看过微软研究团队进行的Project Silica二氧化硅项目,将数据以三维打孔的形式存储于玻璃中,静态存储为目前可能时间最长的。

之所以没有提到是因为感觉可能无法实用,没想到类似的M-disc盘片已经上市了。目前没有找到公开的资料,但从目前的宣传看,应该与微软的技术类似。


如果保存20年以上的数据,其实硬盘是非常不合适的存储设备,企业内如果有这种需要超长时间保存的需求一般使用磁带。

手机打字,这里就不去引用文献了,简单说说。

磁盘和磁带存储数据的方式都是使目标位置的磁性翻转,通过磁极的翻转表示并存储为1或者0。为了防止意外情况,一般连续存储几个bit就会有1-2个bit的验证位,防止因意外发生的错误(简单的原理表述,方便理解)。

知道了存储方式,那么对存储介质而言,数据丢失的原因就是磁极翻转错误,也就是消磁。消磁了,数据也就相应的没了,所以在企业内进行硬盘报废的时候,有一个关键操作就是用硬盘消磁机消磁。而磁性存储介质的数据密度越高,消磁的可能性就越大,也就是消磁就更容易,这里可以参考磁条银行卡。

磁条银行卡上的磁条实际就是一段磁带,但是这么一段磁带的数据密度是相当低的,根据GB/T15120.2中的要求,一条磁条存储的数据为119个字符,就算按照2个字节一个字符计算,总共为1904个bit,而磁条一般长度为85mm。即便如此低的存储密度,在日常环境中,一般银行卡超过10年就很难保证信息完整了,所以一般都是10年一更换。

硬盘为了保证在日常使用环境中不会因为外界环境而消磁,所以做成了一个又重又沉的大铁块(原因很多,这只是其中之一)。

当然这里还涉及一个问题,就是使用的材料是不是容易被消磁,这里只说结论,硬盘对比磁带更容易消磁。硬盘一般存储年限为6-10年,考虑到静置,15年应该没什么问题。磁带在保存的好的情况下20-50年依然可用。

上面说的全是静置,那么硬盘光通电能不能加强数据?

首先怎么才能加强固化存储的数据?要知道,盘片是不通电的,盘片上的1或者0都是通过磁头将盘片上相应位置的磁性进行相应的翻转。那么只通电磁头会做什么呢?在没有指令的情况下,基本上就是对盘片什么都不做。所以如果想要强化磁性怎么办呢?只需要做一次全盘扫描就可以了,当硬盘发现内部磁性超出或者快要超出阈值了,就会自动强化盘片上的磁性,不需要做什么而外操作。

那么每3-6年给硬盘做一次全盘扫描是不是就没问题了?但是这样同样有问题,因为对硬盘的每一次读写都增大了数据丢失的风险,硬盘有一个参数叫平均无故障时间,企业级的硬盘有的能做到百万小时级别。这是个什么概念呢?以120W小时为例,每1000块硬盘,每天运行8小时,那么每150天就会有一块出问题。你怎么保证这块硬盘运行的时候不是这一块?

所以如果是重要数据,多备份两份,最好用不同存储介质的备份,保证不同介质在一个合适的存储环境,随无法保证万无一失,但总会好很多。

END