Mdadm

如何在 mdadm 設備上設置數據偏移量?

  • May 3, 2013

我正在嘗試從降級的 RAID 陣列中恢復。mdadm --create我一路上愚蠢地使用了某個地方,現在我的一些設備有不正確的超級塊。幸運的是,我保留了舊超級塊的副本:

/dev/sdd1:
         Magic : a92b4efc
       Version : 1.2
   Feature Map : 0x0
    Array UUID : 7318877d:a7538da2:dbdff5e9:613cc676
          Name : vern:2
 Creation Time : Thu Oct 20 21:58:58 2011
    Raid Level : raid5
  Raid Devices : 3

Avail Dev Size : 1953517954 (931.51 GiB 1000.20 GB)
    Array Size : 1953517568 (1863.02 GiB 2000.40 GB)
 Used Dev Size : 1953517568 (931.51 GiB 1000.20 GB)
   Data Offset : 2048 sectors
  Super Offset : 8 sectors
         State : clean
   Device UUID : 3dc62a0d:71ad83cf:f0dea827:6919f67c

   Update Time : Mon Mar  4 19:53:30 2013
      Checksum : a1b473f6 - correct
        Events : 152880

        Layout : left-symmetric
    Chunk Size : 512K

將此與新的超級塊進行比較:

         Magic : a92b4efc
       Version : 1.2
   Feature Map : 0x0
    Array UUID : 53e45e96:bc283e07:77748762:24fade80
          Name : Velma:2  (local to host Velma)
 Creation Time : Fri May  3 17:35:48 2013
    Raid Level : raid5
  Raid Devices : 3

Avail Dev Size : 1953257858 (931.39 GiB 1000.07 GB)
    Array Size : 1953257472 (1862.77 GiB 2000.14 GB)
 Used Dev Size : 1953257472 (931.39 GiB 1000.07 GB)
   Data Offset : 262144 sectors
  Super Offset : 8 sectors
         State : clean
   Device UUID : bae87034:ba42a7ed:c4fa2854:5888d619

   Update Time : Fri May  3 17:35:48 2013
      Checksum : b3c99dd4 - correct
        Events : 0

        Layout : left-symmetric
    Chunk Size : 512K

這裡的主要區別在於數據偏移量。如果我可以手動將數據偏移設置回 2048 個扇區,那麼我就有機會恢復 RAID 卷中的數據。

那麼……我該如何設置這個偏移量?

我在http://comments.gmane.org/gmane.linux.raid/38674的深處找到了答案:事實證明,有一個分支mdadm允許自定義數據偏移。為拿到它,為實現它:

git clone -b data_offset git://neil.brown.name/mdadm
cd mdadm
make

這增加了在每個設備的基礎上設置數據偏移量的能力,方法是在設備 ID 後面加上 : 和偏移量。例如:

./mdadm --create /dev/md2 --level=5 -raid-devices=3 --assume-clean \ 
   /dev/sdb3:89088 /dev/sdd1:1024 /dev/sdc3:131072

我不得不將偏移量除以 2,因為它在 K 而不是扇區中。我認為我可以使用

./mdadm --create /dev/md2 --level=5 -raid-devices=3 --assume-clean \ 
   /dev/sdb3:178176s /dev/sdd1:2048s /dev/sdc3:262144s

相反,但我還沒有驗證這一點。

無論如何,這建構了具有正確大小的數組,並且我已經設法從中恢復了一些數據。結果!

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