我有几个与 raid5 相关的问题。考虑创建一个 raid5 设备,比如说具有三个磁盘的 md0。
创建后,您开始写入磁盘。每当写入 1gb 大小的文件时,实际写入三个磁盘的数据大小是多少?
我理解在执行写入时会进行异或计算(仅用于恢复)。如果异或计算不正确(例如异或计算算法存在错误),写入还会成功吗?
在读取过程中,异或计算值如何使用?换句话说,异或计算值在读取过程中真的被使用吗?
对于 1GB 的数据,每块数据分布在三个设备中,比如说,第一块数据分布在第一个设备中,第二块数据分布在第二个设备中,然后第三块异或计算后的块(第一块和第二块的块)分布在第三个设备中。我的理解正确吗?
考虑使用 Linux 作为操作系统。谢谢!
答案1
除了 Chopper3 已经写的内容之外:
您所说的“数据片段”实际上在 RAID 术语中称为“条带”或“块”。条带大小通常是在创建卷时的一个配置选项,典型值在 32 - 256 KB 范围内。我相信 md 使用 32KB 作为默认值。
是否使用 XOR 值是读取算法的实现细节,基本上是一种权衡。如果磁盘繁忙,不使用奇偶校验读取可能意味着更长的服务时间。使用奇偶校验读取不可避免地意味着更多的计算,因此负载更高。使用足够复杂的调度程序,它可以考虑当前队列深度,并将读取请求发送到负载最低的磁盘,即使它们恰好包含数据的奇偶校验部分,但如果磁盘负载同样低,则优先考虑非奇偶校验数据。
这真实的专业人士不喜欢 RAID 5 的原因是它对于“随机小写入”类型的 I/O 负载来说简直是无能为力。但您可以自己看一下并阅读一些文档BAARF 站点进行更详细的讨论
答案2
每当写入 1gb 大小的文件时,有多少实际数据大小被写入这三个磁盘?
在这个三向 R5 配置中,每个磁盘 500MB,集群小于 500GB,但总体为 500GB。您对集群如何在所有磁盘上加载的理解是正确的,但请记住,与 R4 不同,奇偶校验数据不是写入单个磁盘,而是与实际数据一起分散在磁盘上。哦,操作系统几乎无关紧要。
XOR 类比比实际发生的情况(顺便说一下,不同控制器之间有所不同)更容易理解,因此也更容易教授,但已经足够接近了。无论如何,不要忘记通常会进行某种形式的读写验证,以确保写入的数据能够再次读取。但确实会发生单比特错误,这是专业人士不喜欢 R5 的众多原因之一。