Mdadm

斷電後缺少 mdadm raid5 陣列重新組裝為 raid0

  • May 13, 2015

我有三個磁碟的 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 再次導致了問題。我懷疑這是因為它已被標記為備用。無論如何我可以強制將其角色更改回活動狀態嗎?在這種情況下,我懷疑組裝陣列甚至可能有效。

你在那裡有一個看起來相當混亂的系統。輸出中的關鍵元素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 Wiki中的過程進行操作,但如果您不介意失去所有內容的可能性,關鍵步驟是mdadm --assemble --force --run /dev/sdc1 /dev/sdd1,後跟一個fsck– 這將起作用,或者完全破壞陣列,並且擴展過程的重點是在不實際損害數據的情況下弄清楚它將是什麼。

或者,由於/dev/sdd1/dev/sde1具有相同的事件計數,您可以通過更改元數據/dev/sde以將其標記為具有“活動設備 0”的設備角色來恢復所有內容,但這是需要專業知識和直接十六進制的事情- 編輯磁碟內容。

引用自:https://unix.stackexchange.com/questions/163672