執行 LVM2 的 RAID5 救援
我有一個由 6 個 1TB 驅動器組成的 RAID5 陣列。最近由於硬體更改,我需要重新創建 raid 以重寫每個驅動器上的引導載入程序。
現在問題開始了。啟動 Debian 救援系統時,出現了 mdadm –create。到目前為止,情況不佳。
我嘗試重新組裝設備,但原始設置不再可用。當我使用
mdadm --examine --scan
輸出僅顯示 2015 年 4 月 27 日創建的陣列,原始 RAID 是在 2012 年 12 月創建的。
我已經認識到在建構命令期間,驅動器的順序很重要。這讓我置身於探索各種組合的境地。到目前為止,我們有6 個!= 720種插入所有設備的不同可能性。
通過分區上的迭代來自動化它:
mdadm --create /dev/md0 --readonly --level=5 --assume-clean --raid-devices=6 /dev/sdd2 /dev/sda2 /dev/sdb2 /dev/sdc2 /dev/sdf2 /dev/sde2
只有44 個組合解決了超出它的工作 LVM 記錄。我雖然我得到了它。
實際問題現在開始。當我執行時:
pvscan
顯示並啟動該卷,列出所有三個卷:
nas-root nas-swap nas-storage
現在的問題是,在 44 種組合中的每一種組合中,我都無法安裝系統。
它向我顯示 NTFS 簽名無效的錯誤。但是上面應該有一個 ext3/4 文件系統。
是否有可能以正確的順序組裝陣列但條帶尺寸錯誤,這可能會發生?
當我在 2012 年 12 月創建陣列時,我假設使用了預設設置,即512 chunksize,left-symetric raid5。
當我執行多個時,底層數據是否安全
mdadm --create ... --chunk=X /dev/sd* (in different order)
附加說明:
vgscan使用 -d 列印它在降級的 RAID 上執行。也許這可能是問題所在?但是如何解決呢?
附加幫助:
為了支持完整的測試,我在 RAID 上創建了一個只讀覆蓋(因為我沒有空間來映像所有 1 TB 磁碟)。
對於其他使用者,這可能很有用:
#!/bin/bash dev=$1 tmp="/tmp" if [ "no$dev" == "no" ]; then echo "Usage $0 /dev/sdx." echo "Overlays are placed in $tmp" exit 1 fi base=`basename $dev` ovl="$tmp/overlay.$base" if [ -e $ovl ] then rm $ovl fi truncate -s50G $ovl newdev="$base-ovl" size=$(blockdev --getsize "$dev") # you need to have enough loop devices loop=$(losetup -f --show "$ovl") printf '%s\n' "0 $size snapshot $dev $loop P 8" | dmsetup create "$newdev"
您還可以將圖像綁定到環回並將其連接到疊加層。
到目前為止對我有什麼幫助:
組裝陣列時,驅動器順序和塊大小都至關重要。請注意,雖然 Linux 軟體 RAID 最近切換到使用 512K 大小的塊,但幾年前它使用了 64K 大小的塊。
這意味著您之前的數組可能是使用舊的預設 64K 塊創建的。重新嘗試使用 64K 塊組裝陣列並報告結果。