Raid

從損壞的 RAID1 中恢復文件系統

  • October 26, 2016

TL;DR 如何ext4從損壞的 RAID1 分區中恢復文件系統?

我的情況

我在 Synology DiskStation 上有一個屬於 RAID1 陣列的故障磁碟,另一個失去了。使用ddrescue我已將大部分相關數據複製到新磁碟。分區表仍然存在,但對 RAID 設置至關重要的一些塊已損壞。

# fdisk -l /dev/sdd
Disk /dev/sdd: 3000.6 GB, 3000592982016 bytes
255 heads, 63 sectors/track, 364801 cylinders, total 5860533168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x0003f44a

  Device Boot      Start         End      Blocks   Id  System
/dev/sdd1             256     4980735     2490240   fd  Linux raid autodetect
/dev/sdd2         4980736     9175039     2097152   fd  Linux raid autodetect
/dev/sdd3         9437184  3907024064  1948793440+  fd  Linux raid autodetect

實際數據在第三個分區/dev/sdd3,但mdadm無法組裝數組。

# mdadm --examine /dev/sdd
/dev/sdd:
  MBR Magic : aa55
Partition[0] :      4980480 sectors at          256 (type fd)
Partition[1] :      4194304 sectors at      4980736 (type fd)
Partition[2] :   3897586881 sectors at      9437184 (type fd)


# mdadm --examine /dev/sdd3
mdadm: No md superblock detected on /dev/sdd3.

結果我無法掛載分區。數據就在那裡,並且可以被foremost.

我也嘗試過使用extundelete,但如果沒有適當的 ext 超級塊,它就會失敗。

# extundelete --superblock /dev/sdd3
extundelete: failed to read-only open device "/dev/sdd3": Error code 2133571347

問題

如何從損壞的 RAID1 分區中恢復文件和目錄?

有沒有辦法在md superblock不失去現有數據的情況下重新創建 ?

是否可以忽略 md 部分,將分區視為損壞的ext4分區並以這種方式恢復?

您可以使用循環掛載將磁碟映像中的分區掛載為設備。創建循環設備時,您會給出一個偏移量,使循環設備從分區中的那個位置開始。

這樣,您可以跳過失去的 MD 超級塊,並使循環設備從 ext4 分區或可能的 LVM 的開頭開始。

現在,我們需要知道 MD 超級塊的大小,以便在創建循環設備時提供適當的偏移量。

MD 手冊文章中,可以看到不同 MD 版本的超級塊大小和位置。

0.9 和 1.0 版本在設備末尾有超級塊,因此文件系統在設備開頭啟動,您的 mount 命令應該已經成功。因此,您的 RAID 超級塊必須是其他版本。

1.1 版本在設備開始處有超級塊,1.2 版本在設備開始處有 4k 處的超級塊。

但是,為以後可能的超級塊擴展保留了大量空間。一位消息人士告訴我,文件系統將在設備啟動後啟動一兆字節。在這種情況下,您可以嘗試以下命令:

losetup /dev/loop0 /dev/sdd3 -o 1048576
mount /dev/loop0 /mnt

第一個命令設置一個循環設備,該設備從/dev/sdd3分區開始的 1 兆字節處開始。然後,將此循環設備安裝在/mnt.

偏移量可以是其他東西,不幸的是我找不到偏移量實際可能是什麼的好來源。

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