web-dev-qa-db-ja.com

破損したRAID1からファイルシステムを回復する

TL; DR破損したRAID1パーティションからext4ファイルシステムを回復する方法は?

私の状況

Synology DiskStationのRAID1アレイに属していた1つの障害のあるディスクがあり、もう1つは失われています。 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

実際のデータは3番目のパーティション/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パーティションとして扱い、その方法で回復することは可能でしょうか?

2
Jakub

ループマウントを使用して、ディスクイメージ内のパーティションをデバイスとしてマウントできます。ループデバイスを作成するときは、パーティション内のその場所からループデバイスを開始するオフセットを指定します。

このようにして、欠落しているMDスーパーブロックをスキップし、ループデバイスをext4パーティションまたは可能なLVMの開始時に開始させることができます。

ここで、ループデバイスを作成するときに適切なオフセットを提供するために、MDスーパーブロックのサイズを知る必要があります。

MDマニュアル の記事から、さまざまなMDバージョンのスーパーブロックのサイズと場所を確認できます。

0.9および1.0バージョンでは、デバイスの最後にスーパーブロックがあるため、ファイルシステムはデバイスの最初から開始され、mountコマンドは成功しているはずです。したがって、RAIDスーパーブロックは他のバージョンである必要があります。

1.1バージョンではデバイスの起動時にスーパーブロックがあり、1.2バージョンではデバイスの起動から4kにスーパーブロックがあります。

ただし、後でスーパーブロックを拡張できるように、十分なスペースが確保されています。ある情報源によると、ファイルシステムはデバイスの起動後1メガバイトで起動します。この場合、次のコマンドを試してください。

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

最初のコマンドは、/dev/sdd3パーティションの開始から1メガバイトのオフセットで開始するループデバイスをセットアップします。次に、このループデバイスは/mntの下にマウントされます。

ただし、オフセットは別のものである可能性があり、残念ながら、オフセットが実際に何であるかについての適切なソースを見つけることができませんでした。

5
Tero Kilkanen

私はextベースのファイルシステムにそれを使用しようとしたことはありませんが、過去にWindowsシステム上のTestDiskでデータを回復することに多くの成功を収めてきました。

http://www.cgsecurity.org/wiki/TestDisk

彼らのサイトは、ソフトウェアがLinuxのRAID1ディスクで動作できることを具体的に示しています。

3
D34DM347