ここでは、ZFS ファイルシステムまたはストレージプールで発生する問題を識別して解決する方法について説明します。
次の機能を使用して、ZFS 構成で発生した問題を識別することができます。
zpool status コマンドを使用すると、ZFS ストレージプールについての詳細な情報を表示できます。
プールおよびデバイスの障害が ZFS/FMA の診断メッセージで報告されます。
zpool history コマンドを使用すると、プール状態の情報を変更した以前の ZFS コマンドを表示できます。
ZFS のほとんどのトラブルシューティングで、zpool status コマンドを使用します。このコマンドを実行すると、システム上のさまざまな障害が分析され、もっとも重大な問題が識別されます。さらに、推奨する処置と、詳細情報が掲載されたナレッジ記事へのリンクが提示されます。プールで複数の問題が発生している可能性がある場合でも、このコマンドで識別できる問題は 1 つだけです。たとえば、データ破壊のエラーは一般に、いずれかのデバイスで障害が発生したことを示唆しますが、障害が発生したデバイスを置き換えても、データ破壊の問題がすべて解決するとは限りません。
また、ZFS 診断エンジンはプールの障害とデバイスの障害を診断し、報告します。これらの障害に関連するチェックサム、入出力、デバイス、およびプールのエラーも報告されます。fmd で報告される ZFS 障害は、コンソールとシステムメッセージファイルに表示されます。ほとんどの fmd メッセージで、zpool status コマンドを実行して詳細な回復の手順を確認することを求めています。
基本的な回復方法は次のとおりです。
該当する場合、zpool history コマンドを使って、エラーシナリオに至る前に実行された ZFS コマンドを特定します。次に例を示します。
# zpool history tank History for 'tank': 2010-07-15.12:06:50 zpool create tank mirror c0t1d0 c0t2d0 c0t3d0 2010-07-15.12:06:58 zfs create tank/erick 2010-07-15.12:07:01 zfs set checksum=off tank/erick |
この出力では、tank/erick ファイルシステムのチェックサムが無効になっています。この構成はお勧めできません。
システムコンソールまたは /var/adm/messages ファイルに表示される fmd メッセージからエラーを識別します。
zpool status -x コマンドを使って、詳細な修復手順を確認します。
次の手順を実行して、障害を修復します。
障害の発生したデバイスまたは見つからないデバイスを置き換えて、オンラインにします。
障害の発生した構成または破壊されたデータをバックアップから復元します。
zpool status -x コマンドを使用して回復を確認します。
復元した構成のバックアップを作成します (該当する場合)。
この節では、発生する可能性がある障害の種類を診断するために、zpool status の出力を解釈する方法について説明します。ほとんどの作業はコマンドによって自動的に実行されますが、障害を診断するうえで、どのような問題が識別されるかを正確に理解しておくことは重要です。以降の節では、発生する可能性のあるさまざまな問題を修復する方法について説明します。
システムになんらかの既知の問題が存在するかどうかを確認するもっとも簡単な方法は、zpool status -x コマンドを使用することです。このコマンドでは、問題が発生しているプールの説明だけが出力されます。健全性に問題があるプールがシステムに存在しない場合、コマンドは次の出力を表示します。
# zpool status -x all pools are healthy |
-x フラグを指定しないでこのコマンドを実行した場合は、すべてのプールが健全である場合でも、すべてのプール (コマンド行で特定のプールを指定した場合は、要求したプール) のすべての状態が表示されます。
zpool status コマンドのコマンド行オプションの詳細については、「ZFS ストレージプールの状態のクエリー検索を行う」を参照してください。
zpool status の完全な出力は次のようになります。
# zpool status tank # zpool status tank pool: tank state: DEGRADED status: One or more devices could not be opened. Sufficient replicas exist for the pool to continue functioning in a degraded state. action: Attach the missing device and online it using 'zpool online'. see: http://www.sun.com/msg/ZFS-8000-2Q scrub: none requested config: NAME STATE READ WRITE CKSUM tank DEGRADED 0 0 0 mirror-0 DEGRADED 0 0 0 c1t0d0 ONLINE 0 0 0 c1t1d0 UNAVAIL 0 0 0 cannot open errors: No known data errors |
この出力の説明を次に示します。
zpool status 出力のこのセクションは、次のフィールドで構成されます。一部の項目は、プールに問題がある場合にのみ表示されます。
プールの名前を示します。
プールの現在の健全性を示します。この情報は、プールが必要な複製レベルを提供できるかどうかだけを示しています。
プールで発生している問題の説明です。エラーが検出されない場合は、このフィールドは省略されます。
エラーを修復するために推奨される処置。エラーが検出されない場合は、このフィールドは省略されます。
詳細な修復情報が掲載されているナレッジ記事を紹介します。オンラインの記事はこのガイドよりも頻繁に更新されます。そのため、最新の修復手順については常にオンラインの記事を参照してください。エラーが検出されない場合は、このフィールドは省略されます。
スクラブ操作の現在の状態が出力されます。前回のスクラブが完了した日付と時刻、進行中のスクラブ、スクラブが要求されていないかどうかなどが出力されます。
既知のデータエラー、または既知のデータエラーが存在しないことが出力されます。
zpool status 出力の config フィールドには、プール内のデバイスの構成、デバイスの状態、およびデバイスから生成されたエラーが出力されます。次のいずれかの状態になる可能性があります。ONLINE、FAULTED、DEGRADED、UNAVAIL、OFFLINE です。ONLINE 以外のいずれかの状態の場合は、プールの耐障害性が危殆化しています。
構成出力の 2 番目のセクションには、エラー統計が表示されます。これらのエラーは、3 つのカテゴリに分けられます。
READ – 読み取り要求を実行したときに発生した入出力エラー
WRITE – 書き込み要求を実行したときに発生した入出力エラー
CKSUM – チェックサムエラー。読み取り要求の結果として、破壊されたデータがデバイスから返されたことを意味する
これらのエラーを使って、損傷が永続的かどうかを判断できます。入出力エラーが少数の場合は、機能が一時的に停止している可能性があります。入出力エラーが大量の場合は、デバイスに永続的な問題が発生している可能性があります。これらのエラーは、アプリケーションによって解釈されるデータ破壊に対応していないことがあります。デバイスが冗長構成になっている場合は、デバイスの訂正できないエラーが表示されることがあります。ただし、ミラーまたは RAID-Z デバイスレベルではエラーは表示されません。そのような場合、ZFS は正常なデータの取得に成功し、既存の複製から損傷したデータの回復を試みたことになります。
これらのエラーを解釈する方法の詳細については、「デバイス障害の種類を確認する」を参照してください。
さらに、zpool status 出力の最終列には、補足情報が表示されます。この情報は、state フィールドの情報を補足するもので、障害の診断に役立ちます。デバイスが FAULTED の場合は、このフィールドにはデバイスがアクセスできない状態かどうか、またはデバイス上のデータが破壊されているかどうかが表示されます。デバイスで再同期化が実行されている場合、このフィールドには現在の進行状況が表示されます。
再同期化の進行状況を監視する方法の詳細については、「再同期化の状態を表示する」を参照してください。
zpool status 出力のスクラブセクションには、すべての明示的なスクラブ操作の現在の状態が説明されます。この情報は、システム上でなんらかのエラーが検出されているかどうかを示すものではありません。ただし、この情報を使って、データ破壊エラーの報告が正確かどうかを判断できます。前回のスクラブが最近実行されている場合には、既知のデータ破壊が発生していれば、高い確率でそのとき検出されている可能性があります。
スクラブ完了メッセージはシステムの再起動後も残ります。
データスクラブおよびこの情報の解釈方法の詳細については、「ZFS ファイルシステムの整合性をチェックする」を参照してください。
zpool status コマンドでは、既知のエラーが発生している場合に、それらがプールに関連するものであるかどうかも出力されます。これらのエラーは、データのスクラブ中または通常の操作中に検出されている可能性があります。ZFS では、プールに関連するすべてのデータエラーの持続的なログを管理しています。システムの完全なスクラブが終了するたびに、このログのローテーションが行われます。
データ破壊エラーは、常に致命的です。このエラーが発生している場合は、プールのデータが破壊されたために、1 つ以上のアプリケーションで入出力エラーが発生したことになります。冗長なプール内でデバイスエラーが発生してもデータは破壊されないので、このログの一部として記録されません。デフォルトでは、検出されたエラーの数だけが表示されます。エラーおよびその詳細の完全なリストは、zpool status -v オプションを使用すれば表示できます。次に例を示します。
# zpool status -v pool: tank state: UNAVAIL status: One or more devices are faulted in response to IO failures. action: Make sure the affected devices are connected, then run 'zpool clear'. see: http://www.sun.com/msg/ZFS-8000-HC scrub: scrub completed after 0h0m with 0 errors on Tue Feb 2 13:08:42 2010 config: NAME STATE READ WRITE CKSUM tank UNAVAIL 0 0 0 insufficient replicas c1t0d0 ONLINE 0 0 0 c1t1d0 UNAVAIL 4 1 0 cannot open errors: Permanent errors have been detected in the following files: /tank/data/aaa /tank/data/bbb /tank/data/ccc |
同様のメッセージは、システムコンソールで fmd を実行した場合にも、また /var/adm/messages ファイルにも表示されます。fmdump コマンドを使って、これらのメッセージを追跡することもできます。
データ破壊エラーの解釈の詳細については、「データ破壊の種類を確認する」を参照してください。
ZFS では、プール内のエラーを継続的に追跡するだけでなく、そのようなイベントが発生したときに syslog メッセージを表示することもできます。次のような場合に、イベントを生成して管理者に通知します。
デバイス状態の移行 – デバイスが FAULTED になると、プールの耐障害性が危殆化する可能性があることを示すメッセージがログに記録されます。あとでデバイスがオンラインになり、プールの健全性が復元した場合にも、同様のメッセージが送信されます。
データの破壊 – データの破壊が検出された場合には、破壊が検出された日時と場所を示すメッセージがログに記録されます。このメッセージがログに記録されるのは、はじめて検出されたときだけです。それ以降のアクセスについては、メッセージは生成されません。
プールの障害とデバイスの障害 – プールの障害またはデバイスの障害が発生した場合には、障害マネージャーデーモンが syslog メッセージおよび fmdump コマンドを使用してこれらのエラーを報告します。
ZFS がデバイスエラーを検出してそれを自動的に回復した場合には、通知は行われません。このようなエラーでは、プールの冗長性またはデータの完全性の障害は発生しません。また、このようなエラーは通常、ドライバの問題が原因で発生しており、ドライバ自身のエラーメッセージも出力されます。