正如标题所说,我关心的是,我们如何才能避免数据丢失由于硬盘(机械 HDD 或 SSD)坏扇区。
\更多信息\
问题定义得很好。问题到此结束。让我尝试提供更多信息。存储设备故障(硬件故障,首先排除病毒)主要分为两种类型。
整个磁盘故障。磁盘内部的任何机械和/或电子故障都会导致磁盘无法访问。
坏扇区。只有某个部分有故障。整个磁盘似乎运行正常。如果不访问/检查某个坏扇区,我们永远不会知道有坏扇区。
\RAID 无法避免因坏扇区而导致的数据丢失\
RAID1、RAID5 或 RAID6 可以避免第一种情况导致的数据丢失。但是据我所知,标准 RAID 不会定期扫描和检查所有数据,这意味着 RAID 无法避免第二种情况导致的数据丢失。例如,在 RAID1 镜像的情况下。如果第一个磁盘出现坏扇区,则第一个磁盘中的文件已损坏。此时,第二个磁盘中仍然有镜像文件。但我们不知道存在坏扇区。因此,RAID1 阵列不会指示磁盘故障,也不会触发恢复。然后时间不断流逝,坏扇区越来越多。(每个硬件都会磨损,这只是时间问题。)第二个磁盘中的精确镜像位/镜像部分也有可能出现坏扇区。此时,不再有冗余副本。受影响的数据将永远丢失。同样,我们也不会立即注意到这一点。直到我们访问该数据时,我们才会发现这个丢失。
\是 ZFS(带有校验和的文件系统)一个办法?\
由于担心避免因坏扇区而导致数据丢失,我开始研究文件校验和。似乎没有多少流行的文件系统包含每个文件的校验和。我对 Gentoo Linux 有一些了解。因此我计划在 Gentoo Linux 上使用 ZFS。
ZFS 的“存储管理应该简单”和“冗余应该由文件系统处理”的理念很好。在我看来,如果 ZFS 磁盘中出现坏扇区,它会默默地恢复它(不是吗?我还不能确认这一点)。如果 ZFS 磁盘中出现越来越多的坏扇区,是否意味着该 ZFS 磁盘的大小会缩小?如果不是,我如何才能注意到坏扇区何时出现?我如何知道硬盘坏扇区太多,我必须用另一个健康的硬盘替换它?我想我需要一些 ZFS 监视器和 ZFS 实用程序,但我在互联网上找不到太多相关信息。
答案1
鉴于你假设数据存储最终总会失败,你只需要保留多份副本数据,并偶尔检查并确保您可以成功读取数据。
使用某种类型的 RAID 听起来像是至少拥有一份备份的好方法,但额外的副本也是一个好主意,至少出于显而易见的原因,不必将所有副本都放在同一栋建筑、房间和机器中。在线备份是一种让其他人担心其驱动器故障的好方法。
为了确保数据仍然可读,只需保留自己的校验和并定期验证即可。基本的 CRC 就可以了,例如cksum
GNU 的核心实用程序,甚至是 md5sum 或 shaXsum(尽管在我看来,它们对于坏扇区来说有点过头了)。
[并且保留校验和文件的几个副本,原因很明显。]
即使 ZFS 有自己的校验和,您仍应保留自己的副本,以验证存储在其他文件系统或在线的副本。我假设您或 ZFS 无论如何都必须读取所有文件以进行验证(我相信这被称为ZFS 数据清理,用 明确调用zpool scrub
)。
有趣的是,许多驱动器(尤其是闪存驱动器)会自行进行坏块管理(和磨损均衡),将坏块和边缘块换成新的备用块,所有操作(大部分)都是悄无声息地进行,您或操作系统甚至都不会注意到。我曾经读过有关闪存卡的文章,16GB 内存中只有足够好的内存来制作 512MB 或 1G 的卡。
答案2
关于 RAID 5/6
RAID 5/6 具有奇偶校验数据。
如果它可以重建整个磁盘,那么肯定有足够的奇偶校验数据来恢复单个扇区。
最糟糕的情况是,您检测到坏扇区并替换整个驱动器,现在一切都已重建。
因此,如果 RAID 5/6 检测到坏扇区,则应该自动使用奇偶校验数据进行修复。
我的 Adaptec RAID 控制器甚至在 GUI 中有一个特殊的“验证/修复”选项。
另请注意校验和、sha1、sha2、CRC 等仅提供检测错误发生时间的功能。它不提供修复错误的能力。