raid5出現問題後,raid5+lvm reiserfs分區上的資料恢復

raid5出現問題後,raid5+lvm reiserfs分區上的資料恢復

我有一台有 3 個SATA 硬碟的伺服器。每個分割區都有 2 個分割區:一小部分是 /dev/md0 的一部分,即 raid1 陣列 (/boot),其餘部分是 raid5 陣列 (/dev/md1) 的一部分,這是一個 lvm 實體磁碟區。其內部有 3 個 (IIRC) 邏輯磁碟區。其中之一是 reiserfs 3.6 fs,可容納約 100gigs 資料。

昨天這個伺服器崩潰了。啟動時,SMART 告訴我其中一個驅動器已損壞。他確實發出了非常難聽的聲音。因此,我刪除了故障的驅動器,並嘗試在剩餘的 2 個磁碟上重新啟動系統。哪個失敗了。

我使用 live CD 啟動它並嘗試重新啟動陣列。不幸的是,mdadm 拒絕這樣做,因為它認為剩下的 2 個磁碟之一也出現了故障。

因此,遵循在以下位置找到的建議如何恢復崩潰的 Linux md RAID5 陣列?看起來它可以適用於我的情況,我做了一些可能只是愚蠢的事情:我跑了

mdadm --create /dev/md1 --assume-clean -l5 -n3 -c64 /dev/sd[ab]2 missing

現在,我實際上可以啟動這個陣列,但是lvm工具(vgscan,vgdisplay,pvck)無法在陣列上找到與lvm相關的任何內容,而且我完全無法取得我的資料。我剛剛擦除了所有 lvm 元資料嗎?

我的感覺是實際資料仍然存在,未損壞(除了 lvm 元資料)。有機會取回數據嗎?如何?

更新:

根據 psusi(如下)的建議,我嘗試了以下每種重新建立陣列的方法:

mdadm --create /dev/md1 --assume-clean -l5 -n3 -c64 /dev/sda2 /dev/sdb2 missing
mdadm --create /dev/md1 --assume-clean -l5 -n3 -c64 /dev/sdb2 /dev/sda2 missing
mdadm --create /dev/md1 --assume-clean -l5 -n3 -c64 /dev/sda2 missing /dev/sdb2
mdadm --create /dev/md1 --assume-clean -l5 -n3 -c64 /dev/sdb2 missing /dev/sda2
mdadm --create /dev/md1 --assume-clean -l5 -n3 -c64 missing /dev/sda2 /dev/sdb2
mdadm --create /dev/md1 --assume-clean -l5 -n3 -c64 missing /dev/sdb2 /dev/sda2

mdadm --create /dev/md1 --assume-clean -l5 -n3 -c512 /dev/sda2 /dev/sdb2 missing
mdadm --create /dev/md1 --assume-clean -l5 -n3 -c512 /dev/sdb2 /dev/sda2 missing
mdadm --create /dev/md1 --assume-clean -l5 -n3 -c512 /dev/sda2 missing /dev/sdb2
mdadm --create /dev/md1 --assume-clean -l5 -n3 -c512 /dev/sdb2 missing /dev/sda2
mdadm --create /dev/md1 --assume-clean -l5 -n3 -c512 missing /dev/sda2 /dev/sdb2
mdadm --create /dev/md1 --assume-clean -l5 -n3 -c512 missing /dev/sdb2 /dev/sda2

這基本上是所有可能的命令,包括 -c64 和 -c512。每次測試後,我都會執行 vgscan。沒有人發現任何東西。也許我不應該使用 vgscan 而應該使用其他工具?

更新2:

我嘗試重新連接故障的硬碟。奇蹟,它似乎有點作用。至少,足以檢查它:

root@debian:~# mdadm --examine /dev/sda2
/dev/sda2:
          Magic : a92b4efc
        Version : 0.90.00
           UUID : 1f5462ab:6945560d:019b01a5:914dd464
  Creation Time : Fri Oct 17 12:40:40 2008
     Raid Level : raid5
  Used Dev Size : 160015360 (152.60 GiB 163.86 GB)
     Array Size : 320030720 (305.21 GiB 327.71 GB)
   Raid Devices : 3
  Total Devices : 3
Preferred Minor : 1

    Update Time : Tue Apr 12 08:15:03 2011
          State : active
 Active Devices : 3
Working Devices : 3
 Failed Devices : 0
  Spare Devices : 0
       Checksum : 64d514fb - correct
         Events : 137

         Layout : left-symmetric
     Chunk Size : 64K

      Number   Major   Minor   RaidDevice State
this     0       8        2        0      active sync   /dev/sda2
   0     0       8        2        0      active sync   /dev/sda2
   1     1       8       18        1      active sync   /dev/sdb2
   2     2       8       34        2      active sync   /dev/sdc2

那麼,有沒有辦法將此超級區塊複製到其他兩個設備,以便我可以「正確」啟動陣列?

答案1

我有類似的設置,我可以建議在每個驅動器的小分區上安裝一個完整的 Linux,不是鏡像那些小分區,但讓它們單獨完全可啟動。

您可以sync在安裝時排除一些關鍵檔案(/etc/fstab、grub 設定)。這不僅需要更多的空間,/boot而且在遇到麻煩時可以節省大量時間。

答案2

您可能沒有按照先前的順序組裝驅動器,或者沒有使用與以前相同的區塊大小。您需要弄清楚之前的順序是什麼,並在重新建立陣列時使用相同的順序。換句話說,死掉的可能不是第三個磁盤,而是第一個或第二個,我們的你可能把sda和sdb搞混了。

答案3

作為 @普蘇西 暗示元資料格式是 kye,看起來 — 現在「1.2」是預設值,而不是「0.9」。遺憾的是,這可能會導致資料遺失,因為 1.2 使用 4 KiB 偏移量:

1、1.0、1.1、1.2 預設使用新的 version-1 格式超級區塊。這樣限制較少。它可以輕鬆地在具有不同位元組序的主機之間移動,並且可以設定檢查點並重新啟動恢復操作。不同的子版本將超級區塊儲存在裝置上的不同位置,要么在末尾(對於 1.0),要么在開頭(對於 1.1),要么從開頭開始 4K(對於 1.2)。

一個建議(唉,遲到了):永遠不要急於重新創建一個數組而不嘗試使用-B- build:

   -B, --build
          Build a legacy array without superblocks

UPD.: 結果-B拒絕建置 RAID-5...:-/

相關內容