存储管理中RAID同步为什么那么慢
通常情况下RAID1、RAID5、RAID10中新增盘或更换盘都会涉及到数据同步过程,且看起来都很慢,通常情况下,1TB 数据同步约需 3 小时,但同步速度可能会因系统性能和负载存在差异,特别与磁盘本身性能强相关。
RAID5刚创建的时候,里边没有数据为什么还要同步?
新创建的RAID进行的“同步”或“初始化”,本质上并不是在“同步数据”(因为新硬盘里还没有用户数据),而是在“建立冗余校验关系”和“校验硬件健康状况”
- 为了让校验算法生效,这是最主要、最根本的原因
以 RAID 5 为例,它的数据存储逻辑是:
A xor B xor C = 校验P
-
如果硬盘全是空的,所有字节都是 0。
-
在二进制逻辑中,
0 xor 0 xor 0 = 0。
表面上看,即使不进行同步,似乎数据也是对的。但是:
系统必须实际写入一遍数据,才能在逻辑上确立这个“校验带区”的关系。只有通过全盘写入,才能保证后续任何读取操作都能正确使用这个冗余算法。如果不做这个初始化,当第一笔数据写入时,系统才临时去计算校验,可能会在突发掉电或异常时导致校验区数据错乱。
- 抹平硬盘的差异
硬盘虽然是新的,但在出厂时可能存在极微小的差异:
-
扇区延迟:某个硬盘的某个扇区读写稍微慢一点。
-
坏块:虽然新盘坏道几率低,但可能存在出厂时的瑕疵(P-list 和 G-list 还未暴露的问题)。
通过全盘写入(同步),RAID 系统会强制访问每一寸扇区。如果某块硬盘真的有物理缺陷,会在初始化阶段就暴露出来,直接报错(Fail)。这总比用了几个月存满重要数据后再崩溃要好得多。
- 清除旧的“元数据”
如果这些硬盘之前用在别的设备上(比如旧电脑、别的NAS),硬盘的头部可能残留着旧的文件系统签名或 RAID 元数据。
- 进行新 RAID 的同步/初始化,会用新的数据覆盖整个磁盘,彻底清除旧痕迹,防止未来系统重启时发生磁盘冲突或识别错误。
同步过程为什么那么慢?
- 必须全盘读取和写入
这是最根本的原因。以最常见的RAID 5为例,当你更换一块坏掉的硬盘并开始重建时,RAID卡或系统需要:
-
读取:读取所有剩余正常硬盘上对应条带的数据和校验码。
-
计算:通过 XOR(异或)逻辑运算,推算出新硬盘上应该写入的数据。
-
写入:将推算出的数据写入新硬盘。
这意味着,重建一块4TB的硬盘,系统可能需要读取几十TB的数据(取决于阵列中硬盘的数量和配置),再写入4TB的数据。 这是一个巨大的I/O(输入/输出)吞吐量,受限于所有硬盘的读写速度。
- 硬盘的读写速度瓶颈
-
机械硬盘:如果是传统的 HDD,其寻道时间和持续读写速度是最大的瓶颈。尤其是当阵列处于工作状态时,磁头需要在“服务用户请求”和“服务RAID重建”之间来回移动,这会进一步降低速度。
-
新硬盘的性能:新加入的硬盘如果是大容量型号,其写入速度通常在 150MB/s - 250MB/s 左右。4TB 的数据单纯写入就需要数小时,再加上读取的时间,自然就更长了。
- 校验计算的资源消耗:对于RAID 5每次重建都需要进行XOR校验计算,这会占用大量的CPU资源