Mdadm

從失敗且可能部分覆蓋的 mdadm raid1 中恢復數據

  • November 23, 2012

我有一個故障硬碟(我們稱之為sda),其中包含一個 1.5 TB 分區(我們稱之為sda3)。還有另一個磁碟 ( sdb),它也有一個 1.5 TB 的分區 ( sdb1)。兩者都曾經是使用元數據版本 1.2 的 mdadm 1 級 RAID 的一部分。在這個 RAID 分區內(我們稱之為 id md5),有一個 LUKS 加密容器(我們稱之為md5_uncrypted)。這個容器應該包含一個 ext4 分區。

在 2012 年 8 月 10 日左右的某個時間,我以某種方式重新啟動了sdb1失去的 RAID 陣列,甚至沒有註意到這一點。當我昨天(三個月後)想更換 RAID 時,我開始複製數據,sdb1直到我意識到它已經過時了。於是我看了一下舊的sda3。錯誤地,我跑mdadm --create而不是mdadm --assemble重新啟動md5,只有sda3可用。因此,我忽略了所有警告並mdadm --create繼續。cryptsetup不喜歡新 RAID 的內容。mdadm --create如果使用相同的元數據版本,我實際上並沒有認為會損壞數據?嗯,顯然它做到了。

我比較了和的前 20 MB,sda3sdb1註意到它們從大約 8 MB 開始是相等的。所以我將前 8 MB 複製sdb1sda3(我有舊的前 20 MB 的備份sda3)並嘗試組裝md5(只有一個驅動器,sda3)。不幸的是,這給了我一個錯誤:

failed to add /dev/sdb1: Invalid argument

我還嘗試使用sdb1mdadm --created上的 LUKS 標頭sda3,這很cryptsetup高興(當然),但它包含垃圾。

我的問題是:是否有機會從 中恢復至少一些數據sda3?因為我有三個月前的狀態,所以一切都有幫助,即使只是文件列表或帶有修改日期的文件列表。

編輯:

# mdadm --examine /dev/sdb1
        Magic : a92b4efc
      Version : 1.2
  Feature Map : 0x0
   Array UUID : 76a25475:70aa881c:dd30cc93:bbae03b7
         Name : ubuntu:0
Creation Time : Fri Mar 16 20:52:16 2012
   Raid Level : raid1
 Raid Devices : 2

Avail Dev Size : 2930272256 (1397.26 GiB 1500.30 GB)
   Array Size : 1465129848 (1397.26 GiB 1500.29 GB)
Used Dev Size : 2930259696 (1397.26 GiB 1500.29 GB)
  Data Offset : 2048 sectors
 Super Offset : 8 sectors
        State : clean
  Device UUID : b9012482:afa502cf:7794f4fb:2a0da196

  Update Time : Wed Nov 21 20:51:51 2012
     Checksum : 4e54a07 - correct
       Events : 15003


 Device Role : Active device 1
 Array State : .A ('A' == active, '.' == missing)

# mdadm --examine /dev/sda3
         Magic : a92b4efc
       Version : 1.2
   Feature Map : 0x0
    Array UUID : 54ea031e:42367512:b6a8675b:91f2cb6f
          Name : willow:5  (local to host willow)
 Creation Time : Wed Nov 21 18:03:35 2012
    Raid Level : raid1
  Raid Devices : 2

Avail Dev Size : 2929999872 (1397.13 GiB 1500.16 GB)
    Array Size : 1464999744 (1397.13 GiB 1500.16 GB)
 Used Dev Size : 2929999488 (1397.13 GiB 1500.16 GB)
   Data Offset : 262144 sectors
  Super Offset : 8 sectors
         State : active
   Device UUID : 93c70c36:3cc540a5:13817695:bd4f327c

   Update Time : Wed Nov 21 18:03:35 2012
      Checksum : 321ddb3e - correct
        Events : 0


  Device Role : Active device 1
  Array State : .A ('A' == active, '.' == missing)

首先,如果您有備用硬碟,我強烈建議您鏡像 sda3 並使用鏡像。

除非在最初創建數組的版本和目前版本之間更改了未指定選項的預設值,否則使用相同選項的 mdadm –create 不應損壞數據。

您是否將 sdb1 和 sda3 上的超級塊與 mdadm –examine 進行了比較?

除非您添加/更改/刪除了鍵,否則 luks 標頭應該是相同的。您是否嘗試將 luksHeaderBackup 從 sdb1 陣列恢復到 sda3 上創建的陣列?

sdb1 和 sda3 上 luks 標頭 {‘L’,‘U’,‘K’,‘S’,0xba,0xbe} 的不同偏移量可以解釋 luks 卷中的垃圾。

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