
ブレーカーが落ちて Proxmoxホストが強制電源断しました。
とりあえず起動すれば、元通り動くでしょうと思ったんですが、仮想マシンを配置しているHDDのディスクがマウント出来ない状態に。
「まあ、もっぺん再起動すれば直せば戻るでしょ」と思って再起動したんですが、それでも変わらず、data ストレージが見えない状態に。
もちろん仮想マシンを起動しようとしても下記のようにエラーが出てしまって起動できず。。。
RROR: activating LV 'data/data' failed: Activation of logical volume data/data is prohibited while logical volume data/data_tmeta is active.
体感としては電源コード抜くのと一緒かつ、HDDという事もあり「物理的にディスク壊れた?」「VMのデータ消えた?」みたいな雰囲気で、かなり焦りました。
結論から言うと、今回は LVM-thin(thin pool)のアクティベーション状態が崩れていたっぽくて、thinpool周りを一回落として上げ直したら復旧しました。
設定内容やプログラムの内容は、用途・環境に応じて適切なものが変わります。
各種設定値や環境情報についてよく理解を深め、壊れても良い環境でくまなく検証してください。
なるべく正確に書くように心掛けていますが、本投稿内容を実施される際には自己責任の下でお願い致します。
まずやったこと:LVM-thin の状態確認
今回対象となるのは data VG 配下の thinpool(data/data)です。
復旧作業中に見た lvs はこんな感じで、thinpool とその内部LV(tdata/tmeta)がいるのが分かります。
root@chariot209:/var/log# lvs -a -o vg_name,lv_name,lv_attr,lv_size,devices data
VG LV Attr LSize Devices
data data twi---tz-- <5.43t data_tdata(0)
data [data_tdata] Twi-a----- <5.43t /dev/sda(4065)
data [data_tmeta] ewi-a----- <15.88g /dev/sda(1426632)
data [lvol0_pmspare] ewi------- <15.88g /dev/sda(0)
data vm-100-disk-0 Vwi---tz-- 4.00m
data vm-100-disk-1 Vwi---tz-- 80.00g
data vm-100-disk-2 Vwi---tz-- 80.00g
...
この時点で「VG自体は認識してそう」「thinpool構造も見えてる」ので、物理的に全消失というより 状態が中途半端になって Proxmox から見えなくなってる可能性が高そうだな、と当たりをつけました。
Proxmox側の見え方もチェック
Proxmoxのストレージ状態は pvesm status で見ていました。
復旧後の状態だと、こういう表示になるやつです(ログより)。
root@chariot209:/var/log# pvesm status
Name Type Status Total Used Available %
data lvmthin active 5826834432 2394246268 3432588163 41.09%
local dir active 71017632 6076704 61287708 8.56%
tank2 cifs active 83228628 83185416 43212 99.95%
今回のトラブル時は、ここが「data が active にならない」寄りの挙動で、VMディスクが見えなかった(=VM起動が怪しい)という流れでした。
復旧手順:tmeta/tdata を落として、thinpool を上げ直す
やったこと自体はわりとシンプルで、thinpool の内部LV(tmeta/tdata)を一度停止 → 親の thinpool を明示的に起動、という手順です。
コマンドの実行結果は特に帰ってこないの正常っぽいです。(あと、lvchange -ay data/dataが数分かかったのでドキドキした)
root@chariot209:/var/log# lvchange -an data/data_tmeta
root@chariot209:/var/log# lvchange -an data/data_tdata
root@chariot209:/var/log# lvchange -ay data/data
上記を実行後、lvs を見ると、thinpool 側が twi-aotz-- になっていて、内部LVも ...-ao---- で起動してる雰囲気。
root@chariot209:/var/log# lvs -a -o vg_name,lv_name,lv_attr data
VG LV Attr
data data twi-aotz--
data [data_tdata] Twi-ao----
data [data_tmeta] ewi-ao----
...
結果として pvesm status でも data が active に戻って、VMディスクが見えるようになりました。
(正直この瞬間、声出ました。「戻った……!」って)
学び・反省(そして次の対策)
- LVM-thin の構造(tmeta/tdata/親pool)を知ってると復旧が速い
焦ってても「何を落として何を上げるか」の勘所が持てる。 - UPS、やっぱり必要
自宅サーバだし、当初はそこまで重要な仮想マシンを置いてなかったですが、最近はDNSサーバやバックアップ用の領域としても使っているので、“いつか入れよう” はだいたい事故るなと。。。
強制断が来ても困らない前提で設計した方がいいなと。。。