2026-10-07 · 约 6 分钟
右异步 RAID-5 的条带判断,核心是两条:校验块从第一块盘开始依次向后,数据块始终从低号盘开始并跳过校验盘。五块 Linux 盘可按此规律逐条带排列,再用 XOR 验证每行校验是否为全0;验证通过,单盘缺失才有重建基础。
RAID-5 的容错基础是 XOR:同一横条带内,各数据块异或后得到校验块。素材给出的右异步定义是:右,表示校验块从第一块盘开始,依次向后;异步,表示数据块始终从低号盘开始,不跟随校验块移动。五块盘组成 RAID-5 时,每个条带组有 1 个校验块和 4 个数据块。
按右异步规律,盘号从 0 到 4 可推得:
检查要点是:异步不是让数据跟着校验走,而是每一行都从最低号可用盘开始写数据,遇到校验盘就跳过。左和右的区别,则看条带 1 的校验块相对条带 0 是向大号盘还是小号盘移动。
拿到五块盘后,不要一上来就按右异步重组。素材中的判断方法很直接:先看条带 1 的校验块在哪个盘。若比条带 0 向大号盘移动,是右旋;向小号盘移动,是左旋。
再判断同步还是异步。看条带 1 的第一个数据块是不是落在校验块所在盘加 1 的位置:是,通常为同步;不是,而是从 0 号盘开始,则为异步。右异步的典型表现,就是校验从盘 0 开始往后走,而数据始终从低号盘开始,校验盘被跳过。
这一步不能只看单块盘的分区或文件系统。Linux 系统主要使用 MBR 和 GPT 磁盘分区,文件系统以 Ext3 使用广泛,但这些结构只能帮助判断盘的身份和数据组织,不能替代条带参数验证。右同步与右异步在部分条带上可能看起来接近,必须结合多个条带行一起判断,否则很容易把数据块和校验块的位置互换。
Linux 盘的 RAID 恢复,先要固定盘序。五块盘必须有一致的编号,后续所有条带表和 XOR 验证都依赖这个编号。盘序一旦混乱,右异步的低号盘开始就失去参照,重建结果会交错错位。
其次要确认每块盘上的分区与文件系统结构。素材指出,Linux 系统主要使用 MBR 磁盘分区及 GPT 磁盘分区,文件系统则以 Ext3 使用最为广泛。Linux 的 MBR 分区结构与 Windows 的 MBR 分区结构完全一样,同样包含引导程序、分区表和结束标志;MBR 结束标志为 55AA。GPT 也是 Linux 支持的磁盘分区形式。恢复时熟练掌握这些分区结构和文件系统结构,是判断数据起始位置、校验块边界和文件系统是否可解释的基本功。
在盘体可读的前提下,应以只读方式分析,不要贸然让阵列重新初始化或让系统自动重建。只有盘序、分区结构、文件系统特征和条带参数互相吻合,后续 XOR 验证才有意义。
素材给出的实战校验法是:当假设参数正确时,每条带行的 XOR 验证应算出来全 0,也就是校验块等于同条带数据块的异或结果。这个规则可以直接用于五块盘:在一条带内,把 4 个数据块与 1 个校验块全部 XOR,结果应为 0。
XOR 有三个关键性质:交换律,顺序无关;结合律,分组无关;自逆,异或两次回到本身。因此只要确定哪一块是校验块、哪些块是数据块,就能验证条带大小、盘序和右异步规律是否正确。若某一行 XOR 不为 0,说明该行中至少有一个块的位置判断错了,或者条带边界没有对齐。
验证时不要只抽一行。应按多个连续条带检查,尤其观察校验块是否从盘 0 开始依次向盘 1、盘 2、盘 3、盘 4 移动,数据块是否始终从低号盘开始。连续多行都通过,右异步参数才具备重建条件。若所有候选参数都无法通过,应停下来重新分析盘序、分区或条带边界,而不是强行重建。
救得了的情况:五块盘组成 RAID-5,只有一块盘缺失或离线,其余四块盘可以正常读取;右异步的条带参数、盘序和条带边界能够通过 XOR 验证;数据块没有被覆盖,文件系统关键结构仍有解释空间。此时可按 XOR 规则逐条带重建缺失块,再按 Linux 分区与 Ext3 等文件系统结构导出数据。
救不了或很难救的情况:RAID-5 只能容忍一块盘缺失,若同时缺失两块或更多盘,单靠 XOR 无法补出全部数据;盘体存在严重物理损坏、无法稳定读取,校验块和数据块都取不全,也没有重建基础;数据块被覆盖、清零或校验块本身不可信,XOR 验证无法通过;文件系统元数据严重破坏且没有可用备份,即使条带重组成功,也可能无法还原完整目录和文件。
还要注意:右异步只是条带组织方式之一,不是成功率保证。参数能验证通过,才说明重组逻辑成立;参数验证不通过,就不要用看起来像的盘序去拼数据。
右异步中,校验块从第一块盘开始依次向后。五块盘时,条带 0 校验在盘 0,条带 1 在盘 1,依次到盘 4 后回到盘 0;数据块始终从低号盘开始并跳过校验盘。
先看条带 1 的校验块相对条带 0 是向大号盘移动还是小号盘移动,判断右或左;再看条带 1 的第一个数据块是否在校验块后一盘。是则偏同步,不是而从 0 号盘开始,则偏异步。
它用来确认条带参数是否正确。按假设的盘序和条带边界,把同一行数据块与校验块全部异或,结果应为 0;连续多行都通过,才说明右异步参数和盘序有重建依据。
先固定盘序,再确认 MBR 或 GPT 分区结构以及 Ext3 等文件系统特征。Linux 的 MBR 结构与 Windows 类似,包含分区表和 55AA 结束标志;这些结构方便判断数据边界,但不能替代 XOR 条带验证。
RAID-5 的单一 XOR 校验只能容忍一块盘缺失。两块或更多盘同时缺失时,缺少的数据块无法全部由剩余数据和校验推出,通常不能仅靠 RAID-5 本身恢复。
右异步(right-async)是 Linux mdadm 常见的默认布局之一:校验块按条带右移, 且每个条带组结束后整体偏移一位。它和右同步的差别只在"跨组是否再偏移"。
| 项目 | 取值 / 位置 | 说明 |
|---|---|---|
| 校验块位置 | p = (s + s div N) mod N | s div N 是条带组序号 |
| 与右同步的区别 | 右同步为 p = s mod N | 差一个组偏移,从第二组开始错位 |
| 数据块顺序 | 从校验块下一个位置起,顺时针填充 | 跨过校验块继续 |
| 验证判据 | 重组后 $MFT / 超级块 / 卷头是否自洽 | 开头、中部、尾部三处都要看 |
| 常见来源 | Linux mdadm、部分硬件卡 | 厂商默认值不同,必须以实测为准 |
# 校验位置公式对照
python3 - <<'EOF'
N = 5
for s in range(12):
left_sync = (N-1) - (s % N)
right_sync = s % N
right_async = (s + s // N) % N
print(s, left_sync, right_sync, right_async)
EOF
# 三处取样核对(卷头 / 中部 / 尾部),不要只看开头
python3 - <<'EOF'
d = open('/cases/rebuilt.bin','rb').read()
for off in (0, len(d)//2, len(d)-8192):
print(hex(off), d[off:off+8])
EOF
实践提醒:右同步与右异步在第一个条带组内完全相同,很多人验证开头看到正常就收工, 结果从第二组开始全错。稳妥做法是把每一组都取一个样本核对, 或者直接看文件系统里靠后的元数据(如 NTFS 的 $MFT 尾部记录、ext4 的块组描述符)。
参数判定、镜像方案、固件损坏这类问题,聊清楚不收钱;需要现场检测、书面报价或上门,统一走 项目1 服务页(到店免费检测,出报告后报价,不出结果不收费)。
18620311365
深圳市福田区深南中路2070号电子科技大厦A座35楼D22(华强北地铁站D1口步行320米)