Linux

執行 LVM2 的 RAID5 救援

  • April 30, 2015

我有一個由 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 chunksizeleft-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 塊組裝陣列並報告結果。

引用自:https://serverfault.com/questions/686384