是否可以对数据进行编码,使其能够从损坏中自我恢复?(损坏 - 例如,带有坏扇区的硬盘或 USB 驱动器)
我并不是在寻找涉及备份、RAID 或文件系统修复的解决方案。我正在寻找对原始数据采用某种自我修复过程的解决方案。
我也知道我可以提前对我的数据进行校验,这将帮助我了解(大多数情况下)如果发生腐败。对我来说,这只是成功的一半,我需要系统不仅知道某些东西已经改变,而且能够从改变本身中恢复。
我知道ZFS 及其功能:
如果存储池通过 ZFS 镜像或 RAID 实现冗余,ZFS 可以修复数据。如果存储池由单个磁盘组成,则可以通过指定“copies=2”(或“copies=3”)来提供这种冗余,这意味着数据将在磁盘上存储两倍(三倍),从而有效地将磁盘的存储容量减半(对于“copies=3”,则减少到三分之一)。
但我正在寻找一些不同的解决方案/工具,例如可以保护 FAT、FAT32、exFAT 格式的 USB 闪存驱动器上的数据。有这样的产品吗?
答案1
没有这样的工具可以神奇地恢复损坏的数据除非你有足够的数据奇偶校验/备份副本有问题。@grawity 表示类似这样的工具PAR2,快捷宝, 和压缩包可以做你想做的事。为了正常工作,这些工具会将奇偶校验数据构建到存档中,因此如果某些数据损坏,恢复(希望)是可能的。我是 WinRAR/7z 的长期用户,但我从未探索过此功能,因此我无法评论其有效性。
大多数文件系统都具有一些“自我修复”措施,如 NTFS 检查磁盘,它既有可能损坏数据,也有可能修复数据。
虚拟文件系统并不是唯一具有我认为的“真正”自我修复功能的文件系统,但它是最成熟的。 文件系统和重新文件系统还具有“真正的”自我修复能力。即使具有“真正的”自我修复能力的文件系统也需要奇偶校验数据来修复。
如果可能的话,我会避免将您真正关心的数据放在闪存驱动器上,不是因为它是闪存,而是因为即使您有奇偶校验数据,它也仍然只包含在一个物理设备上。如果您必须使用闪存驱动器,请确保它使用高质量内存,并避免宇宙射线风暴。尝试一下@grawity 提到的一些工具,我知道我会的 :)
答案2
感谢旧 slashdot 帖子,我找到了可以保护闪存驱动器上数据的解决方案/工具。
看起来它使用数据奇偶校验来修复损坏的扇区。
接下来简单介绍一下我用来额外“保护”重要文件的方法,这样即使保存这些文件的某些扇区丢失了,我仍然可以挽救所有内容。
这一过程背后的想法是纠错码,例如无处不在的 Reed-Solomon。使用 Reed-Solomon,奇偶校验字节用于保护数据块免受每个块指定的最大错误数的影响。在下面描述的工具中,223 字节的块被 32 字节的奇偶校验屏蔽。然后,原始的 223 字节变为 255 个“屏蔽”字节,即使“屏蔽”块内的 16 个字节变成噪音,也可以恢复……
“freeze”和“melt”脚本可用于创建可部署到 USB 闪存驱动器(或任何介质)的文件。
我们使用 freeze.sh 脚本(这是我的软件包的一部分)“屏蔽”一个文件;然后我们对冻结的文件执行 melt.sh 操作,并验证(通过 md5sum)新生成的文件是否与原始文件完全相同。然后我们继续故意破坏屏蔽文件的 64KB(这是很多连续的扇区!),使用 dd 用零覆盖 127 个扇区。我们再次调用 melt.sh,我们看到新生成的文件(data3)的 MD5 和与原始文件相同 - 它被完美恢复了。
极好的!!!