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


17

いくつかの背景

  • ディスク自体は友人によって「加工」されており、まだ無傷で、損傷を受けておらず、マウント可能/リカバリ可能であると言われています
  • このディスクは、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ファイルタイプディスクをマウントしてデータを回復する簡単な方法はありますか?
  • 何らかの方法でレイドを再構築する可能性がある場合に備えて、現在別のディスクが無料であります
  • 私の主な目標は、ディスクからデータを回復することです。私はすべてのオプションを受け入れています。

更新

一部のコマンドの出力

  • 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
    

問題は、パーティションがext4fsではなくRAIDボリュームを持っていると考えることです。そして、カーネルは正しいです。ただし、RAID 1であったため、たまたまext4fsでした。mount -f ext4 /dev/sdc1 /mountpointトリックを行う必要があります。ファイルシステムを探す代わりにext4をマウントに強制させることは、-fが行うことです
-Bananguin

1
強制マウントではエラーは発生しませんが、マウントポイントは空白です。データがなくなったか、マウントが期待どおりに機能しませんでした。を実行するdfと、新しくマウントされたディスクの使用率が2%であり、予想より大幅に低いことがわかります。
アダム

@ user1129682、mountがext4ではないという場合は、そうではありません...強制しようとしても役に立たないでしょう。
psusi

@psusi:私のために働いた。ジルは、特定の状況下でなぜそれが機能するのかを説明します
バナンイン

@Bananguinじゃないmount -t ext4?-fフラグは「偽の」マウント用です(ubuntu 14.04)。
Quantum7

回答:


11

これは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

アレイの一部である故障したハードドライブに「存在するが、mdアレイではない」ようになっていた...これは他のすべての提案よりもうまく機能した。正常にマウントされました。データのコピー中です。
ゼインS Halsall

このオプションは私にとってはうまくいきました。RAID1の2つのIntel SSD。1つを取り出し、SUSE Linuxを実行しているPCにSATAポートからスレーブ接続しました。最初はとのみ表示さ/dev/sdc/dev/md127ます。次にんでしたmdadm --assemble --scanが生じている/dev/md/Volume0_0p1/dev/md/Volume0_0p2、ディスク上にあった4つのパーティションに対応する上となります。:P2は私が必要なものだったmkdir /p2 が続くmount /dev/md/Volume0_0p2 /p2EXT3と私ができる簡単にアクセスしそれをマウントしてデータをコピーします。また、読み取り/書き込みとしてマウントしました。
-ron

あなたは私の一日を作りました!ありがとう!
グーシャン

時々--scanのモードが存在しないディスクを持つ配列を開始しません、ここでは私の場合、私は自動組み立て配列を停止して再度起動しなければならなかったmdadm --assemble --force /dev/md/1 /dev/sdc1
BrunoJCM

7

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

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

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

madadm -A /dev/sdc1

(痛みが嫌な場合はここでやめてください。)

オフセットでデータにアクセスすることもできます。1.x mdraid形式をサポートしていない非常に古いカーネルで作業する必要がある場合にのみ、これを行うことができます。まず、オフセットを決定します。lineを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デバイスにアクセスできない古いシステムでディスクを長期間使用し続ける場合にのみ、これを行ってください。

¹ またはプラットフォームのエンディアンを使用していますか?よく分かりません。


データは異なるオフセットで開始できます(mdadm -E /dev/sdc1正確にはどこを参照してください)が、4kは正確にメタデータが格納されている場所なので、1.2メタデータの4kで確実に開始することはできません。参照してくださいunix.stackexchange.com/q/57477/22565
ステファンChazelas

@StephaneChazelasおっと、はい、脳オナラ。ありがとう。
ジル 'SO-悪であるのをやめる'

3
mdadm -A /dev/sdc1出力mdadm: device /dev/sdc1 exists but is not an md array.mdadmを使用して、さらに情報がmdadm --misc --examine /dev/sdc1出力されるかどうかを確認するためにもう少し進んでいますmdadm: No md superblock detected on /dev/sdc1.。このディスクのスーパーブロックを書き換えて、RAIDアセンブリで使用可能なディスクとしてマークする方法はありますか?
アダム

@Gilles A mdadm -E /dev/sdcは私に次を返します:/dev/sdc: MBR Magic : aa55 Partition[0] : 1953520002 sectors at 63 (type 83) ただし、/ dev / sdc1の情報はありません
Adam

1
@Adam mdadmがメタデータを見つけられない場合、そこでできることは何もありません。何をすべきかわからないため、強制的に実行することはできません。ファイルシステムを探す必要があり、psusiのアドバイスがどこにも通じない場合、見通しは暗いです。ディスクの最初の数キロバイトの16進ダンプが誰かに刺激を与える可能性があります(機密データを公開する可能性があることに注意してください)。
ジル 'SO-悪であるのをやめる'

5

驚いたことに、私は/単に使用してデータを回復することができていた何よりも

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


これは少し前のことです!しかし、パーティションをマウントせずに何よりも使用できたかどうか覚えていますか?
PhillipOReilly

申し訳ありませんが、これの詳細はもう覚えていません。:/
アダム

3

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

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


スーパーブロックが破損していることを示唆し、代替スーパーブロックでe2fsckを実行しようとするだけでなく、e2fsck /dev/sdc1?offset=2048出力Bad magic number..Superblock invalid...を実行しています(offset = 1985も実行しました)。前進するための代替スーパーブロックを提供する必要があるようです。
アダム

@Adam、いいえ、正しいオフセットを取得する必要があります。 testdisk詳細なスキャンを実行し、パーティションテーブルを修正できるはずです。
psusi

testdisk私にとって完全に新しい領域です。基本的な実行(分析)ショーNo ext2, JFS, Reiser.. marker. Bad relative sector. No partition is bootable.また、以下を提供します。1 P Linux 0 1 1 121600 254 63 1953520002状況を支援するために、どのようにそれを理解できますか?
アダム

@Adam、私は自分で使ったことがありません。スーパーブロックをスキャンして見つけることができるはずです。パーティションではなく、ディスク全体で実行しましたか?
-psusi

フルディスクで分析を実行した後、パーティションは見つかりませんでした。現在、ディープスキャンを実行しています。これで何も起こらない場合、ここからどこに行くべきかわかりません。
アダム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.