将错误的超级块归零后恢复 RAID5 阵列

将错误的超级块归零后恢复 RAID5 阵列

我在 4 个磁盘上有一个 raid5 阵列,sda1、sdb1、sdd1 和 sde1。sdd1 已被移除,但它是一个健康的驱动器。在尝试重新添加它时,我意外地将 sdb1 的超级块清零。

sdb1 的数据与 sda1 和 sde1 一致,只是缺少它的超级块。

是否有可能恢复该设备上的超级块并重新组装阵列(降级)而不丢失任何数据?

以下是‘mdadm -E /dev/sd{a,d,e}1’的输出。

我是否正确读取了输出,其中 sde1 是设备 0、sdd1 是设备 2、sda1 是设备 3?那么这意味着 sdb1 是设备 1。我是否可以使用以下命令重新创建阵列而不会丢失数据:

$ sudo mdadm --create /dev/md0 --assume-clean --level=5 --raid-devices=4 /dev/sde1 /dev/sdb1 missing /dev/sda1

/dev/sda1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x1
     Array UUID : 81a36846:cf4f0489:219e2546:b1f5b90e
           Name : cowbell:0
  Creation Time : Sun Sep 25 20:24:46 2011
     Raid Level : raid5
   Raid Devices : 4

 Avail Dev Size : 3907025920 (1863.02 GiB 2000.40 GB)
     Array Size : 5860538880 (5589.05 GiB 6001.19 GB)
    Data Offset : 1024 sectors
   Super Offset : 8 sectors
          State : clean
    Device UUID : a0abbc72:f8bb1e2b:e8f81f5c:ed62a979

Internal Bitmap : 8 sectors from superblock
    Update Time : Tue Jul 23 18:05:09 2013
       Checksum : 9f46a56 - correct
         Events : 717820

         Layout : left-symmetric
     Chunk Size : 512K

   Device Role : Active device 3
   Array State : AA.A ('A' == active, '.' == missing)
/dev/sdd1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x1
     Array UUID : 81a36846:cf4f0489:219e2546:b1f5b90e
           Name : cowbell:0
  Creation Time : Sun Sep 25 20:24:46 2011
     Raid Level : raid5
   Raid Devices : 4

 Avail Dev Size : 3907027053 (1863.02 GiB 2000.40 GB)
     Array Size : 5860538880 (5589.05 GiB 6001.19 GB)
  Used Dev Size : 3907025920 (1863.02 GiB 2000.40 GB)
    Data Offset : 2048 sectors
   Super Offset : 8 sectors
          State : active
    Device UUID : 79f5632d:46d5c083:a1c0130c:b83b0654

Internal Bitmap : 8 sectors from superblock
    Update Time : Tue Jul 23 17:42:02 2013
       Checksum : a78d6f5b - correct
         Events : 717392

         Layout : left-symmetric
     Chunk Size : 512K

   Device Role : Active device 2
   Array State : AAAA ('A' == active, '.' == missing)
/dev/sde1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x1
     Array UUID : 81a36846:cf4f0489:219e2546:b1f5b90e
           Name : cowbell:0
  Creation Time : Sun Sep 25 20:24:46 2011
     Raid Level : raid5
   Raid Devices : 4

 Avail Dev Size : 3907027053 (1863.02 GiB 2000.40 GB)
     Array Size : 5860538880 (5589.05 GiB 6001.19 GB)
  Used Dev Size : 3907025920 (1863.02 GiB 2000.40 GB)
    Data Offset : 2048 sectors
   Super Offset : 8 sectors
          State : clean
    Device UUID : 6abd9160:c8ae382c:e6c73d01:37ac057b

Internal Bitmap : 8 sectors from superblock
    Update Time : Tue Jul 23 18:05:09 2013
       Checksum : 9f5d8fa6 - correct
         Events : 717820

         Layout : left-symmetric
     Chunk Size : 512K

   Device Role : Active device 0
   Array State : AA.A ('A' == active, '.' == missing)

答案1

除了备份之外,您可能还需要考虑dd在尝试任何恢复之前制作磁盘的完整副本。

话虽如此,看起来您正走在恢复且不丢失数据的正确道路上。您正确地解释了设备编号。该命令看起来正是您所需要的。

请参阅我的回答这里- 这些东西对数据丢失具有惊人的弹性,并且超级块的破坏不会损害在相同几何形状中重建阵列的能力(参见该答案中的测试 4)。

答案2

我会先尝试验证底层物理磁盘是否已同步,然后再继续重新创建 MD 设备(假设它是干净的)。您可以使用

mdadm -E /dev/sd[abc]1 | grep Event
Events : 0.53120
Events : 0.53108
Events : 0.53120

输出显示 sda 和 sdc 已同步,但 sdc 已迟到。

相关内容