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にて、ハッシュタグ #fjsparc までお願いします。