web-dev-qa-db-ja.com

単一の機能低下したmdadm raid1ドライブからファイルを回復するにはどうすればよいですか? 「アレイを開始するには不十分です」

単一のraid1ドライブが機能低下/再構築状態の場合、強制的にマウントできますか?ペアリングして再構築するという危険な操作を行う前に、すべてのファイルを復元したいのですが。私の知る限り、ドライブは完全に良好な状態で、完全に無傷です。ペアドライブが部分的に故障しています。

ドライブが再構築状態にない場合、私は何をすべきかを正確に知っています。これが私が試したものです:

# mdadm --verbose --assemble /dev/md8 /dev/sdb1  --force
mdadm: looking for devices for /dev/md8
mdadm: /dev/sdb1 is identified as a member of /dev/md8, slot 1.
mdadm: no uptodate device for slot 0 of /dev/md8
mdadm: added /dev/sdb1 to /dev/md8 as 1
mdadm: /dev/md8 assembled from 0 drives and  1 rebuilding - not enough to start the array.

# cat /proc/mdstat                       
md8 : inactive sdb1[1](S)
      976759808 blocks super 1.2          
md0 : active raid1 sdc1[0]
      976759672 blocks super 1.2 [2/1] [U_]

# mdadm --stop /dev/md8
mdadm: stopped /dev/md8

# mount /dev/sdb1 /mnt/temp2
mount: unknown filesystem type 'linux_raid_member'

# mount -o ro -t ext3 -b 2048 /dev/sdb1 /mnt/temp1
mount: wrong fs type, bad option, bad superblock on /dev/sdb1.

# foremost -i /dev/sdb -o /tmp/foo    (this results in perfectly good files)

この特定のケースでは、foremostコマンドはファイルを回復するため、スーパーブロックのオフセットのみを正しく取得できた場合、ドライブに確実に何かが存在します。

そして、この特定のケースでは、配列の両方の半分をアセンブルするとカーネルがクラッシュするため、(安全性の問題を除いて)とにかくそれは現実的な選択肢ではありません。


更新:mdadmの出力を追加

# mdadm --examine /dev/sdb1
/dev/sdb1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x2
     Array UUID : e00a291e:016bbe47:09526c90:3be48df3
           Name : ubuntu:0
  Creation Time : Wed May 11 12:26:39 2011
     Raid Level : raid1
   Raid Devices : 2

 Avail Dev Size : 1953519616 (931.51 GiB 1000.20 GB)
     Array Size : 1953519344 (931.51 GiB 1000.20 GB)
  Used Dev Size : 1953519344 (931.51 GiB 1000.20 GB)
    Data Offset : 2048 sectors
   Super Offset : 8 sectors
Recovery Offset : 0 sectors
          State : clean
    Device UUID : 41346f44:ccacbbf7:0c17c133:eb7b341f

    Update Time : Sat Apr 13 00:02:08 2013
       Checksum : 483a0a44 - correct
         Events : 402833


   Device Role : Active device 1
   Array State : AA ('A' == active, '.' == missing)
7
Bryce

RAID 1で、データオフセットがわかっている場合(たとえば、2048セクターの場合、通常はmdadm --examine /dev/sdb1によって正確なデータオフセットを見つけることができます)、次のような読み取り専用(安全のため)ループデバイスを作成できます。そう:

# losetup --find --show --read-only --offset $((2048*512)) /dev/sdb1

/dev/loop7

そして、チェックして、印刷されたループデバイスをマウントします。

# fsck.ext3 -n -v /dev/loop7
# mount -o ro /dev/loop7 /mnt/recovery

mountは-o ro,loop,offset=オプションを使用してこれを直接実行できる場合がありますが、ループデバイスを手動で作成して、本当に読み取り専用であることを確認することを好みます。

ファイルシステム自体が破損している場合は、ddを使用してイメージを作成し、そのイメージに対してfsckなどの実験を実行する必要があります。または、Linuxネットワークブロックデバイスを使用して、ディスク上にコピーオンライトレイヤーを配置できます。これにより、実際にディスク自体に何も書き込まずに、そのレイヤーをfsckできます(nbd-server -c/nbd-client/dev/nbdXデバイスを作成します)。デバイスマッパーでも同じことができるかもしれませんが、私は試したことはありません。

8
frostschutz

以下を使用して、アレイ内のRAIDデバイスの数を1に設定できるはずです。

mdadm /dev/md8 --grow --raid-devices=1 --force

その後、/proc/mdstatかどうかを確認しますmd8 アクティブです。データをコピーするまでは、読み取り専用でマウントする必要があります。

0
Anthon