Skip to main content

Fujitsu

Japan

まっちーの仮想化講座
第22回:ZFSなら障害発生時もオンラインで復旧

2014年8月5日


 

みなさん、Oracle Solaris 11の標準ファイルシステムが何か覚えていますか?
そうです。Oracle Solaris ZFS(以降、ZFSと記載します)ですね。
これまでの連載でZFSの素晴らしい機能をいくつかご紹介してきましたが、今回は障害発生時の復旧方法をご紹介したいと思います。

ZFSはストレージプールにディスクを追加して拡張したり、ファイルシステムのサイズを変更したりすることがオンライン(OS稼働状態)でできます。これと同様にストレージプールを構成する物理ディスクが壊れた場合に、オンラインで物理ディスクを交換することができます。

今回は、実際に使用しているサーバで実施した復旧方法をご紹介します。実行結果はOracle Solaris 10での結果ですが、Oracle Solaris 11でも同様の方法で復旧することができます。

状態の確認

まずはストレージプールの状態を確認します。vdiskpoolがDEGRADED状態になっていて、異常が発生していることがわかります。

# zpool list
NAME        SIZE  ALLOC   FREE    CAP  HEALTH  ALTROOT
rpool        68G  51.6G  16.4G    75%  ONLINE  -
vdiskpool  1.86T   373G  1.49T    19%  DEGRADED  -

vdiskpoolの詳細な状態を確認します。プールを構成するディスクのうち、「c2t12d0」に異常が発生していることがわかります。

# zpool status vdiskpool
  プール: vdiskpool
 状態: DEGRADED
状態: 1 つまたは複数のデバイスを開くことができませんでした。
        十分な複製が存在するため、プールは縮退状態で動作を継続できます。
アクション: 見つからなかったデバイスを接続し、'zpool online' を使用してオンラインにしてください。
次のサイトを参照してください: http://www.sun.com/msg/ZFS-8000-2Q
 スクラブ: 何も要求されませんでした
構成:

        NAME                    STATE     READ WRITE CKSUM
        vdiskpool               DEGRADED     0     0     0
          raidz1-0              DEGRADED     0     0     0
            c2t8d0              ONLINE       0     0     0
            c2t9d0              ONLINE       0     0     0
            c2t10d0             ONLINE       0     0     0
            c2t11d0             ONLINE       0     0     0
            c2t12d0             UNAVAIL      0     0     0  オープンに失敗しました。
            c2t13d0             ONLINE       0     0     0
            c2t14d0             ONLINE       0     0     0
          raidz1-1              ONLINE       0     0     0
            c3t20d0             ONLINE       0     0     0
            c3t21d0             ONLINE       0     0     0
            c3t22d0             ONLINE       0     0     0
            c3t23d0             ONLINE       0     0     0
            c3t24d0             ONLINE       0     0     0
            c3t25d0             ONLINE       0     0     0
            c3t26d0             ONLINE       0     0     0
       
エラー: 既知のデータエラーはありません

対象となるvdiskpoolは、2つのRAID Zグループをストライピングした構成になっています。RAID ZはRAID5に似たRAID構成で、パリティによりデータの冗長性を保ちます。

今回はディスク1本のみの障害ですので、ストレージプールはDEGRADED状態になっていますが、データそのものは失われていません。
しかし、このままの状態では冗長性がありませんので、壊れたディスクを交換する必要があります。

ストレージプールの復旧

今回は空きスロットにディスクを追加して、そのディスクを壊れたディスクと入れ替えます。
ディスクを追加後、devfsadmコマンドでデバイスを再構成し、ディスクを認識させます。

# devfsadm

ここでは、追加したディスクは「c2t15d0」と認識されています。追加したディスクとUNAVAILのディスク(c2t12d0)をzpool replaceコマンドで入れ替えます。

# zpool replace vdiskpool c2t12d0 c2t15d0

プロンプトはすぐに返ってきますが、追加したディスクに再同期処理が必要になります。なお、再同期中もストレージプールは使用可能です。再同期にかかる時間は環境によって異なりますが、今回の場合は4時間ほどかかりました。
再同期の進捗やかかる時間は、zpool statusコマンドで確認できます。
ちなみに、ZFSでは再同期処理をresilverと呼びます。ZFSの場合、ディスク全体ではなく使用中の領域のみ再同期しますので、比較的速く再同期処理が終わります。

# zpool status vdiskpool
  プール: vdiskpool
 状態: DEGRADED
状態: 1 つまたは複数のデバイスの再同期化が進行中です。
        プールはおそらく縮退状態で動作を継続します。
アクション: 再同期化が完了するまでお待ちください。
 スクラブ: resilver が 2h36m で進行中、55.94% 完了、2h3m 開始待ち
