[Tips] LVMを使ったディスクの復旧手順

前回のエントリーで書いた通り、この連休の休みは三日間ともサーバトラブルの対応で追われました。
で、かなりあきらめ気味だったHDDから一定量のデータの復旧ができたので、その手順をまとめておきます。
参考にしたURLなどは前回エントリーにまとめてあるので、そちらを参照ください。

まず、私が遭遇した状況は以下の通りです。

  • 突然の停電により障害が発生し、サーバが起動せず。メッセージは / パーティションを読めないと言うことによるKernel panic。

  • この後、回復方法を調べていたとき、LVMを使っている事に気づかず、LVM領域にそのままfsck.ext3を実行。LVMディスクの metadata area が破損。

  • LVMのボリュームを調べる vgscan / lvscan のコマンドは、いずれも Incorrect metadata area となり、LVM領域を認識できず。かろうじて、pvscan コマンドのみ、 /dev/sda2 および /dev/sda5 の領域が表示されるが、これらについても、 pvchange などを実行しようとすると、同じエラーが出て実行不能なため、 physical volume 自体が破損しているものと思われる。

  • LVM領域情報のバックアップ lvmbackup の情報などは残しておらず、どんなボリュームをつくって、どこにどのパーティションを当てはめていたのか不明。(パーティションについては、他の技術担当に色々さがしてもらった結果、別の要件で df の結果を貼り付けたメールが見つかったため、後に把握できました)

  • ただし、HDDから異音などはしておらず、物理的には無事な様子。



ここまで読んで意味の通じる方は、中々に絶望的な状況であることがご想像いただけるかと思います…。

で、以下が復旧のために行った手順です。


  1. CD-ROMやDVD-ROMを使ってブートできるLinuxを用意。
    私はKNOPPIXを使いましたが、ネットで調べた限りでは、CentOSを使う人が多いようです。そのほか、Ubuntuなど、とりあえず、CD-ROMやDVD-ROM、USBなど、外部ドライブから直接ブートできる仕組みが用意できるディストリビューションであれば何でもいいと思います。
  2. dd コマンドを使って /dev/sda2 および /dev/sda5 をイメージ的に保存。
    HDDが物理的に無事だったと思われる理由の一つがこれで、ddコマンドを実行した際にエラーが出なかったためです。これが本当に不幸中の幸いでした。

  3. 作成したimg(HDDの全体が保存されているため、150GB近い容量のファイル)に対して、 hexedit を使って、「VolGroup00」などのキーワードを検索。
    LVMはLVM関連のボリュームを操作した際、自動的にバックアップを残すことになっているようで、うまくすれば、この時のバックアップファイルのデータが見つかります。これを元に、ここに書かれているような、metadataのファイルを作成します。元の状態に戻すことが重要(なはず)なので、できるだけ、壊れる前のディスクの状態(UUIDも含む)をそのまま再現する事を目指します。

  4. lvmコマンドを実行。対話形式でlvmが操作できるようになるので、適宜 scan や display のコマンドを使って状態を把握しながら、次の順番で操作をして行きます。

    • /dev/sda2 および /dev/sda5 から破損している physical volume の metadata を削除。 pvremove

    • 新たに physical volume を作成。 pvcreate

    • /dev/sda2 および /dev/sda5 を元に、 volume group を作成。 vgcreate

    • 今作った physical volume および volume group のUUIDを控えて、先ほど作成した設定ファイルの volume group および physical volume のUUIの項目に設定。

    • vgcfgrestore -f <作成した設定ファイル> を実行して、volume group に対して元の logical volume の設定を反映させる



  5. ここまで実行して、Linux で /dev/mapper/vg名-lv名 を mount できるようになりました。しかし、やはり最初にfsckをやってしまったのが原因か、この時点でおよそ半分程度のデータは破損していて入出力不能の状態。



ここまで来れば、後は /dev/mapper/ 以下に対してfsckをかけたり、といった通常のエラーチェックの手段で、復旧できるところまでファイルを復旧する、といった感じです。
ドライブ丸ごとが対象のためデータが150GB近いことや、スピードの遅いUSBドライブしかなかったことなどから1回1回の作業にかなり時間が掛かりここまでたどり着くのに丸二日間掛かりました…。

とりあえず、もう二度とこんな作業やら無くて済むようにするためにも、バックアップが、意図している範囲全体をきちんとカバーして取れているか、こまめに確認するのが重要だな、という教訓でした…


======================気になる情報
米Red HatがCentOS Projectに出資、RHELクローンの「CentOS」がRed Hatの正式プロジェクトに



Paragon Disk Wiper 10 通常版 DL版 [ダウンロード]
ジャストシステム

ユーザレビュー:

amazon.co.jpで買う
Amazonアソシエイト by Paragon Disk Wiper 10 通常版 DL版 [ダウンロード] の詳しい情報を見る / ウェブリブログ商品ポータル

この記事へのコメント

この記事へのトラックバック

  • [メモ] LVMを使ったディスクの復旧方法の参考URLまとめ

    Excerpt: この3連休に入る直前、会社で使っていたメインサーバーマシンが突然死しました。 おまけに、サーバのバックアップを取っているつもりになっていたのが、対象領域が全然少なくて、本来必要なデータが含まれていな.. Weblog: ヤメ記者SEの徒然なるままに… racked: 2014-01-13 00:20
  • [メモ] Mysqlのmysqldumpが無い時の復旧方法

    Excerpt: 引き続き、サーバ復旧ネタです。 Weblog: ヤメ記者SEの徒然なるままに… racked: 2014-01-18 00:21

テーマ別記事