mdadm RAID 陣列在重塑和重新啟動後消失
我的 mdadm RAID5 陣列剛剛經歷了 5>8 磁碟增長和重塑。這花了幾天時間,並且沒有中斷。當
cat /proc/mdstat
說它完成時,我重新啟動了系統,現在陣列不再顯示。我可以看到的一個潛在問題是我在添加新驅動器時使用了整個磁碟(例如
/dev/sda
not/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/sda
not/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
再次嘗試。(如果之前實際上是缺少驅動器,則繼續增量組裝)。