奇偶校验如何在 RAID-5 阵列上工作?

Naf*_*Kay 31 raid raid-5

我希望为专用备份构建一个漂亮的小型 RAID 阵列。我想要大约 2-4TB 的可用空间,因为我有一个将所有东西数字化的讨厌的小习惯。因此,如果驱动器出现故障,我需要大量存储和大量冗余。我还将/home使用 Linux 的“Time Machine”克隆之一来备份 2-3 台计算机的文件夹。可以通过 SSH 通过我的本地网络访问该阵列。

我很难理解 RAID-5 如何实现奇偶校验以及实际需要多少驱动器。有人会假设它需要 5 个驱动器,但我可能是错的。我见过的大多数图表只是让我感到困惑。似乎这就是 RAID-5 的工作原理,请纠正我,因为我确定我没有正确掌握它:

/---STORAGE---\    /---PARITY----\
|   DRIVE_1   |    |   DRIVE_4   |
|   DRIVE_2   |----|     ...     |
|   DRIVE_3   |    |             |
\-------------/    \-------------/
Run Code Online (Sandbox Code Playgroud)

驱动器 1-3 似乎作为单个大型驱动器 ( capacity * number_of_drives)出现并工作,而奇偶校验驱动器备份这些驱动器。我觉得奇怪的是,我通常在图表中看到 3 个以上的存储驱动器,而只有 1 个或 2 个奇偶校验驱动器。假设我们在 RAID-5 阵列中运行 4 个 1TB 驱动器,3 个运行存储和 1 个运行奇偶校验,我们有 3TB 的实际存储,但只有 1TB 的奇偶校验!?

我知道我在这里遗漏了一些东西,有人可以帮我吗?另外,对于我的用例,RAID-5 或 RAID-6 哪个更好?在这一点上,容错对我来说是最重要的,因为它将在网络上运行,仅供家庭使用,速度并不是非常关键。

Mat*_*att 30

它只是对每个驱动器中的每个相应位进行异或运算 - 如果您丢失了任何驱动器,您可以重新构建丢失的数据。

对于背景:

A B (A XOR B)
0 0    0
1 1    0
0 1    1
1 0    1
Run Code Online (Sandbox Code Playgroud)

假设D是其他列的异或,那么只要你只丢了一个驱动,你就可以算出你丢了什么。

A B C D
1 0 0 1
0 1 0 1
1 1 0 0
Run Code Online (Sandbox Code Playgroud)

有时条带位会分布在驱动器上,但概念是相同的。

因此,对于 RAID-5,无论有多少个驱动器,您只需要 1 个驱动器的奇偶校验等于或大于要进行 RAID 的阵列中的最小驱动器。

个人使用的 RAID-5 可能是最好的,因为计算复杂度远低于 RAID-6。

RAID-6 使用伽罗华域计算奇偶校验更复杂。这可以对平价计算征税。但是,您可能会丢失更多驱动器,但是如果您在遇到单个故障时立即重建阵列,那么坚持使用 RAID-5 应该没问题。

  • 我相信现代方法是在所有驱动器上对角分布奇偶校验。这具有加速奇偶校验位读取时间的效果,因为多个 IO 请求可以并行发送到不同的驱动器,但不要引用我的话。 (2认同)
  • 是的,它是(最小驱动器大小)*(阵列中的驱动器数量 - 1) (2认同)

cam*_*342 8

这是我认为更好的图表来展示奇偶校验在 RAID4 和 RAID5 中的工作原理

RAID4

Disk1  Disk2  Disk3  Disk4
----------------------------
data1  data1  data1  parity1
data2  data2  data2  parity2
data3  data3  data3  parity3
data4  data4  data4  parity4
Run Code Online (Sandbox Code Playgroud)

RAID5

Disk1   Disk2   Disk3   Disk4
----------------------------
parity1 data1   data1   data1   
data2   parity2 data2   data2  
data3   data3   parity3 data3
data4   data4   data4   parity4
Run Code Online (Sandbox Code Playgroud)


小智 5

我建议阅读这篇关于 Raid 5 和 Raid 6 的维基百科文章

http://en.wikipedia.org/wiki/Standard_RAID_levels#RAID_5_parity_handling

RAID 5 在每个条带中写入一个奇偶校验块,因此对于 4 磁盘阵列的条带 A,它将奇偶校验写入到第 4 个磁盘上,数据位于磁盘 1、2 和 3 上

对于条带 B,奇偶校验块位于磁盘 3 上,数据位于磁盘 1,2 和 4.. 等上。

如果磁盘 4 发生故障,则可以恢复条带 B 的数据,因为您知道磁盘 1 和 2 上的数据,并且对磁盘 3 进行了奇偶校验。

如果条带 B 的奇偶校验为“2”,磁盘 1 的数据为“1”,磁盘 2 的数据为“0”,则磁盘 4 的数据必须等于“1”,因此磁盘上写入的数据为“1”

整个磁盘可以通过这种方式重新创建,RAID 6 通过每个条带有 2 个方块来扩展此功能。

对于 Raid 5 的空间,您只会丢失一个磁盘的奇偶校验空间,因为它只在每个条带上写入奇偶校验块,而使用 Raid 6,您将丢失 2 个磁盘,但也可以丢失两个磁盘,而不是您可以丢失的磁盘突袭5;)

维基百科文章对此有更好的解释!