![使用多个故障驱动器重建 mdadm RAID 5 阵列](https://linux22.com/image/143610/%E4%BD%BF%E7%94%A8%E5%A4%9A%E4%B8%AA%E6%95%85%E9%9A%9C%E9%A9%B1%E5%8A%A8%E5%99%A8%E9%87%8D%E5%BB%BA%20mdadm%20RAID%205%20%E9%98%B5%E5%88%97.png)
我有一个 5 驱动器 Raid5 阵列,但有两个驱动器出现故障。我有新的驱动器需要更换,但是当我尝试启动它时,它会抱怨“/dev/md/0 由 3 个驱动器组装而成 - 不足以启动阵列”
来自原始驱动器之一的超级块数据:
mdadm -E /dev/sdb /dev/sdb: 魔法:a92b4efc 版本:1.2 特征图:0x1 数组 UUID : eece6340:50c5f548:fec6e083:8e175d25 名称:nas2:0(主机 nas2 的本地) 创建时间:2016年6月11日星期六15:08:47 突袭等级:raid5 突袭设备:5 可用开发大小:3906767024 (1862.89 GiB 2000.26 GB) 阵列大小:7813533696(7451.57 GiB 8001.06 GB) 已用开发大小:3906766848 (1862.89 GiB 2000.26 GB) 数据偏移:262144个扇区 超级偏移:8个扇区 未使用空间:之前 = 262056 个扇区,之后 = 176 个扇区 状态:干净 设备 UUID:f99f8f44:bbf30563:35183897:5563d56a 内部位图:来自超级块的 8 个扇区 更新时间 : 2018年8月12日星期日 15:01:12 坏块日志:偏移 72 扇区有 512 个可用条目 校验和:3c38edaa - 正确 活动:364523 设备角色:活动设备 0 数组状态:AA..A('A'==活动,'.'==缺失,'R'==替换)
这是尝试组装的输出:
mdadm:/dev/sdb 被标识为 /dev/md/0、插槽 0 的成员。 mdadm:/dev/sdf 被标识为 /dev/md/0、插槽 4 的成员。 mdadm:/dev/sdc 被标识为 /dev/md/0、插槽 1 的成员。 mdadm:将 /dev/sdc 添加到 /dev/md/0 作为 1 mdadm:/dev/md/0 的插槽 2 没有最新设备 mdadm:/dev/md/0 的插槽 3 没有最新设备 mdadm:将 /dev/sdf 添加到 /dev/md/0 作为 4 mdadm:将 /dev/sdb 添加到 /dev/md/0 作为 0 mdadm:/dev/md/0 由 3 个驱动器组装而成 - 不足以启动阵列。 mdadm:寻找用于进一步组装的设备 mdadm:在配置文件中或自动找不到数组
是否有办法将超级块数据(如 dd)克隆到新驱动器以允许组装阵列?
答案1
如果 RAID-5 阵列有多个驱动器损坏,则无法在不丢失数据的情况下重新组装该阵列。理论上,您可以从其余驱动器读取数据,但中间会丢失数据块。
5 磁盘 RAID-5 的结构是这样的:D 是数据块,P 是奇偶校验块。
12345
DDDDP
DDDPD
DDPDD
DPDDD
PDDDD
如果任意两个驱动器损坏,则每 20 个数据块和 5 个奇偶校验块中都会丢失 8 个数据块和 2 个奇偶校验块。根据奇偶校验的工作方式,如果奇偶校验完好无损(图中的每一行),系统可以恢复单个丢失的数据块。对于两个丢失的数据块,没有独特的方法来重建这些块。因此,剩余的奇偶校验块毫无用处,每 20 个数据块中只剩下 12 个数据块。您丢失了 40% 的数据。
根据mdadm 手册页,块默认为 512 kB,因此您可以找到最大 1.5 MB 的完整数据块。但是文件系统代码不会高兴地看到主要元数据丢失,并且任何大于该元数据的文件很可能会丢失部分,即使您可以找到文件数据所在的正确设备块。
答案2
磁盘阵列5
摘自维基百科文章:
它要求除一个驱动器外的所有驱动器都存在才能运行。当单个驱动器发生故障时,可以根据分布式奇偶校验计算后续读取,从而不会丢失数据。
因此我的结论是,如果这两个驱动器真的坏了,那么现在就不可能组装阵列了,抱歉。