web-dev-qa-db-ja.com

RAIDおよびディスク障害からの回復データ(Linux)

いくつかの背景

私の友人は彼のオフィスでa NAS Buffalo-LS-WVLとそれぞれ1TBのディスクを2つ使用していました。2つのディスクはRAID1としてマウントされたようですが、後で読むように、おそらくそうではありませんでした。NASは非常に遅いという問題をいくつか引き起こし、その後突然機能しなくなりました。私は彼のデータを救助するために呼び出されました。両方のディスクはまったく同じです。パーティショニング:1つの物理データと6つの論理データ、および6番目のデータが存在します(0,95TBのうち約80GB)。

ディスク/dev/sddはハードウェアの問題(速度の遅さ、セクターの読み取りエラーなど)を引き起こすようですが、/ dev/sdeは物理的に機能するディスクです。

目標は、NASに含まれていたデータを抽出することです。すべてではないにしても、最も多く抽出されるデータの方が優れています。これらのデータは、私のこの友人の会社にとって不可欠です。

私がすでに試したこと

  1. 1回目の試行:ディスクのみのマウント

    これは最初の試みであり、それが機能することを期待して、各ディスクを取得して単独でマウントしようとしましたが、次のメッセージが表示されました。

    root@ubuntu:~# mount /dev/sdd6 /mnt/n
    
    -or-
    
    root@ubuntu:~# mount /dev/sde6 /mnt/n
    

    両方とも私に同じメッセージを与えました:

    mount: unknown filesystem type 'linux_raid_member'
    
  2. 2回目の試行:ディスクアレイRAID 1を作成し、それらをマウントしてみます

    OK、それらを単独でマウントできない場合は、ディスクのアレイを作成する必要があります。 (最も論理的な)元の構成がRAID 1であり、一度に1つのディスクを使用するとします。

    root@ubuntu:~# mdadm --create --run --level=1 --raid-devices=2 \
                      /dev/md/md-singolo-e6--create-missing /dev/sde6 missing
    

    与える:

    mdadm: /dev/sde6 appears to be part of a raid array:    
    level=raid0    
    devices=2    
    ctime=Mon Sep 26 10:23:48 2011    
    mdadm: Note: this array has metadata at the start and may not be suitable as a boot device.  If you plan to store '/boot' on this device please ensure that    your boot-loader understands md/v1.x metadata, or use    --metadata=0.90    
    mdadm: Defaulting to version 1.2 metadata    
    mdadm: array /dev/md/md-singolo-e6--create-missing started.
    

    したがって、元のレイドは1モードではなく0モードであったようです。ディスクがセクターの問題を引き起こしているので、悪い新しさ。

    とにかく、私は新しく作成されたRAID1アレイをマウントしようとしました(意味がないとわかっていても):

    root@ubuntu:~# mkdir /mnt/md-singolo-e6--create-missing    
    root@ubuntu:~# mount /dev/md/md-singolo-e6--create-missing \
                     /mnt/md-singolo-a6--create-missing/
    

    与えた:

    mount: /dev/md127: can't read superblock
    

    他のディスクについてもまったく同じ結果が得られました。

  3. 3回目の試行:ディスクアレイの作成RAIDそしてそれらをマウントしようとします

    OK、Raid0であると述べられているので、それを実行しましょう。

    root@ubuntu:~# mdadm --create --run --level=0 --raid-devices=2 \
                       /dev/md/md001hw /dev/sdd6 /dev/sde6 
    

    与える:

    mdadm: /dev/sdd6 appears to be part of a raid array:
    level=raid1
    devices=2
    ctime=Mon Oct 14 16:38:33 2013
    mdadm: /dev/sde6 appears to be part of a raid array:
    level=raid1
    devices=2
    ctime=Mon Oct 14 17:01:01 2013
    mdadm: Defaulting to version 1.2 metadata
    mdadm: array /dev/md/md001hw started.
    

    OK、作成したらマウントしようとします:

    root@ubuntu:~# mount /dev/md/md001hw /mnt/n
    
    mount: you must specify the filesystem type
    

    この時点で、-tで指定されたすべてのext2,3,4でエラーが発生しました。

  4. 4回目の試行:ディスクイメージを作成して操作する

    OK、ディスクに問題があるので、ブロック読み取りエラー(エラー)の場​​合に0(同期)で埋められたデータパーティションのコピー(dd)で作業する方がはるかに良いです。したがって、2つの画像を作成しました。

    これは良いディスク用です(4MBのブロック、より高速に):

    root@ubuntu:~# dd bs=4M if=/dev/sde6 of=/media/pietro/4TBexthdd/sde6-bs4M-noerror-sync.img conv=noerror,sync
    

    これは問題のあるディスク用です(最小ブロックサイズ、より安全に)

    root@ubuntu:~# dd if=/dev/sde6 of=/media/pietro/4TBexthdd/sdd6-noerror-sync.img conv=noerror,sync
    

    2つのイメージを取得したら、上記で指定したコマンドを使用して、それらをRAID0として使用しようとしました。何もする必要はありません。答えは、イメージは「ブロックデバイスではなく」、アレイを作成しないというものです。

  5. 5回目の試行:一部のデータをレスキューするためにバイト単位で実行

    OK、適切なマウントが機能していない場合は、バイト単位の読み取りとヘッダーおよびフッター情報を介してデータを抽出します。私は*最前線 *を使用して、このジョブを各単一ディスクで実行しました:ディスク1の場合:

    root@ubuntu:~# foremost -i /dev/sde6 -o /media/pietro/4TBexthdd/foremost_da_sde6/
    

    ファイル拡張子の付いたサブフォルダーを作成しますが、それらの中にはまったくデータがありません。一方、ディスク2(破損したディスク)の場合:

    root@ubuntu:~# foremost -i /dev/sdd6 -o /media/pietro/4TBexthdd/foremost_da_sdd6_disco2/
    

    どちらのサブフォルダ構造も、何よりもまず作成されたものではありません。

    RAID0アレイで最初に試したときと同じ結果:

    root@ubuntu:~# foremost -i /dev/md/md001hw -o /media/pietro/4TBexthdd/foremost_da_raid_hw/
    

    どちらのサブフォルダー構造も作成されていません。

