答案1
在备份中添加纠错码 (ECC) 绝对是一件好事。您需要牺牲一些额外空间来以数据冗余的形式获得一定的稳健性。
vdmfec
看起来是一个不错的小工具。默认情况下,它假定块大小为 b=1024 字节,并且为每 K=14 个输入块写出 N=18 个块。这意味着默认情况下,输出大小每 14 个块增加 NK=4 个块,大小增加约 29%。您可以使用参数 K 和 N 来获得或多或少的冗余,尽管我的感觉是默认值可能适合大多数用途。
不过,您需要注意一些潜在的问题。首先,根据手册页:
请注意,N、K 和块大小参数不会写入输出!运行解码器时必须指定相同的参数。 (实际上,解码器能够显式检测无效的 K 值,但不正确的块大小或 N 值将导致坏块和解码失败。)
因此,请记住记录每个备份使用的特定参数。即使您始终使用默认值,显式记录这些值也可能是个好主意,因为默认值可能会在程序的新版本中发生更改。
其次,手册页是这样说的:
解码器能够从不可查找的介质(例如管道)中读取数据,但是不会检测到缓冲区欠载,从而导致失败。此外,从管道读取时,必须读取整个文件。从可查找流中读取数据会更快,因为只需读取 N 个块中的 K 个好块。
这意味着vdmfec
创建备份时最好(也是最安全)将其放在命令管道的最后。例如:
tar -cf - /data | gzip | vdmfec > /backups/data.tgz.vdm
vdmfec
通过在备份时最后进行编码,这意味着您可以vdmfec
在恢复时对可查找文件而不是不可查找管道使用解码器,从而避免使用管道时可能出现的潜在问题。例如:
vdmfec_decode /backups/data.tgz.vdm | zcat | tar -xf -
总之,我想说这vdmfec
是一个很好的工具,可以使您的备份更加强大,防止由于介质退化引起的错误而导致数据丢失。当今的硬盘驱动器正在使用越来越高的位密度来实现不断增加的多 TB 容量,因此我认为为了安全起见,绝对值得在备份中添加一些额外的冗余。
最后:另一个具有类似功能的工具vdmfec
是par2
(手册页),但它的工作方式完全不同。par2
如果您发现需要split
归档文件,可能是一个更合适的工具,因为它par2
的开发目的是将 ECC 添加到分割成许多较小文件的大文件中(例如,用于发布到 USENET 二进制文件组)。