彷徨えるフジワラ

年がら年中さまよってます

ZFS プールのデグレード解消

何気なしに "zpool status" してみたら、ブート用プール(rpool)のミラーリングが片肺状態に。2本の RAID-1 構成で、1本が "can't open" なる状態になっているらしく、DEGRADE しているとの警告が。

初期不良にしては(ほぼ連続稼動で)一月以上経過していて遅過ぎるし、通常の故障にしては四半期も経過していないので早過ぎる気が。

とりあえず、ドライブの物理故障なのか否かを確認しよう、ということで、一旦 shutdown してから、"can't open" な(問題)ドライブのみを接続した状態で再起動をしてみる。

何の問題も無く再起動成功。うーむ、ドライバ or ZFS の問題か?あるいは、ケースを開けた時に気になったのだが、SATA ケーブルのコネクタが緩んでいたのかも?という可能性も。
rpool 用ドライブの接続に使用している SATA ケーブルは、コネクタが 90 度曲がっているタイプなのだが、コネクタの反対側に持ち手(というか、いわゆる「ベロ」)が付いて、T 型になっているタイプ。普通に使う分には便利なのだろうが、ドライブ格納領域が横向きタイプになっている筐体の場合、サイドパネルとの干渉でコネクタが緩みかねない状態になってしまう。っていうか、実際、微妙に緩んでいるような感触があった。

同じ原因で再発しないように、ベロ部分を切除することに。

で、問題ドライブで立ち上げ成功したのは良いけど、どうやら一ヶ月ぐらい前から書き込めていなかったらしく、折角のデスクトップ設定が全然反映されていない。

ここで再び正常ドライブを繋ぎなおして再起動したら:

  • 正常だったドライブ側の内容で統合
  • 最後に正常稼動していた=問題のドライブ側の内容で統合

のどちらで立ち上がるか?と言えば、多分後者だろうなぁ。

問題のドライブの方がターゲット番号が小さい("cXtYdZ" の y 部分ね)ので、多分優先的に使用されるだろうし、そもそも今現在の起動により、正常ドライブ側の rpool 記録と比較して最終更新日時が新しくなっている筈だ。

ということで、目指す手順は:

  1. 正常ドライブのみで再起動
  2. 問題ドライブを一旦 "zpool detach" で rpool から除外
  3. shutdown
  4. 問題ドライブを繋いで再起動
  5. 問題ドライブを "zpool attach" で rpool に再投入

という感じ。

ところが正常ドライブのみでの再起動が上手く行かない。

Bad PBR sig

と表示が出て、ブートできない状態に orz

しょうがないので以下の様な試行錯誤を:

  1. CD-ROM(or ブート可能 USB メモリ)で起動
  2. 暫定マウント位置を作成(今回は "mkdir /tmp/xx")
  3. "zpool import -f -R /tmp/xx rpool" で仮マウント⇒プール自体は機能することを確認
  4. "zpool get bootfs rpool" でブート属性を確認⇒想定どおりの値であることを確認
  5. となると、後は純粋にブートローダの問題⇒"installgrub" で GRUB 設定書き込み
  6. 再起動⇒成功したので、やっぱり GRUB の未書き込みが原因だった模様

この手順で正常ドライブのみでの再起動になんとか成功。

うーむ、正常ドライブは "zpool attach" の際の同期が完了した段階で "installgrub" した筈なのだけど、うっかり忘れていたのだろうなぁ。もしくは、何かの拍子に書き込み情報が壊れた?後で "installgrub" の挙動を確認しておかないといかんなぁ。

後は当初の予定通りに問題ドライブを再投入。今度は同期完了後に "installgrub" を忘れずに実施しなくては(笑)。

結局、"can't open" の原因はわからず仕舞い。ドライブがアクセス不能な状態であったのなら、ログに何も出てないのはちょっとどうよ?という気がしないでもない。とりあえず、定期的に "zpool status -x" を実施するようにしておくか。

ま、障害発生の際にも、ZFS RAID-1 なら比較的簡単に対応できる、ということが確認できたということで良しとしますか。