Raid 1 是否可以防止数据损坏?例如,假设我将所有重要文件保存在使用 RAID 1 中的 2 个磁盘的 NAS 上。如果一个硬盘驱动器出现某种内部问题并且数据损坏,RAID 是否会自动识别并使用另一个好磁盘上的数据进行更正?
它能知道哪一个副本是好的吗?
RAID 5 可以防止损坏吗?
我知道 RAID 不是备份解决方案。我正在尝试弄清楚如何确保我没有备份损坏的数据!
答案1
RAID-1 可防止两个驱动器中的一个完全发生故障。如果驱动器未标记为故障,则其内容被视为准确。但如果出于某种原因,两个驱动器中的一个返回了不一致的数据,则 RAID 系统将无法检测到该错误,应用程序将获得错误数据。
许多控制器都有定期运行的验证过程,但其目的是测试磁盘故障,而不是数据完整性。硬盘驱动器会执行自己的数据完整性测试和校验和,并利用这些测试和校验和来发现坏扇区,但该算法设计得快速紧凑,并不彻底,因此错误可能会泄露。
虽然数据损坏是例外,而不是常态,但也并非闻所未闻。例如,ZFS 团队的一名成员在一次采访中报告说,他们看到高端 RAID-5 设备向他们发送了损坏的数据,他们之所以能发现这些数据,是因为 ZFS 在文件系统级别实现了校验和。
答案2
正如其他人所说,raid1 系统无法区分两个扇区中的哪一个是坏的。
高端 RAID 系统在后台运行清理操作来比较两个副本并标记差异。更好的方法是每次从驱动器读取两个块,并在读取时进行比较。然而,RAID 控制器无法解决这些差异。
在 mdadm 下的 Unix 系统上,可以使用“sync_action”启动清理检查:
可以通过将检查或修复写入设备 sysfs 目录中的文件 md/sync_action 来清理 md 阵列。
请求清除将导致 md 读取阵列中每个设备的每个块,并检查数据是否一致。对于 RAID1 和 RAID10,这意味着检查副本是否相同。对于 RAID4、RAID5、RAID6,这意味着检查奇偶校验块(或多个块)是否正确。
raid1 的作用是防止突然的整个驱动器故障。寻找其他方法来防止损坏。除此之外,Raid1 不提供“历史记录”,因此无法从人为或软件错误中恢复。寻找像 ZFS 这样的文件系统或像 Hammer 这样的历史记录保存文件系统来防止损坏。
答案3
这取决于损坏的根源。如果 RAID 1 镜像中的驱动器出现问题并写入无意义的数据,则 RAID 镜像将降级,而好的驱动器将被使用,您将获得好的文件。在 RAID 5 的情况下,这是通过 2 个数据驱动器和一个奇偶校验驱动器(最简单的形式)完成的,如果 3 个驱动器中的一个无法写入正确的文件,则它将发生故障,您将剩下 2 个数据驱动器或 1 个数据驱动器和一个奇偶校验驱动器。
现在让我们看看如果损坏是由病毒或程序中的错误引起的会发生什么。在 RAID 1 和 RAID 5 中,不会有任何驱动器停止服务,因为驱动器写入正常。没有发生任何故障。但是文件将被破坏,因为病毒或错误正在写入垃圾,它会将其写入 RAID 1 镜像中的两个驱动器以及 RAID 5 系统中的所有 3 个驱动器。
这就是 RAID 不是备份的原因。它能防止最可能发生的故障,即磁盘故障,但不能解决许多其他情况。
答案4
实际上,是的。绝大多数硬盘故障都是全有或全无的。要么 (a) 电缆被拔掉,要么驱动器微控制器发生故障,因此 RAID 控制器根本没有响应 —— 显然驱动器发生故障。或者 (b) 电缆和驱动器微控制器都很好,但当它尝试读取某个扇区时,内部驱动器微控制器检测到数据损坏,因为内部 ECC 校验和失败,并且反复尝试读取该扇区(如果是临时读取故障)最终超时,因此 RAID 控制器会收到礼貌的“抱歉”响应 —— 显然驱动器发生故障。无论哪种情况,RAID-1 或 RAID-5 控制器都明显知道驱动器发生故障。
原则上不会。如果出现严重问题,硬盘写入了无用的数据,但不知何故运行良好,能够为这些无用的数据写入正确的内部 ECC 代码,那么 RAID-1 就无法判断哪个驱动器是正确的。RAID-1 系统可能会在重新同步时用损坏的数据覆盖好数据。RAID-5 也好不到哪里去。主动写入期间的“RAID-5 写入漏洞”电源故障是一种特别罕见但并非不可能的情况。
据我所知,避免这种损坏的唯一方法是除了文件镜像之外还使用端到端校验和,可以作为文件系统的一部分自动执行(ZFS 或 Btrfs),也可以定期或手动执行(重新计算 rsync 校验和、简单文件验证、Parchive 文件集等);最好使用加密哈希,例如 SHA-256。