断电后丢失的 mdadm raid5 阵列重新组装为 raid0

断电后丢失的 mdadm raid5 阵列重新组装为 raid0

我的 RAID5 阵列由三个磁盘组成,没有备用磁盘。断电后,重新启动后,阵列无法恢复。事实上,/dev/md127 设备完全消失,并被错误的 /dev/md0 所取代。这是机器上唯一的阵列。我尝试从三个组件设备重新组装它,但组装不断创建 raid0 阵列而不是 raid5。

三个磁盘的详细信息是

root@bragi ~ # mdadm -E /dev/sdc1
/dev/sdc1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : 002fa352:9968adbd:b0efdfea:c60ce290
           Name : bragi:0  (local to host bragi)
  Creation Time : Sun Oct 30 00:10:47 2011
     Raid Level : raid5
   Raid Devices : 3

 Avail Dev Size : 2930269954 (1397.26 GiB 1500.30 GB)
     Array Size : 2930269184 (2794.52 GiB 3000.60 GB)
  Used Dev Size : 2930269184 (1397.26 GiB 1500.30 GB)
    Data Offset : 2048 sectors
   Super Offset : 8 sectors
   Unused Space : before=1968 sectors, after=770 sectors
          State : clean
    Device UUID : a8a1b48a:ec28a09c:7aec4559:b839365e

    Update Time : Sat Oct 11 09:20:36 2014
       Checksum : 7b1ad793 - correct
         Events : 15084

         Layout : left-symmetric
     Chunk Size : 512K

   Device Role : Active device 2
   Array State : AAA ('A' == active, '.' == missing, 'R' == replacing)

root@bragi ~ # mdadm -E /dev/sdd1
/dev/sdd1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : 002fa352:9968adbd:b0efdfea:c60ce290
           Name : bragi:0  (local to host bragi)
  Creation Time : Sun Oct 30 00:10:47 2011
     Raid Level : raid5
   Raid Devices : 3

 Avail Dev Size : 2930269954 (1397.26 GiB 1500.30 GB)
     Array Size : 2930269184 (2794.52 GiB 3000.60 GB)
  Used Dev Size : 2930269184 (1397.26 GiB 1500.30 GB)
    Data Offset : 2048 sectors
   Super Offset : 8 sectors
   Unused Space : before=1968 sectors, after=770 sectors
          State : clean
    Device UUID : 36c08006:d5442799:b028db7c:4d4d33c5

    Update Time : Wed Oct 15 08:09:37 2014
       Checksum : 7e05979e - correct
         Events : 15196

         Layout : left-symmetric
     Chunk Size : 512K

   Device Role : Active device 1
   Array State : .A. ('A' == active, '.' == missing, 'R' == replacing)

root@bragi ~ # mdadm -E /dev/sde1
/dev/sde1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x8
     Array UUID : 002fa352:9968adbd:b0efdfea:c60ce290
           Name : bragi:0  (local to host bragi)
  Creation Time : Sun Oct 30 00:10:47 2011
     Raid Level : raid5
   Raid Devices : 3

 Avail Dev Size : 2930275057 (1397.26 GiB 1500.30 GB)
     Array Size : 2930269184 (2794.52 GiB 3000.60 GB)
  Used Dev Size : 2930269184 (1397.26 GiB 1500.30 GB)
    Data Offset : 2048 sectors
   Super Offset : 8 sectors
   Unused Space : before=1960 sectors, after=5873 sectors
          State : clean
    Device UUID : b048994d:ffbbd710:8eb365d2:b0868ef0

    Update Time : Wed Oct 15 08:09:37 2014
  Bad Block Log : 512 entries available at offset 72 sectors - bad blocks present.
       Checksum : bdbc6fc4 - correct
         Events : 15196

         Layout : left-symmetric
     Chunk Size : 512K

   Device Role : spare
   Array State : .A. ('A' == active, '.' == missing, 'R' == replacing)

我停止了旧数组,然后按如下方式重新组装(为了清楚起见,插入了空行)

root@bragi ~ # mdadm -S /dev/md0
mdadm: stopped /dev/md0

root@bragi ~ # mdadm -A /dev/md0 /dev/sdd1 /dev/sdc1 /dev/sde1
mdadm: /dev/md0 assembled from 1 drive and 1 spare - not enough to start the array.

