web-dev-qa-db-ja.com

別のマシンのmdadm raid 1の一部であったディスクにデータをマウント/回復する方法は?

いくつかの背景

  • ディスク自体は友人によって「作業」されており、まだ損傷がなく、損傷しておらず、まだマウント/回復可能であると言われています
  • ディスクはUbuntu 12.04のソフトウェアRAID 1の一部でした
  • オリジナルのRAID 1のもう一方のディスクはフォーマットされ、別の目的で使用されましたが、現在のディスク(問題のディスク)は技術的には存在しないRAIDの一部のままです

私がすでに試したこと

  • 基本的な取り付け

    • Fstabにエントリを追加し、ディスクにext3/ext4のマークを付けて、マウントしようとしました。
    • マウントすると次のエラーが表示されます

      _wrong fs type, bad option, bad superblock on_

    • そしてdmesg

      EXT4-fs (sdc1): VFS: Can't find ext4 filesystem

  • ディスクのファイルシステムタイプを見つけようとしましたが、

    _$Sudo file -s /dev/sdc_
    _/dev/sdc: x86 boot sector; partition 1: ID=0x83, starthead 254, startsector 63, 1953520002 sectors, code offset 0xb8_

助けが必要な場所/私の質問

  • データを損傷することなくディスクをext4に変換する方法はありますか?
  • Linux 83ファイルタイプディスクをマウントしてデータを回復する簡単な方法はありますか?
  • Raidを何らかの方法で再構築する可能性がある場合に備えて、現在別のディスクが空いています
  • 私の主な目標は、ディスクからデータを回復することです。私はすべてのオプションを受け入れます。

更新

一部のコマンドの出力

  • fdisk -l/dev/sdc

    _$fdisk -l /dev/sdc_

    _Disk /dev/sdc: 1000.2 GB, 1000204886016 bytes_
    _255 heads, 63 sectors/track, 121601 cylinders, total 1953525168 sectors_
    _Units = sectors of 1 * 512 = 512 bytes_
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    _Disk identifier: 0x0005ed9c_

    _Device Boot Start End Blocks Id System_
    _/dev/sdc1 63 1953520064 976760001 83 Linux_

  • ファイル-s/dev/sdc1

    _$file -s /dev/sdc1_
    _/dev/sdc1: data_

  • hexdump -C -n 32256/dev/sdc(これが役立つかどうかわからない)

    _$hexdump -C -n 32256 /dev/sdc`
    00000000  fa b8 00 10 8e d0 bc 00  b0 b8 00 00 8e d8 8e c0  |................|
    00000010  fb be 00 7c bf 00 06 b9  00 02 f3 a4 ea 21 06 00  |...|.........!..|
    00000020  00 be be 07 38 04 75 0b  83 c6 10 81 fe fe 07 75  |....8.u........u|
    00000030  f3 eb 16 b4 02 b0 01 bb  00 7c b2 80 8a 74 01 8b  |.........|...t..|
    00000040  4c 02 cd 13 ea 00 7c 00  00 eb fe 00 00 00 00 00  |L.....|.........|
    00000050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    000001b0  00 00 00 00 00 00 00 00  9c ed 05 00 00 00 00 fe  |................|
    000001c0  ff ff 83 fe ff ff 3f 00  00 00 82 59 70 74 00 00  |......?....Ypt..|
    000001d0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
    00000200  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    00007e00
    _
19
Adam

これはUbuntu 14.04でうまく機能しています:

Sudo -i
mdadm --assemble --scan

あなたは得るでしょう:

mdadm: /dev/md/1 has been started with 1 drive (out of 2)

次に、ファイルをマウントして表示します。

cd /mnt && mkdir to-restore-md1 && mount /dev/md1 to-restore-md1
ls -la to-restore-md1
14
vchepurnov

Linux mdraidには いくつかのメタデータ形式 があります。フォーマット0.9と1.0では、メタデータが含まれているデバイスの最後に置かれ、ペイロード(ファイルシステム)はデバイスの最初から始まり、RAIDレイヤーを経由せずに直接アクセスできます。フォーマット1.1と1.2では、メタデータをそれぞれ包含デバイスの中央と先頭に配置するため、ペイロードはオフセットにあります。

Ubuntuインストーラーは1.2メタデータ形式でボリュームを作成するため、データはデバイスの先頭ではなく、メタデータの後に始まります。

そのデータにアクセスする最も簡単な方法は、RAIDデバイスを組み立てることです。 RAID-1ボリュームでは、単一のデバイスで十分です。

madadm -A /dev/sdc1

(あなたが痛みが好きでない限り、ここで止めてください。)

オフセットでデータにアクセスすることもできます。 1.x mdraid形式をサポートしていない非常に古いカーネルで作業しなければならない場合にのみ、これを実行することができます。まず、オフセットmdadm -E /dev/sdc1を決定します。Data Offset : SSS sectorsという行を探します。 mdadmセクターは512バイトです。

sectors=$(mdadm -E /dev/sdc1 | awk -F: '$1 ~ /Data offset/ {print $2}')
bytes=$(($sectors * 512))
losetup -f -o $bytes /dev/sdc1

必死に、1.xフォーマットでは、データオフセットはメタデータの128〜135バイトに格納されます(リトルエンディアン)。 1.2メタデータは、デバイスの開始後4096バイトです。

パーティションテーブルを変更して、さらに起動させることもできます。算術には十分注意してください。 RAIDデバイスにアクセスできない古いシステムで長期間ディスクを使い続けたい場合にのみ、それを行ってください。

¹ またはプラットフォームのエンディアンで?よく分かりません。

驚いたことに、私は foremost を使用するだけでデータを回復できました。

ここで受けた支援は非常に貴重でした。提案されたさまざまな組み合わせと自分のミックスインを試した後、理想的な方法(ディスクを通常どおりにマウントして使用する)は、もはや選択肢のようには思えませんでした。この場合の私の解決策は、データ回復に頼ることです。

5
Adam

Mdadmスーパーブロックをすでに消去しているようです。以前はそこにあり、フォーマットが1.1または1.2だった場合、ファイルシステムはオフセット2048セクターにある可能性が高いです。 e2fsck /dev/sdc1?offset=2048を実行すると、そのオフセットで始まるファイルシステムを強制的に検索できます。見つかった場合は、パーティションテーブルを変更して、ファイルシステムが実際に開始する場所を指定できます。 parted /dev/sdcおよびunit sコマンドを使用して、セクターの単位を使用できます。 printテーブル、開始セクターと終了セクター、次にrmパーティションに注意して、mkpartで再作成し、同じ終了セクターを使用しますが、開始にオフセットを追加しますセクタ。

2048が機能しない場合は、1985も試してみてください。

3
psusi