助けが必要なところ/私の質問

  • 何よりもまず質問:データをレスキューする方法は?誰かが私が試したことのないヒントを持っていますか?
  • あなたの誰かが私がしたこととは違う何かを提案できますか?

その他の質問:

  • mdadmは初めてですが、すべて正しく実行しましたか?
  • 元のアレイは2011年9月26日にRAID0モードで効果的に作成されましたか?
  • パーティションイメージを使用して配列を作成できないのはなぜですか?

付録

これは、障害のあるディスク(/dev/sdd)から読み取る場合のdmesgの出力です。

[  958.802966] sd 8:0:0:0: [sdd] Unhandled sense code
[  958.802976] sd 8:0:0:0: [sdd]  
[  958.802980] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[  958.802984] sd 8:0:0:0: [sdd]  
[  958.802987] Sense Key : Medium Error [current] 
[  958.802994] sd 8:0:0:0: [sdd]  
[  958.802999] Add. Sense: Unrecovered read error
[  958.803003] sd 8:0:0:0: [sdd] CDB: 
[  958.803006] Read(10): 28 00 00 d5 c7 e0 00 00 f0 00
[  958.803021] end_request: critical target error, dev sdd, sector 14010336
[  958.803028] quiet_error: 36 callbacks suppressed
[  958.803032] Buffer I/O error on device sdd, logical block 1751292
[  958.803043] Buffer I/O error on device sdd, logical block 1751293
[  958.803048] Buffer I/O error on device sdd, logical block 1751294
[  958.803052] Buffer I/O error on device sdd, logical block 1751295
[  958.803057] Buffer I/O error on device sdd, logical block 1751296
[  958.803061] Buffer I/O error on device sdd, logical block 1751297
[  958.803065] Buffer I/O error on device sdd, logical block 1751298
[  958.803069] Buffer I/O error on device sdd, logical block 1751299
[  958.803074] Buffer I/O error on device sdd, logical block 1751300
[  958.803078] Buffer I/O error on device sdd, logical block 1751301
[  961.621228] sd 8:0:0:0: [sdd] Unhandled sense code
[  961.621236] sd 8:0:0:0: [sdd]  
[  961.621238] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[  961.621241] sd 8:0:0:0: [sdd]  
[  961.621243] Sense Key : Medium Error [current] 
[  961.621248] sd 8:0:0:0: [sdd]  
[  961.621251] Add. Sense: Unrecovered read error
[  961.621254] sd 8:0:0:0: [sdd] CDB: 
[  961.621255] Read(10): 28 00 00 d5 c8 d0 00 00 10 00
[  961.621266] end_request: critical target error, dev sdd, sector 14010576
[  964.791077] sd 8:0:0:0: [sdd] Unhandled sense code
[  964.791084] sd 8:0:0:0: [sdd]  
[  964.791087] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[  964.791090] sd 8:0:0:0: [sdd]  
[  964.791092] Sense Key : Medium Error [current] 
[  964.791096] sd 8:0:0:0: [sdd]  
[  964.791099] Add. Sense: Unrecovered read error
[  964.791102] sd 8:0:0:0: [sdd] CDB: 
[  964.791104] Read(10): 28 00 00 d5 c8 00 00 00 08 00
[  964.791114] end_request: critical target error, dev sdd, sector 14010368
[  964.791119] quiet_error: 22 callbacks suppressed
[  964.791122] Buffer I/O error on device sdd, logical block 1751296
3
PietroAM

私は悪い知らせの担い手になるのは嫌いですが...

Q:mdadmは初めてですが、すべて正しく実行しましたか?

A:いいえ。実際、あなたは可能な限り最も破壊的な方法でほぼすべてを行いました。おそらくデータを読み取ることができる--createを使用する代わりに、--assembleを使用して配列メタデータを破棄しました(少なくとも、ディスクが読み取ることができる範囲で)。そうすることで、重要なメタデータ(特に、ディスクの順序、データオフセット、チャンクサイズ)が失われます。

