如何在RAID5中重新添加意外移除的硬盘

我在Ubuntu服务器上有一个NAS,使用4个2TB硬盘组成RAID 5。几周前,其中一块硬盘损坏了,但我的RAID仍然工作,尽管是降级状态。幸运的是,它还在保修期内,我收到了一块新的硬盘,今天我安装了它。然而,在尝试将新的硬盘添加到RAID时,它没有进行重建。所以我拔掉了这块硬盘并重新启动了机器。然而,我不小心设置了另外一块硬盘在RAID中失败,并使用mdadm将其移除。
现在显示我的RAID有两块已移除的硬盘。我仍然有第三块硬盘,上面保存着所有的数据,但我不知道如何将其重新添加到RAID阵列中,使其恢复到良好(虽然是降级)状态,以便我可以继续添加第四块硬盘并重建阵列。是否可能让Ubuntu意识到第三块硬盘上有我的数据,并将其重新识别为阵列的一部分?
当我尝试运行:
sudo mdadm --manage /dev/md127 --re-add /dev/sdd1 

它说:
mdadm: --re-add for /dev/sdd1 to dev/md127 is not possible

请问,任何人能给予的帮助将不胜感激。

1我认为我成功地将其恢复到了一个降级状态。我能够使用文档中的mdadm --assemble --force命令,并且我相信它已经使得至少4个驱动器中的3个在工作状态。对于未来遇到此问题的任何人,这是我所使用的命令(假设3个工作驱动器分别是sdb、sdc、sdd,每个驱动器都有单个分区sdb1、sdc1、sdd1):代码: sudo mdadm --assemble --force /dev/md127 /dev/sdb1 /dev/sdc1 /dev/sdd1 (根据您的情况,sudo可能不必要) - Chunky56
2个回答

你可能只需要执行一个 --add 而不是 --re-add。如果你阅读了关于 --re-add 的说明,它会提到如果事件计数接近其他设备,会重新添加该设备。你可以使用 --examine 来查找这个信息。
$ mdadm --examine /dev/sd[a-z]1 | egrep 'Event|/dev/sd'
mdadm: No md superblock detected on /dev/sda1.
/dev/sdb1:
         Events : 992655
/dev/sdd1:
         Events : 992655
/dev/sde1:
         Events : 992655
/dev/sdf1:
         Events : 992655
/dev/sdg1:
         Events : 158
/dev/sdh1:
         Events : 992655
/dev/sdj1:
         Events : 992655

如你所见,我的/dev/sdh1设备已经有一段时间没有在阵列中了,--re-add将不起作用,你需要执行--add来恢复阵列。
你可以使用mdadm --detail /dev/md126来观察发生了什么,最好在做任何操作之前运行此命令,毕竟这是你的数据!
$ mdadm --detail /dev/md126
/dev/md126:
        Version : 1.2
  Creation Time : Tue Jun 24 05:17:47 2014
     Raid Level : raid6
     Array Size : 14650158080 (13971.48 GiB 15001.76 GB)
  Used Dev Size : 2930031616 (2794.30 GiB 3000.35 GB)
   Raid Devices : 7
  Total Devices : 7
    Persistence : Superblock is persistent

    Update Time : Thu Nov  6 05:47:56 2014
          State : clean, degraded, recovering
 Active Devices : 6
Working Devices : 7
 Failed Devices : 0
  Spare Devices : 1

         Layout : left-symmetric
     Chunk Size : 512K

 Rebuild Status : 0% complete

           Name : omegacentauri:0  (local to host omegacentauri)
           UUID : 9fdcacc0:14f7ef3c:a6931b47:bfb8b4a1
         Events : 992656

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       49        1      active sync   /dev/sdd1
       2       8       65        2      active sync   /dev/sde1
       3       8       81        3      active sync   /dev/sdf1
       4       8       97        4      active sync   /dev/sdg1
       5       8      145        5      active sync   /dev/sdj1
       7       8      113        6      spare rebuilding   /dev/sdh1

或者您也可以使用这个:

$ cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4]
md126 : active raid6 sdh1[7] sdg1[4] sdj1[5] sdf1[3] sdd1[1] sde1[2] sdb1[0]
      14650158080 blocks super 1.2 level 6, 512k chunk, algorithm 2 [7/6] [UUUUUU_]
      [>....................]  recovery =  0.9% (26657536/2930031616) finish=1162.5min speed=41624K/sec

md127 : active (auto-read-only) raid1 sdi[1] sdc[0]
      1465007360 blocks super 1.2 [2/2] [UU]

我对你丢失的任何数据不负责。


(最初由OP在评论中发布)

I think I was able to get it back to a degraded state.

I was able to use the mdadm --assemble --force command in the documentation and I believe it got it back to a situation where at least 3 out of the 4 drives are working.

For anyone in the future who comes across this issue, this is the command I used (assuming the 3 working drives are sdb, sdc, sdd, each with single partitions of sdb1, sdc1, sdd1:

mdadm --assemble --force /dev/md127 /dev/sdb1 /dev/sdc1 /dev/sdd1