構成:

        NAME                    STATE     READ WRITE CKSUM
        vdiskpool               DEGRADED     0     0     0
          raidz1-0              DEGRADED     0     0     0
            c2t8d0              ONLINE       0     0     0
            c2t9d0              ONLINE       0     0     0
            c2t10d0             ONLINE       0     0     0
            c2t11d0             ONLINE       0     0     0
            replacing-4         DEGRADED     0     0     0
              c2t12d0           UNAVAIL      0     0     0  オープンに失敗しました。
              c2t15d0           ONLINE       0     0     0  13.1G resilvered

            c2t13d0             ONLINE       0     0     0
            c2t14d0             ONLINE       0     0     0
          raidz1-1              ONLINE       0     0     0
            c3t20d0             ONLINE       0     0     0
・・・省略・・・

エラー: 既知のデータエラーはありません

再同期完了後、状態がDEGRADEDから「ONLINE」に変わっていることを確認します。

# zpool status vdiskpool
  プール: vdiskpool
 状態: ONLINE
 スクラブ: Wed Jul 23 13:15:31 2014
 上で 0 エラーが発生した 4h50m のあとの resilver completed構成:

        NAME                    STATE     READ WRITE CKSUM
        vdiskpool               ONLINE       0     0     0
          raidz1-0              ONLINE       0     0     0
            c2t8d0              ONLINE       0     0     0
            c2t9d0              ONLINE       0     0     0
            c2t10d0             ONLINE       0     0     0
            c2t11d0             ONLINE       0     0     0
            c2t15d0             ONLINE       0     0     0  24.3G resilvered
            c2t13d0             ONLINE       0     0     0
            c2t14d0             ONLINE       0     0     0
          raidz1-1              ONLINE       0     0     0
            c3t20d0             ONLINE       0     0     0
・・・省略・・・

エラー: 既知のデータエラーはありません
# zpool status -x vdiskpool
プール 'vdiskpool' は正常です

データの整合性確認

最後に念のためデータの整合性を確認します。ZFSではスクラブという機能を使用して整合性の確認を行います。
スクラブは、ストレージプール内の全てのデータが読み取り可能であることを確認します。

# zpool scrub vdiskpool

スクラブもコマンドを実行するとプロンプトがすぐに返ってきますが、スクラブの処理はしばらく時間がかかります。スクラブの進捗もzpool statusで確認できます。

# zpool status vdiskpool
  プール: vdiskpool
 状態: ONLINE
 スクラブ: scrub が 0h0m で進行中、0.34% 完了、3h48m 開始待ち
構成:

        NAME                    STATE     READ WRITE CKSUM
        vdiskpool               ONLINE       0     0     0
          raidz1-0              ONLINE       0     0     0
            c2t8d0              ONLINE       0     0     0
   ・・・省略・・・

スクラブが完了すると、「completed」と表示されます。

# zpool status vdiskpool
  プール: vdiskpool
 状態: ONLINE
 スクラブ: Wed Jul 23 23:24:08 2014
 上で 0 エラーが発生した 8h23m のあとの scrub completed構成:

        NAME                    STATE     READ WRITE CKSUM
        vdiskpool               ONLINE       0     0     0
          raidz1-0              ONLINE       0     0     0
            c2t8d0              ONLINE       0     0     0
            c2t9d0              ONLINE       0     0     0
            c2t10d0             ONLINE       0     0     0
            c2t11d0             ONLINE       0     0     0
            c2t15d0             ONLINE       0     0     0
            c2t13d0             ONLINE       0     0     0
            c2t14d0             ONLINE       0     0     0
          raidz1-1              ONLINE       0     0     0
            c3t20d0             ONLINE       0     0     0
            c3t21d0             ONLINE       0     0     0
            c3t22d0             ONLINE       0     0     0
            c3t23d0             ONLINE       0     0     0
            c3t24d0             ONLINE       0     0     0
            c3t25d0             ONLINE       0     0     0
            c3t26d0             ONLINE       0     0     0

エラー: 既知のデータエラーはありません

このように、ディスクの交換から整合性の確認まで、オンラインで実施できるのがZFSの特長です。
今回は、RAID Zによる冗長構成の有効性とオンラインでの復旧方法を確認することができました。障害は忘れたころに起こるものです。やはり、いざという時に備えて冗長性の確保と復旧方法の確認をしておきたいですね。もちろん、バックアップも忘れずに。

トラブルは今回のケースの他にも色々なことが起こりますので、以下のマニュアルも合わせてご参照ください。

さらに、富士通のSupportDeskをご契約いただくと、より安心ですね。


応援メッセージはtwitterにて、ハッシュタグ #fjsparcOpen a new window までお願いします。