root@bragi ~ # cat /proc/mdstat 
Personalities : [raid6] [raid5] [raid4] 
md0 : inactive sdd1[1](S) sde1[3](S) sdc1[2](S)
      4395407482 blocks super 1.2
       
unused devices: <none>
root@bragi ~ # mdadm -D /dev/md0
/dev/md0:
        Version : 1.2
     Raid Level : raid0
  Total Devices : 3
    Persistence : Superblock is persistent

          State : inactive

           Name : bragi:0  (local to host bragi)
           UUID : 002fa352:9968adbd:b0efdfea:c60ce290
         Events : 15084

    Number   Major   Minor   RaidDevice

       -       8       33        -        /dev/sdc1
       -       8       49        -        /dev/sdd1
       -       8       65        -        /dev/sde1

root@bragi ~ # mdadm -Q /dev/md0
/dev/md0: is an md device which is not active

为什么这个组装为 raid0 设备而不是 raid5 设备,正如组件的超级块所指示的那样?是因为 /dev/sde1 被标记为空闲吗?

编辑:我尝试了以下(根据@wurtel的建议),结果如下

# mdadm --create -o --assume-clean --level=5 --layout=ls --chunk=512 --raid-devices=3 /dev/md0 missing /dev/sdd1 /dev/sde1
mdadm: /dev/sdd1 appears to contain an ext2fs file system
       size=1465135936K  mtime=Sun Oct 23 13:06:11 2011
mdadm: /dev/sdd1 appears to be part of a raid array:
       level=raid5 devices=3 ctime=Sun Oct 30 00:10:47 2011
mdadm: /dev/sde1 appears to be part of a raid array:
       level=raid5 devices=3 ctime=Sun Oct 30 00:10:47 2011
mdadm: partition table exists on /dev/sde1 but will be lost or
       meaningless after creating array
Continue creating array? no
mdadm: create aborted.
#

所以看起来 /dev/sde1 再次导致了问题。我怀疑这是因为它已被标记为备用。无论如何,我可以强制将其角色更改回活动状态吗?在这种情况下,我怀疑组装阵列可能会起作用。

答案1

你有一个看起来相当混乱的系统。输出中的关键要素mdadm --examine

/dev/sdc1:
    Update Time : Sat Oct 11 09:20:36 2014
         Events : 15084

   Device Role : Active device 2

/dev/sdd1:
    Update Time : Wed Oct 15 08:09:37 2014
         Events : 15196

   Device Role : Active device 1

/dev/sde1:
    Update Time : Wed Oct 15 08:09:37 2014
  Bad Block Log : 512 entries available at offset 72 sectors - bad blocks present.
         Events : 15196

   Device Role : spare

您无法重新组装该阵列,因为该阵列的/dev/sdc1事件计数比其他两个阵列要低(其中的数据已过期),而/dev/sde1被标记为备用阵列(其上的数据与阵列的状态无关)大批)。这仅提供一个包含数据的驱动器,而三磁盘 RAID 5 至少需要两个驱动器才能开始运行。我不知道你是怎么到这里的,因为这看起来不像典型的两个驱动器故障。

由于事件很重要/dev/sdc1/dev/sdd1差异不大,因此您可以通过强制mdadm从这两个卷重新组装阵列来恢复大部分或全部数据。您可能需要遵循以下步骤Linux RAID 维基,但如果您不介意丢失所有内容的可能性,关键步骤是mdadm --assemble --force --run /dev/sdc1 /dev/sdd1,然后是fsck-- 这要么起作用,要么完全破坏数组,扩展过程的重点是弄清楚它将是哪个而不会真正损害数据。

或者,由于/dev/sdd1/dev/sde1具有相同的事件计数,您可能能够通过更改元数据以将/dev/sde其标记为具有“活动设备 0”的设备角色来恢复所有内容,但这是需要专业知识和直接对磁盘内容进行十六进制编辑的事情。

答案2

如果 mdadm RAID5 中缺少设备,我会使用旧设置再次“创建”RAID 设备并将其missing作为丢失的设备,例如,在您的情况下,它应该是:

mdadm --create --level=5 --layout=ls --chunk=512 --raid-devices=3 /dev/md0 missing /dev/sdd1 /dev/sdc1

注意:我假设“设备角色”是基于 0 的,我习惯于较旧的 mdadm -E 输出格式。即第一个设备丢失了。如果它是从 1 开始的,那么显然第三个设备丢失了,因此将其放在missing设备列表的末尾而不是开头。

相关内容