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