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
パーティションとして扱い、その方法で回復することは可能でしょうか?
ループマウントを使用して、ディスクイメージ内のパーティションをデバイスとしてマウントできます。ループデバイスを作成するときは、パーティション内のその場所からループデバイスを開始するオフセットを指定します。
このようにして、欠落している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
の下にマウントされます。
ただし、オフセットは別のものである可能性があり、残念ながら、オフセットが実際に何であるかについての適切なソースを見つけることができませんでした。
私はextベースのファイルシステムにそれを使用しようとしたことはありませんが、過去にWindowsシステム上のTestDiskでデータを回復することに多くの成功を収めてきました。
http://www.cgsecurity.org/wiki/TestDisk
彼らのサイトは、ソフトウェアがLinuxのRAID1ディスクで動作できることを具体的に示しています。