ツイッターに書ききれないのでこちらに色々書きます!

 

先々週にいきなりLinuxサーバで使っているLVM領域が読み取り専用になり、一切の書き込みができなくなってしまった。

ハード構成としては、

 

・OS:Ubuntu 18.04 LST

・内蔵ディスク(2本):RAID1

・外付けディスク(2本)①:RAID1(データ領域)

・外付けディスク(2本)②:LVM ※今回障害となった

・外付けディスク:通常(ディスク1本)

・外付けディスク:通常(ディスク1本)

 

本来、これだけディスクがあればRAID5なんですが、実は、LVMで使用しているディスクはディスク容量がバラバラなので

RAIDは構成できない(できなくはないだろうけど、サイズが小さいディスクに合わせるので使わない領域がもったいない)

ので、ディスクを少しでも有効活用しようとしてLVMを導入してました。

 

今回はそのLVMの領域である1本(300GB)が障害になりました。

 

<障害の状況>

・先々週の未明からいきなり、LVM領域への書き込みができなくなる(Read Only)

・この時点ではRead Onlyであるがファイルはまだ一部読み込めないものはあるもののアクセスは大丈夫だった。

 

<やったこと>

・読み取り専用になってしまったため、何かしらsambaの設定ファイルがおかしくなったと考え設定みなおし

 →特に問題なし。※他RAID領域は問題なくアクセス、読み取り書き込み可能であるため、これは問題なし。

・/var/log/messagesを確認したが特にディスク及びハードウェアに関するエラーなし

・dfコマンドでも対象のLVM領域はマウントされており、認識されている。

・umount→mount -aを試したところLVMの領域がマウントできなくなった。

 ※この時、外付けHDDの状態はまだ確認していない。。というか、自作ラックに入れており、扉を閉めているので扉を

   あけないとディスクの物理的な状態は確認できない。見ておけばよかったと激しく後悔。

・fsckの要求が発生。

 →LVMの領域で何かしら不整合が発生した可能性もあるので、とりあえず実施する。

   この時、I/Oエラーが沢山出て、エラーを修復した。※いくつかのファイルが消失してると予想。

・lv、vg、pvコマンドを確認。※これも先に見ておくべきだった。

 →下記のように/dev/dm-0 でI/O Error発生しており、PV Nameが「unknown」となっていることがわかった。

 # pvdisplay
  --- Physical volume ---
  PV Name               unknown ★
  VG Name               sdcd
  PV Size               <233.76 GiB / not usable 2.90 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              59841
  Free PE               0
  Allocated PE          59841
  PV UUID               DIMXmm-zl0k-7Jq5-05i0-Xb7j-LFAh-k66ZyW

・物理ディスクの状態を確認すると、対象(障害)ディスクの電源が落ちていることが分かった。

 →常にON状態だが、Power LEDもAccess LEDも消灯状態。

   スイッチOFF/ONを繰り返すが全く無反応。

   電源抜き差ししても現象変わらず。

 

この時点で完全にディスクが故障状態になったと判断。

しかし、前兆のようなものは全くなかった、、いや、この事象が発生する半年くらい前に甲高いディスクのキィーーーンってやばそう

な音がしてた。。。けど、それは継続して発生しなかったし、エラーもなかったので何にもしなかった。

 

ケースをばらしてディスクを別ケースに入れて・・・と思ったが、メーカー品の外付けディスクであり、ネジで固定するタイプのケース

ではなく、中で爪を引っ掛けて固定しているタイプなのでバラスのが非常に面倒、そのうえ内蔵はIDEディスクなので別途IDE用の

ケースを調達しないといけないし、もし、ディスク障害だったらケースが無駄(いまさらIDEディスクのケースがあってもね・・・)になる。

 

ということで保守用に取っておいた500GBのSATAディスクを購入した外付けディスクケースに入れて復旧を開始。

 

下記の手順を実施して復旧を試し見る。

調べると、壊れたディスクのPV UUIDを使ってLVMが取得しているバックアップ(/etc/lvm/backup)から戻せる情報を確認。

※参考にさせて頂いたサイト

  https://support.citrix.com/article/CTX120816

  但し、誤って削除した場合でディスク障害の場合ではない。 

 

①新しいディスクをOSに接続

②fdsikコマンドでパーティション設定

