Ubuntu

mdadm RAID 陣列在重塑和重新啟動後消失

  • July 14, 2020

我的 mdadm RAID5 陣列剛剛經歷了 5>8 磁碟增長和重塑。這花了幾天時間,並且沒有中斷。當cat /proc/mdstat說它完成時,我重新啟動了系統,現在陣列不再顯示。

我可以看到的一個潛在問題是我在添加新驅動器時使用了整個磁碟(例如/dev/sdanot /dev/sda1)。但是,這些驅動器上有應該跨越整個驅動器的分區。

我努力了:

$ sudo mdadm --assemble --scan
mdadm: No arrays found in config file or automatically

三個新添加的驅動器似乎沒有 md 超級塊:

$ sudo mdadm --examine /dev/sd[kln]
/dev/sdk:
  MBR Magic : aa55
Partition[0] :   4294967295 sectors at            1 (type ee)
/dev/sdl:
  MBR Magic : aa55
Partition[0] :   4294967295 sectors at            1 (type ee)
/dev/sdn:
  MBR Magic : aa55
Partition[0] :   4294967295 sectors at            1 (type ee)

$ sudo mdadm --examine /dev/sd[kln]1
mdadm: No md superblock detected on /dev/sdk1.
mdadm: No md superblock detected on /dev/sdl1.
mdadm: No md superblock detected on /dev/sdn1.

其他五個做並顯示數組的正確統計數據:

$ sudo mdadm --examine /dev/sd[ijmop]1
/dev/sdi1:
         Magic : a92b4efc
       Version : 1.2
   Feature Map : 0x1
    Array UUID : 7399b735:98d9a6fb:2e0f3ee8:7fb9397e
          Name : Freedom-2:127
 Creation Time : Mon Apr  2 18:09:19 2018
    Raid Level : raid5
  Raid Devices : 8

Avail Dev Size : 15627795456 (7451.91 GiB 8001.43 GB)
    Array Size : 54697259008 (52163.37 GiB 56009.99 GB)
 Used Dev Size : 15627788288 (7451.91 GiB 8001.43 GB)
   Data Offset : 254976 sectors
  Super Offset : 8 sectors
  Unused Space : before=254888 sectors, after=7168 sectors
         State : clean
   Device UUID : ca3cd591:665d102b:7ab8921f:f1b55d62

Internal Bitmap : 8 sectors from superblock
   Update Time : Tue Jul 14 11:46:37 2020
 Bad Block Log : 512 entries available at offset 72 sectors
      Checksum : 6a1bca88 - correct
        Events : 401415

        Layout : left-symmetric
    Chunk Size : 512K

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

…等

強制裝配不起作用:

$ sudo mdadm /dev/md1 --assemble --force /dev/sd[ijmop]1 /dev/sd[kln]
mdadm: /dev/sdi1 is busy - skipping
mdadm: /dev/sdj1 is busy - skipping
mdadm: /dev/sdm1 is busy - skipping
mdadm: /dev/sdo1 is busy - skipping
mdadm: /dev/sdp1 is busy - skipping
mdadm: Cannot assemble mbr metadata on /dev/sdk
mdadm: /dev/sdk has no superblock - assembly aborted

我不知道如何進行。

非常感謝您提供的所有幫助。

我可以看到的一個潛在問題是我在添加新驅動器時使用了整個磁碟(例如/dev/sdanot /dev/sda1)。但是,這些驅動器上有應該跨越整個驅動器的分區。

將完整磁碟用於分區表以外的任何東西都是危險的。一旦其他任何東西寫入分區表,您的完整磁碟 RAID / LUKS / LVM / 文件系統元數據就消失了。撇開使用者錯誤不談,有很多工具和環境可以在沒有真正詢問您的情況下編寫分區表。

這正是發生在你身上的事情。您或其他人已經用分區表覆蓋了三個磁碟上的元數據。通常沒有辦法恢復失去的元數據。例如,parted’smklabel gpt會將 mdadm 1.2 元數據(從開始 4K)完全歸零。

因此,您在這裡唯一的希望是重新創建 RAID以從頭開始建構新的元數據。

並且必須以完全相同的方式重新創建它,因此如果您確定使用的是完整磁碟而不是分區,則必須使用完整磁碟重新創建它,並且順序也正確。當您恢復數據時,考慮遷移到分區而不是完整的磁碟設備。


請注意,您的驅動器順序不是按字母順序排列的,您僅顯示mdadm --examine/dev/sdi1陣列中的第四個驅動器(從 0 開始計數,設備角色 3)的輸出。要成功重新創建,請仔細閱讀檢查輸出以推斷正確的設置。您的數據偏移量也很不尋常(因為--grow改變了它)。

有了寫時複製覆蓋,您正在尋找的命令應該是這樣的:

mdadm --create /dev/md100 --assume-clean \
     --level=5 --chunk=512 --data-offset=127488 --layout=left-symmetric \
     --raid-devices=8 /dev/mapper/sd{?,?,?,i,?,?}1 /dev/mapper/sd{k,l,n}

(我不知道你的驅動器順序,所以我放?了正確的驅動器號,另請注意{c,b,a}語法保持順序完整,[cba]而不是。如果有疑問,寫出來而不是使用外殼擴展。)


為確保現有 GPT 分區表不會再次受到干擾,您應該將其刪除wipefs(僅從您的完整磁碟成員中)。這會在磁碟的開頭和結尾刪除 GPT,因此任何尋找 GPT 並在磁碟結尾找到它的軟體都不應感到被迫在磁碟開頭恢復它,在此過程中擦除您的元數據。

# wipefs --no-act --all --types gpt,PMBR /dev/loop0
/dev/loop0: 8 bytes were erased at offset 0x00000200 (gpt): 45 46 49 20 50 41 52 54
/dev/loop0: 8 bytes were erased at offset 0x7ffffe00 (gpt): 45 46 49 20 50 41 52 54
/dev/loop0: 2 bytes were erased at offset 0x000001fe (PMBR): 55 aa

(刪除--no-act以實際執行擦除。)

祝你好運……如果分區表是唯一的問題,你應該有很大的成功機會。如果其他數據也被更改(某些東西創建了分區並對其進行了格式化),您將看到 RAID 本身的數據損壞。


PS:

$ sudo mdadm /dev/md1 --assemble --force /dev/sd[ijmop]1 /dev/sd[kln]
mdadm: /dev/sdi1 is busy - skipping

此消息(忙於跳過)通常表示md設備已組裝(由於增量組裝方法導致陣列不完整)。

在這種情況下,您必須先mdadm --stop進入非活動陣列,然後再嘗試mdadm --assemble再次嘗試。(如果之前實際上是缺少驅動器,則繼續增量組裝)。

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