raid5 磁盘阵列真的不安全么？
2019/03/22修正：简短部分引文，修正计算公式（不影响结论），补充替代方案。 一句话结论：现代大容量硬盘组成的RAID 5单盘故障后，重建失败的概率相当高，不可忽略；但数据本身还是基本安全的（会丢失部分文件），只是可能需要一个比较麻烦的恢复方案。  楼上包括高赞回答在内一堆说两个硬盘同时坏的，要加一个热备盘的，都是没仔细看过问题里面的链接就回答的。在回答问题的现在，这个链接失效了，但网上还是有人转载过的，例如这篇[1]：  这篇文章有两个我认为不正确的地方： 点击上面的“这篇文章”的链接[4]，原文部分摘录如下： 摘录部分翻译如下： 然而，不同型号（译注：原文指消费级硬盘及SCSI/光纤通道硬盘）之间存在的差异是我们所熟知的误码率。误码率是指由于无法通过PRML和ECC从盘片上的恢复数据而无法从磁盘读取某个扇区数据的概率。硬盘整体来说并未发生故障，但用户无法读取该扇区的数据。在RAID系统中，这会触发用其它硬盘上的数据对该扇区数据恢复的重建过程。 正如我在视频中描述的“RAID的麻烦”一样，这种误码率是当今RAID技术最大的问题。如果RAID 4或RAID 5中的驱动器发生故障，则剩余的每个硬盘都必须从头到尾“完美”的读取一遍，否则将会导致数据丢失。使用7+1个1 TB容量硬盘，这意味着必须读取7 TB。1/10^14的误码率为意味着有44％的概率无法做到（“完美”读取7TB数据）。 译注：  [4]所提到的bit error rate，现在各家硬盘厂商的Datasheet中通常叫Non-recoverable Read Error rate，网上包括维基通常用Unrecoverable Read Error rate（URE，本文均使用此缩写），也就是[1]所提到的“写入硬盘的数据，在读取时遇到不可修复的读错误的概率”。 稍微解释一下，这个读错误产生的原因可能在于： 在硬盘内部，这种错误其实是经常发生的，但一般来说每个扇区可能也就1~3 bit的数据发生这种错误。因此机械硬盘每个扇区后面有若干位ECC纠错码（早期的512B扇区硬盘是每扇区50Byte，现在的4K扇区硬盘是每扇区100Byte[5]），可以用于纠正此类错误。然而ECC不是万能的，如果读取某个扇区的数据时发生错误的位过多，ECC也无能为力，这个时候就发生“不可恢复的读取错误（也就是前面定义中的Unrecoverable Read Error）”了。按照硬盘厂家提供的参数，发生这种情况的概率——也就是URE，消费级硬盘一般是1e-14，企业级硬盘发生URE的概率一般是1e-15。  [4]并没有给出具体的计算根据URE计算RAID5重建成功概率的公式，这里稍微补充一下。如果某款硬盘的URE是1e-14/bit（这个可以从各家硬盘厂商的DataSheet中查到），并不代表每读取1e+14 bit就一定出现一次URE。同样可以用二项分布公式计算，读取1e14bit发生URE的概率： 不过1e14次试验，1e-14的概率这样的数字，Excel是算不了了，可以用Python的scipy库计算： 我们只关心不发生URE的概率，也就是0次。因此二项分布的概率质量函数可以这样简化： \begin{equation} \begin{aligned} Pr(X=0)&=\binom{n}{k=0}p^{k}(1-p){n-k}\\ &=\frac{n!}{0!(n-0)!}p^{0}(1-p)^{n}\\ &=(1-p)^{n} \end{aligned} \end{equation} 而4个1TB硬盘组成的RAID 5，单盘故障后的重建过程需要读取的数据量为1e12 Byte×8 bit/Byte×(4-1)=24Tbit，而读取24Tbit过程中没有发生URE的概率则是(1-1e14)^24e12=78.68%。用Excel可以很轻松计算出重建RAID5过程中，不同误码率，不同容量的硬盘，组成4/8盘RAID 5的重建成功/失败概率，见下表（PS：Excel用简化公式计算和用scipy直接计算的结果会稍有出入，但可以忽略）。 表中8个URE为1e-14建立的RAID 5重建成功概率为57.15%，和[4]所说的44%失败比较接近了。所以前面[1]所说的56%，是8个1TB硬盘组成的RAID5，重建过程中因为发生URE导致重建失败的概率。而单个1TB硬盘完全读取，发生URE的概率应该是7.68%。 进一步观察估算结果，其实单个硬盘全盘读取，8TB容量出现URE概率已经接近50%了。也所以现在8TB以上（含8TB）的硬盘，即使是消费级的，也都是1e-15的URE——起码希捷的最新产品线是这样。倒是企业级的Exos 5E8只有一款8TB型号，反倒标称的URE参数是1e-14。 从上表可见4个URE为1e-14的1TB硬盘组成的RAID 5重建失败的概率为21.32%，其实已经相当高了；8个URE为1e-14的硬盘组RAID5的话，1~2TB还可以拼一下脸，3~4TB那叫玩命，6~8TB就是碟中谍了。 需要说明的是，通常RAID 5是在硬件层面（有独立主控芯片的RAID卡，常说的硬RAID）或者块设备驱动层面（主板或操作系统，软RAID）实现的，与文件系统独立。因此RAID控制芯片或者驱动是无法知道RAID上某一段数据，到底是存有数据的文件，还是某个已经被删除的文件；也不知道某一段全0的数据，到底是未使用空间还是某个预分配磁盘空间但未使用的数据库文件。因此即使一个1TB*8，可用空间7TB的RAID 5，假设用户仅仅存放了50GB数据，重建的时候还是必须把7TB的数据全部读取一遍的。对于这种情况，RAID 5EE、RAID 2.0，以及由文件系统本身实现类似RAID 5的RAID Z1（ZFS文件系统），则是可以仅重建已经使用的50GB数据。  对比前面分析，重建过程中第二块硬盘出现故障导致重建失败的概率，8个1TB硬盘低速重建也不过0.11%，但因为URE导致重建失败的概率则是高达42.85%。题目和其它部分答案所提到的热备盘，其意义在于RAID卡/驱动发现单个硬盘故障的时候，可以马上进入重建过程。假设没有热备盘，需要24小时后才能开始重建，按照前面的计算，8个1TB硬盘组成的RAID 5的重建时间从14小时延长到38小时，这个期间第二块硬盘发生故障的概率约为0.30%，和发生URE导致重建失败的42.85%相比，几乎可以忽略了。  所以，现代大容量硬盘组成的RAID5重建失败，并非是两个硬盘同时坏导致（不过从另一个角度来说，可以认为一个硬盘坏的时候，另外一个硬盘已经存在隐患，全盘读取会导致隐患暴露）。因此不要买同一批次硬盘组RAID，保留一个热备盘更安全这两个观点，起码在大容量硬盘流行的现在，已经是过时的观点了。事实上，如果RAID卡或者驱动支持RAID 6，与其留一个热备盘，不如直接把RAID 5升级为RAID 6。  最后需要补充的是，发生URE导致重建失败，并非意味着全部数据丢失——这是唯一值得安慰的地方。数据基本上都还在可以恢复的，只是根据不同的RAID实现方案，可能需要不同的恢复方案：如果RAID卡/驱动允许，可以继续以降级模式运行，那么直接把所有数据复制到另外一个阵列就好；如果RAID卡遭遇URE后，强制某个硬盘离线并且不能重新上线，就需要找专业的数据恢复了。 不过因为URE的存在，这两种方案都可能会丢失一个或多个文件。严重的话，丢失文件系统结构的元数据（Metadata），会导致文件系统崩溃，只能通过数据恢复软件对整个阵列进行全盘扫描来恢复，这样恢复的成功率就很低了。好在通常元数据很小，发生这种情况的概率也很低。反过来，运气最好就是URE发生在未使用的空白区域上，则对数据没有任何影响。 另外，不管哪一种恢复方案，由于需要另外一个同等容量的阵列来存放恢复出来的数据，对于家庭用户来说，通常都是非常麻烦——或者成本高昂的事情。所以我在多个家用NAS主题下的回答，都明确反对家用NAS使用RAID 5。作为RAID 5的替代方案，答主建议如下： 最后的最后： RAID不是备份，重要数据，请做好备份。 RAID不是备份，重要数据，请做好备份。 RAID不是备份，重要数据，请做好备份。 备份到移动硬盘，或者加密同步到网盘都是更安全的方案。 [1]:DBA亲，你们的RAID5阵列有保障吗？-史振宁的技术博客-51CTO博客 [2]:Failure Trends in a Large Disk Drive Population - Research - Google[PDF] [3]:SCSI和SATA的稳定性 [4]:Are Fibre Channel and SCSI Drives More Reliable? [5]:Seagate 中国