③故障したディスクのPV UUIDを確認

   # vgdisplay --partial --verbose

 

  --- Physical volumes ---
  PV Name              unknown ★
  PV UUID               DIMXmm-zl0k-7Jq5-05i0-Xb7j-LFAh-k66ZyW ←これがPV UUID
  PV Status             allocatable
  Total PE / Free PE    59841 / 0

 
④PV UUIDで復旧を試し見る。
 # pvcreate --restorefile /etc/lvm/backup/sdcd --uuid DIMXmm-zl0k-7Jq5-05i0-Xb7j-LFAh-k66ZyW /dev/sdh1
 
⑤vgfdisplayで詳細確認する。
  →とりあえず戻ったぽい!
 
# vgdisplay --partial --verbose
  PARTIAL MODE. Incomplete logical volumes will be processed.
  --- Volume group ---
  VG Name               sdcd
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  9
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               699.51 GiB
  PE Size               4.00 MiB
  Total PE              179075
  Alloc PE / Size       179075 / 699.51 GiB
  Free  PE / Size       0 / 0
  VG UUID               f6PTtz-sGHf-U5uH-teY8-kCAB-7FKa-CqQxeB

  --- Logical volume ---
  LV Path                /dev/sdcd/LVM_Volume
  LV Name                LVM_Volume
  VG Name                sdcd
  LV UUID                BIeGQu-ku8e-4MQz-Ve8a-L7mP-RkYa-e2sn4J
  LV Write Access        read/write
  LV Creation host, time ,
  LV Status              available
  # open                 1
  LV Size                699.51 GiB
  Current LE             179075
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

  --- Physical volumes ---
  PV Name               /dev/sdh1
  PV UUID               DIMXmm-zl0k-7Jq5-05i0-Xb7j-LFAh-k66ZyW
  PV Status             allocatable
  Total PE / Free PE    59841 / 0

  PV Name               /dev/sda1
  PV UUID               mwInw6-CTz0-jjYa-S2KC-5gDJ-qxw9-0Dnnfr
  PV Status             allocatable
  Total PE / Free PE    119234 / 0
 
⑥手動でLVM領域をマウント
 →マウントできた!
   dfでもLVM領域をしっかりと認識してくれている。
   <抜粋>
   /dev/mapper/sdcd-LVM_Volume  689G   70G  585G  11% /home/LVM_Volum
 
⑦Windows側でネットワークドライブを再割り当て
 →問題なくマウントできた!
 
しかし、ここで問題発生!
いくつかのファイル、、というより格納していたディレクトリが完全消滅。
おそらくいきなり外付けディスクの電源が落ちたため不整合発生、その後fsckをかけたことにより修復のため消えてしまったと推測。
これについてはしょうがないと諦める以外ない。。そもそもReadOnlyになった時点でファイルをすべて退避しておくべきだったと激しく後悔。
 
さらにLinux側でのLVM確認を行うと、下記のエラーが出てくるようになった。
 
# pvdisplay
  /dev/dm-0: read failed after 0 of 4096 at 751094923264: 入力/出力エラーです
  /dev/dm-0: read failed after 0 of 4096 at 751094980608: 入力/出力エラーです
(以下、略)
 
どうやら色々やった影響でメタデータのサイズが許容範囲以上になってしまっているみたい。
これを改善するには、メタデータを再構成するしかない。
やっかいなのはいきなりディスクを取り外したことと、すでに壊れたディスクのPVUUIDを使って復旧させてしまったことで、
簡単には出来なさそう。
※OS側はすでにsambaが該当ディスク領域をつかんでおり、これをkillして、再構成を行えば直るようだが、リスクが高すぎる。
 下手すると残っているデータもすべて飛ぶ。。。
 
ただ、復旧方法については確認できているけど、正直ここまでくると一回LVMを全部解除してもう一度くみ上げた方が確実にいいかも。。
いずれにしても現状はアクセス可能、使用する分には問題ないので生き残ったデータを退避させ、その上でどうするかを再度考える。
 
ということでこの障害はまだまだ続きそう。。
※今回、予備で用意したディスクは500GBでもともと使っていた正常なディスクも500GBだから1TBのディスクとして使いたいから
  いまあるLVM環境を壊して、もう一度作り直した方がよさげって感じかな?