跳到主要内容

存储管理中RAID同步为什么那么慢

通常情况下RAID1、RAID5、RAID10中新增盘或更换盘都会涉及到数据同步过程,且看起来都很慢,通常情况下,1TB 数据同步约需 3 小时,但同步速度可能会因系统性能和负载存在差异,特别与磁盘本身性能强相关。

RAID5刚创建的时候,里边没有数据为什么还要同步?

新创建的RAID进行的“同步”或“初始化”,本质上并不是在“同步数据”(因为新硬盘里还没有用户数据),而是在“建立冗余校验关系”和“校验硬件健康状况”

  1. 为了让校验算法生效,这是最主要、最根本的原因

以 RAID 5 为例,它的数据存储逻辑是: A xor B xor C = 校验P

  • 如果硬盘全是空的,所有字节都是 0。

  • 在二进制逻辑中,0 xor 0 xor 0 = 0。

表面上看,即使不进行同步,似乎数据也是对的。但是:

系统必须实际写入一遍数据,才能在逻辑上确立这个“校验带区”的关系。只有通过全盘写入,才能保证后续任何读取操作都能正确使用这个冗余算法。如果不做这个初始化,当第一笔数据写入时,系统才临时去计算校验,可能会在突发掉电或异常时导致校验区数据错乱。

  1. 抹平硬盘的差异

硬盘虽然是新的,但在出厂时可能存在极微小的差异:

  • 扇区延迟:某个硬盘的某个扇区读写稍微慢一点。

  • 坏块:虽然新盘坏道几率低,但可能存在出厂时的瑕疵(P-list 和 G-list 还未暴露的问题)。

通过全盘写入(同步),RAID 系统会强制访问每一寸扇区。如果某块硬盘真的有物理缺陷,会在初始化阶段就暴露出来,直接报错(Fail)。这总比用了几个月存满重要数据后再崩溃要好得多。

  1. 清除旧的“元数据”

如果这些硬盘之前用在别的设备上(比如旧电脑、别的NAS),硬盘的头部可能残留着旧的文件系统签名或 RAID 元数据。

  • 进行新 RAID 的同步/初始化,会用新的数据覆盖整个磁盘,彻底清除旧痕迹,防止未来系统重启时发生磁盘冲突或识别错误。

同步过程为什么那么慢?

  1. 必须全盘读取和写入

这是最根本的原因。以最常见的RAID 5为例,当你更换一块坏掉的硬盘并开始重建时,RAID卡或系统需要:

  • 读取:读取所有剩余正常硬盘上对应条带的数据和校验码。

  • 计算:通过 XOR(异或)逻辑运算,推算出新硬盘上应该写入的数据。

  • 写入:将推算出的数据写入新硬盘。

这意味着,重建一块4TB的硬盘,系统可能需要读取几十TB的数据(取决于阵列中硬盘的数量和配置),再写入4TB的数据。 这是一个巨大的I/O(输入/输出)吞吐量,受限于所有硬盘的读写速度。

  1. 硬盘的读写速度瓶颈
  • 机械硬盘:如果是传统的 HDD,其寻道时间和持续读写速度是最大的瓶颈。尤其是当阵列处于工作状态时,磁头需要在“服务用户请求”和“服务RAID重建”之间来回移动,这会进一步降低速度。

  • 新硬盘的性能:新加入的硬盘如果是大容量型号,其写入速度通常在 150MB/s - 250MB/s 左右。4TB 的数据单纯写入就需要数小时,再加上读取的时间,自然就更长了。

  1. 校验计算的资源消耗:对于RAID 5每次重建都需要进行XOR校验计算,这会占用大量的CPU资源