web-dev-qa-db-ja.com

mdadm + lvm2:すべてのスーパーブロックを誤って破壊しました

すべてのRAID1スーパーブロックを誤ってゴミで上書きしてしまいました。これは、Ubuntuが私をある種のハードディスクリカバリモードにしたときにALT-CTRL-DELを起動したために起こったと思います。私のディスプレイは機能していませんでした、そして私はこの「ブラインド」をしました。

RAIDパーティションを見ると、次のことがわかります。

# mdadm --examine /dev/sdc2
/dev/sdc2:
          Magic : a92b4efc
        Version : 0.90.00
           UUID : 00000000:00000000:00000000:00000000
  Creation Time : Fri Nov  1 18:59:05 2013
     Raid Level : -unknown-
   Raid Devices : 0
  Total Devices : 1
Preferred Minor : 127

    Update Time : Fri Nov  1 18:59:05 2013
          State : active
 Active Devices : 0
Working Devices : 1
 Failed Devices : 0
  Spare Devices : 1
       Checksum : 6b1f0d22 - correct
         Events : 1


      Number   Major   Minor   RaidDevice State
this     0       8       34        0      spare   /dev/sdc2

   0     0       8       34        0      spare   /dev/sdc2

スーパーブロックがガベージによって完全に上書きされていることは明らかです。両方のディスク(sdb2、sdc2)は同じように見え、情報はガベージ、uuidはすべてゼロ、RAIDレベル:不明、RAIDデバイス:0などです。

私が持っている最善の策はこれです:

mdadm --create --assume-clean --metadata=0.90 /dev/md0 --level=1 --raid-devices=2 /dev/sdb2 /dev/sdc2

Mdadm --createを使用してRAIDアレイを再作成できますか?

RAIDスタックには、LVM2物理ボリュームがあります。どういうわけか、個々のディスクまたはバックアップディスクイメージからLVM2データにアクセスできますか?

GRUBはディスクからinitrdとカーネルイメージを見つけることができます。/bootはLVM2の上にあるext4ルートパーティションファイルシステムにあり、個別のパーティションではありません。したがって、データはほとんど無傷であり、スーパーブロックはなくなっていると思います。

編集:mdadmコマンドラインに--assume-cleanを追加します

2
exDM69

0.90スーパーブロック形式の場合は、メンバーを直接使用できるはずです(必要に応じて読み取り専用モードで)。これにより、データにアクセスできるようになり、もう一方のディスクだけで新しい新しいRAID-1を作成し、データをコピーしてから、元のディスクをRAIDに追加できます。

ただし、それが別のもの(1.2メタデータなど)の場合は、マウントする前に、まず実際のパーティションのオフセットを見つける必要があります。たとえば、LVMの場合、次のようなオフセットを取得します。

# grep -a -b --only-matching LEVELONE /dev/disk
1049088:LABELONE

PVの最初のセクターは無料なので、512を引きます。それが実際に0.90または1.0メタデータであった場合、grepは512を表示するはずです。代わりに、これは0の実際のオフセットを意味します。何か大きくなった場合、RAIDは他の形式を使用していました。

この場合、正しいオフセットでループデバイスを作成できます。

# losetup -f --show --read-only --offset $((1049088-512)) /dev/disk
/dev/loop0
# file -s /dev/loop0
LVM2 ...

そして、それがあなたのPVであり、vgscan/vgchange -a yが残りを処理する必要があります。


mdadm --createに関しては、自分が何をしているのかを知っていれば実行できます。あなたはそれに非常に、非常に注意する必要があります。それは最後の手段にすぎません。

オフセットが0の場合は、必ず0.90メタデータを使用してください(それが使用していたものであることが確実な場合)。オフセットが別のものである場合は、mdadm --createが同じオフセットを再度使用することを確認してください。通常、mdadmのデフォルトは時間の経過とともに変化しません。したがって、--data-offsetを使用してコマンドラインで直接指定します。

また、1つのディスクのみで作成してください。もう一方のディスクはmissingのままにします。これは、--assume-cleanよりも優れた方法です。最初に、作成がまったく機能したかどうかを確認し(/dev/md?デバイスのデータは使用可能ですか?)、次に他のディスクを適切に同期させることができます。

3
frostschutz