使用多个故障驱动器重建 mdadm RAID 5 阵列

使用多个故障驱动器重建 mdadm RAID 5 阵列

我有一个 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

摘自维基百科文章:

它要求除一个驱动器外的所有驱动器都存在才能运行。当单个驱动器发生故障时,可以根据分布式奇偶校验计算后续读取,从而不会丢失数据。

因此我的结论是,如果这两个驱动器真的坏了,那么现在就不可能组装阵列了,抱歉。

相关内容