2009年11月19日木曜日

デグレード後使えなくなっていたZFSプールのインポートに成功

OpenSolaris 2009.06 で、Degrade ステータスとなった ZFS プールをインポートできなくなり
困っていたのですが、先ほど紹介した ZFS プールの rewind 機能を試したら無事マウントできるようになりました。

実はディスクを3台収容できるエンクロージャに物理的な障害が発生し 3本中1本のディスクが認識できなくなりました。冗長性を失ったままずっと動いていたのですが、障害原因の切り分けを行うべく OpenSolaris を停止したところ二度と import できなくなり、2ヶ月ほど放置してあったものです。

root@opensolaris:~# zpool import
  pool: array1
    id: 12644204788362156509
 state: DEGRADED
status: The pool was last accessed by another system.
action: The pool can be imported despite missing or damaged devices.  The
        fault tolerance of the pool may be compromised if imported.
   see: http://www.sun.com/msg/ZFS-8000-EY
config:

        array1        DEGRADED
          raidz1      DEGRADED
            c5t0d0p1  ONLINE
            c5t1d0p1  FAULTED  corrupted data
            c4t1d0p1  ONLINE

2009/11/6付の ONNV では同じ操作をするとこんな感じ。ステータス表記が DEGRADED から FAULTED に変更されるなど、メッセージにいくらかの変更があります。

root@opensolaris:~# zpool import
  pool: array1
    id: 12644204788362156509
 state: FAULTED
status: The pool was last accessed by another system.
action: The pool cannot be imported due to damaged devices or data.
        The pool may be active on another system, but can be imported using
        the '-f' flag.
   see: http://www.sun.com/msg/ZFS-8000-EY
config:

        array1        FAULTED  corrupted data
          raidz1-0    FAULTED  corrupted data
            c5t0d0p1  ONLINE
            c5t1d0p1  FAULTED  corrupted data
            c4t1d0p1  ONLINE


これまでインポートできなかった ZFS プール array1 ですが、無事インポートできるようになりました。 cannot share ... のメッセージが表示されていますが、これは iSCSI ターゲットのパッケージが入っておらずサービスが復旧できないために表示されており、 ZFS プールとしてはきちんとオンラインになっています。

root@opensolaris:~# zpool import -Ff array1
cannot share 'array1/timemachine': iscsitgtd failed request to share
cannot share 'array1/iscsi/elena4': iscsitgtd failed request to share

ちなみに -F オプションなしだと下記のようにエラーが表示されました。
プールを作り直せとメッセージが表示されるようになったのは最近のことです。
おそらくインポートできなくなったプールに関する問い合わせが相次いでいたのでしょうね。:-)

root@opensolaris:~# zpool import -f array1
cannot import 'array1': one or more devices is currently unavailable
        Destroy and re-create the pool from
        a backup source.



ZFSに、直近書き込み内容をロールバックする機能が搭載された?

マイコミジャーナルで先日掲載されていた「ZFSにはfsckが必要?」で ZFS にも fsck 的なツールが必要ではないかというお話が書かれていましたが、今日なんとなく ZFS のソースコードを見ていて目にとまったネタがあるので紹介します。


http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/zpool/zpool_main.c


   1556 /*
   1557  * zpool import [-d dir] [-D]
   1558  *       import [-o mntopts] [-o prop=value] ... [-R root] [-D]
   1559  *              [-d dir | -c cachefile] [-f] -a
   1560  *       import [-o mntopts] [-o prop=value] ... [-R root] [-D]
   1561  *              [-d dir | -c cachefile] [-f] [-n] [-F] <pool | id> [newpool]
   (..snip..)
   1582  *       -f Force import, even if it appears that the pool is active.
   1583  *
   1584  *       -F     Attempt rewind if necessary.
   1585  *

zpool import コマンドのオプションとして、必要であれば rewind するというオプションができたようです。細かくは語られていませんが、おそらく ZFS の領域を正しくマウントできなかった場合に、いくらか直近の書き込みをロールバックしてマウントを試みる機能のように思われます。

現状 zpool import でインポートできない ZFS プールを復旧する手段は特に用意されていないようですが、この rewind オプションに対応した ZFS モジュールとコマンドが一般的に使えるようになれば、RAID やライトキャッシュのせいでインポートできなくなった ZFS プールに対する手段となるのかもしれません。


というわけで OpenSolaris に最新の ONNV を適用する方法について調査中な私でした。


2009年11月10日火曜日

VMware ESXに関連する通信をまとめた図

Firewall diagram – updated to version 3に、VMware ESXを中心に関連する通信が1枚のシートに整理されています。

これは、ファイアウォール ルールの設計に便利ですね。