さらに、--createは、重要なファイルシステム構造の上に配列メタデータを走り書きしている可能性があります。

最後に、ステップ(3)で、mdadmが両方のディスクでRAID1について不平を言っていることがわかります。これは、両方のディスクで(2)を個別に試したことによるものだと思います。 RAID1がディスクの同期を開始しないように心から願っています(たとえば、両方を同じRAID1アレイに追加した場合)。

今何をする

ついにドライブのイメージを作成したようです。少なくとも基本的な--assemble以外のことを試す前に、これfirstを実行する必要があります。とにかく、

  • 不良ドライブのイメージがほとんど/すべてのセクターを見逃した場合は、専門的なデータ復旧が価値があるかどうかを判断します。ファイル(およびファイルシステムメタデータ)はRAID0のドライブ間で分割されるため、回復するには両方が必要です。専門家による復旧では、おそらくドライブを読み取ることができます。

  • いくつかのセクターを除いて、画像にほとんど問題がない場合は、続行します。

画像ファイルのコピーを作成します。画像ファイルのコピーでのみ作業します。これを十分に強調することはできません。これらのコピーを数回破壊する可能性があります。最初からやり直す必要があります。 。また、特に1つが失敗しているため、ディスクを再度イメージ化する必要はありません。

他の質問の1つに答えるには:

Q:パーティションイメージを使用してアレイを作成できないのはなぜですか?

A:画像ファイルの配列をアセンブル(または作成)するには、ループバックデバイスを使用する必要があります。 losetupを使用して、ループバックデバイスに画像を添付します。マンページを読んでください、しかしそれはlosetup --show -f /path/to/COPY-of-imageの線に沿った何かになるでしょう。ここで、ループデバイスでmdadmを使用します(例:/dev/loop0)。

元の配列レイアウトを決定します

アレイの作成に最初に使用されたすべてのmdadmオプションを見つける必要があります(以前に--createでそのメタデータを破棄したため)。次に、2つのループバックデバイスで--createを、これらのオプションを使用して正確に実行します。メタデータのバージョン(-e)、RAIDレベル(-l、0のように見える)、チャンクサイズ(-c)、デバイスの数(-n、2である必要があります)、およびデバイスの正確な順序を把握する必要があります。

これを取得する最も簡単な方法は、2つの新しいディスクを取得し、NASに配置して、NASに新しいアレイを作成させることです。できれば、同じNAS最初に使用されたファームウェアバージョン。IOW、初期セットアップを繰り返します。次にディスクを引き出し、メンバーの1つでmdadm -Eを使用します。これはRAID10アレイの例であるため、わずかに異なります。I '必要なものを強調するために、一連の行を省略しました。

        Version : 1.0                 # -e
     Raid Level : raid10              # -l
   Raid Devices : 4                   # -n

     Chunk Size : 512K                # -c

   Device Role : Active device 0                         # gets you the device order
   Array State : AAAA ('A' == active, '.' == missing)

注:ここでは、ext2/3/4を使用していると仮定します。そうでない場合は、実際に使用されているファイルシステムNASに適切なユーティリティを使用してください。

これらのオプションを使用して(ループバックデバイスで)作成を試みます。 e2fsck -nがそれを認識しているかどうかを確認します。そうでない場合は、アレイを停止し、他の順序でデバイスを使用して再度作成します。 e2fsck -nを再試行してください。

どちらも機能しない場合は、正しいと思われる順序に戻って、バックアップスーパーブロックを試してください。 e2fsckマンページは、使用する番号を示しています。ほぼ確実に4Kのブロックサイズがあります。バックアップスーパーブロックのいずれも機能しない場合は、アレイを停止して、他のディスク順序を試してください。それが機能しない場合は、おそらく間違った--createオプションがあります。画像の新しいコピーからやり直して、いくつかの異なるオプションを試してください。最初に異なるメタデータバージョンを試してみます。

E2fsckを実行したら、ファイルシステムがどれほどひどく損傷しているかを確認します。完全にゴミ箱に入れられている場合は、チャンクサイズが間違っている可能性があります(配列を停止して再作成し、さらに試してください)。

データをコピーします。

E2fsckにファイルシステムの修正を試みさせることをお勧めします。これはファイルシステムを破壊するリスクがありますが、まあ、それがあなたがコピーに取り組んでいる理由です!次に、それをマウントして、データをコピーします。一部のデータが破損している可能性があり、破損が隠されている可能性があることに注意してください(たとえば、ドキュメントのページがNULLに置き換えられている可能性があります)。

NASから元のパラメータを取得できません

その後、あなたは困っています。もう1つのオプションは、最終的に機能するまで推測するか、16進エディターを使用してディスク上のフォーマットについて十分に理解することです。これを支援するユーティリティが1つか2つあるかもしれません。知りません。

または、データ復旧会社を雇います。

7
derobert