LVMのmirrorが壊れた時の手動修復
LVMのmirrorで運用していたパーティション(/dev/sda, /dev/sdbとする)があった。ある日、sdaが壊れたので物理的に取り外し、sdbのみでマウントしようとした。普通なら、lvchangeでreduceして片肺運転できるところだが、なぜか/dev/sdbのみでマウントできなくなってしまった。lvchange ay しても、パーティションがアクティブにならない。syslogをみると、mirrorパーティションがbadである旨のエラーが出てくる。
LVMのmirrorはkernelのデバイスマッパ(dm)のraidドライバを使っているので、LVMより低レベルなコマンドであるdmsetupを使って手動でパーティションの修復を試みる。
まずlvchange ay vvvを実行して、lvchangeのログの中から、生きているsdbのlvm用パーティションのセクタ情報を得る. lvmのmirrorは、内部的にはimageとmetaと呼ばれる2種類のlinearパーティションを2台の物理デバイスに分散させ、2×2の4パーティションから構成される。具体的には、lvchangeコマンドは、内部的にdmsetupコマンドを実行して、2種類のlinearデバイスを2台分、合計4デバイスを作成してから、それら4デバイスを使った1つのraidデバイスを作成する(これがlvmのパーティションとして見える). vvvでログをみたところ 案の定 sdbの2種類のlinearデバイスは作成できていたのだが、sdaのほうが作成できず、結果その後のdmsetup create --table でraidデバイスを作成できずにコケていた。
そこでlvchangeに代わって自分で手動でraidデバイスを作成してあげることにする。まず、sdbの2種類のlinearデバイスを手動で作成する。
% dmsetup create xxx-image --table '0 (セクタ) linear /dev/sdb1 (セクタ)'
% dmsetup create xxx-meta --table '0 (セクタ) linear /dev/sdb1 (セクタ)'
(セクタ)の部分はlvchange ay vvvのログで調べられる。
ここで、本来であれば、/dev/sdaのほうでもlinearを2種類マウントしてあげて、合計4つのデバイスからraidデバイスが作られるべきなのだけど、/dev/sdaのほうがないので、/dev/sdb側の2種類のみをつかってraidデバイスを作成する。
dmsetup create xxx-raid --table '0 (セクタ) raid raid1 3 0 region_size 1024 1 /dev/mapper/xxx-meta /dev/mapper/xx-image'
この状態でlvhange ayでアクティベーションに成功し、無事lvmパーティションを片肺でマウントできた。やれやれだぜ。
この記事が気に入ったらサポートをしてみませんか?