SD 卡作为使用数据冗余的长期存档介质

SD 卡作为使用数据冗余的长期存档介质

对我来说,使用 SD 卡进行备份的主要担忧是可靠性而不是存储容量。众所周知,与 CD 和 DVD 相比,SD 卡以较低的成本提供相对较高的存储空间。但是,它们可能不够可靠,无法用于长期存档,例如存储数十年的时间跨度。我正在研究使用 SD 存储卡存储小批量数据(如文本文件、电子表格和偶尔扫描的文档),供个人使用和家庭历史,而不是商业用途。总存档大小可能为 500MB。

我搜索了互联网,寻找专门设计用于在文件级别构建文件冗余副本或使用冗余二进制(用多个位来表示一个位)的特殊 SD 文件系统,但什么也没找到。我也在寻找可能已经开始解决这个问题的软件项目网站。

这超出了我的专业范围。我知道 SD 卡是一种块设备,但我对此的理解很浅薄。它们似乎可以控制自己的内存管理,但之后我就迷茫了。

对于任何了解 SD 卡内存操作以及此内存常见故障原因的人来说,在一张卡上保留文件的冗余副本是否可以解决可靠性问题,还是卡故障会一次性损坏整个卡?或者,是否有某种文件系统(而不是文件副本)具有冗余内存位。例如,如果我有 500MB 的档案和一张 32GB 的卡来存储它们,64 份文件副本是否会保存得更好,或者假设文件系统为每个位写入 64 位,那么如果说 62 位表示“0”,而其他 2 位表示“1”,则文件系统会将其解释为“0”。(这张卡存储多年后,而不是第二天!)

所以我的最终问题是。SD 卡是否能够利用数据冗余成为可靠的存档介质?或者它们的质量太差,即使有冗余也不可靠?

答案1

SD 卡完全不适合长期存储,因为 NAND 内存会“泄漏”数据。简而言之,单元级别的特定电荷“决定”值是 0 还是 1。随着电荷泄漏或泄漏,在某个时刻,它会降至阈值以下,此时位会“翻转”。

我想你可以把它比作一个可充电电池,随着时间的推移,它的电量会逐渐减少。在一定程度上,NAND 控制器可以弥补这一点。首先,每个扇区的位翻转次数可以通过 ECC 检测和恢复。可以恢复多少翻转位取决于 ECC 算法和 ECC 代码的大小。

NAND 恢复软件模拟控制器读取重试

在较低级别,控制器采用一种称为“读取重试”(RR)的技术,该技术允许控制器尝试替代阈值(下图中的探测级别)。它不应与简单地尝试读取几次相混淆。例如,如果较低的阈值导致较少的位翻转,足以纠正 ECC,则可以读取/恢复数据。然后将数据写入新页面以保存它。在上面的例子中,控制器被绕过,并且 RR 寄存器被 NAND 数据恢复软件使用,显示了尝试不同阈值的显著效果。

降低阈值可能会恢复位翻转

现在,如果你在卡上放了多份数据,这可以起到一定的保护作用,但不仅仅是用户数据会受到数据泄露的影响,存储在同一 NAND 上的固件也会受到影响。这可能会导致完全无法访问卡,事实上,固件损坏(通常是由于 NAND 降级造成的)是 SD 卡故障的一个非常常见的原因。

我们仍然可以通过转储 NAND 并模拟 ECC、混合和加扰的控制器算法来尝试恢复数据(示例显示 UFD,SD 卡的流程相同):

在此处输入图片描述

问题不在于它是否会发生,而在于它何时会发生。这取决于多种因素,包括所用组件的质量、NAND 的类型、设备使用情况(p/e 周期)、ECC 算法的“强度”、ECC 代码的长度以及存储温度等环境因素。但即使所有这些都对您有利,SD 卡在某些时候也会失效。

从个人经验来看(我的工作是从小型闪存设备(如存储卡和 USB 闪存盘)中恢复数据),我可以分享我见过廉价的 USB 闪存盘,尽管存在大量损坏的数据,但放在某个抽屉里还不到一年,基于 NAND 的驱动器可以使用好几年,而 SD 卡则完全没有响应/无法访问,等等。

在这种情况下,NAND 损坏正好发生在文件分配表所在的区域中(效率低下的磨损均衡与频繁写入的区域相结合是一个坏主意):

在此处输入图片描述

总之,我强烈建议不要使用 SD 卡进行(半)永久存储。

相关内容