ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
Oracle Solaris ZFS 管理ガイド Oracle Solaris 10 8/11 Information Library (日本語) |
1. Oracle Solaris ZFS ファイルシステム (概要)
3. Oracle Solaris ZFS ファイルシステムと従来のファイルシステムの相違点
4. Oracle Solaris ZFS ストレージプールの管理
キャッシュデバイスを使用して ZFS ストレージプールを作成する
ミラー化 ZFS ストレージプールを分割して新しいプールを作成する
ストレージプール内のデバイスをオンラインまたはオフラインにする
ストレージプール内のホットスペアをアクティブにする/非アクティブにする
ZFS ストレージプールを別のディレクトリからインポートする
5. Oracle Solaris ZFS ルートファイルシステムのインストールとブート
6. Oracle Solaris ZFS ファイルシステムの管理
7. Oracle Solaris ZFS のスナップショットとクローンの操作
8. ACL および属性を使用した Oracle Solaris ZFS ファイルの保護
10. Oracle Solaris ZFS の高度なトピック
11. Oracle Solaris ZFS のトラブルシューティングとプールの回復
zpool list コマンドでは、いくつかの方法でプール状態に関する情報を要求できます。主に 3 つのカテゴリの情報を要求できます。 基本的な使用状況の情報、入出力統計、および健全性状態です。ここでは、3 種類のストレージプール情報のすべてについて説明します。
zpool list コマンドを使用して、プールに関する基本的な情報を表示できます。
引数を指定しないで zpool list コマンドを実行すると、システム上のすべてのプールについて次の情報が表示されます。
# zpool list NAME SIZE ALLOC FREE CAP HEALTH ALTROOT tank 80.0G 22.3G 47.7G 28% ONLINE - dozer 1.2T 384G 816G 32% ONLINE -
このコマンド出力には、次の情報が表示されます。
プールの名前。
プールの合計サイズ。最上位レベルにあるすべての仮想デバイスの合計サイズになります。
すべてのデータセットおよび内部メタデータに割り当てられた物理的容量。この容量は、ファイルシステムレベルで報告されるディスク容量とは異なります。
使用可能なファイルシステムの容量を確認する方法については、「ZFS のディスク領域の計上」を参照してください。
プール内で割り当てられていない容量。
使用されているディスク容量。総ディスク容量に対するパーセントで表現されます。
プールの現在の健全性状態。
プールの健全性の詳細については、「ZFS ストレージプールの健全性状態を調べる」を参照してください。
プールの代替ルート (存在する場合)。
代替ルートプールの詳細については、「ZFS 代替ルートプールを使用する」を参照してください。
プール名を指定して、特定のプールの統計を収集することもできます。次に例を示します。
# zpool list tank NAME SIZE ALLOC FREE CAP HEALTH ALTROOT tank 80.0G 22.3G 47.7G 28% ONLINE -
zpool list の間隔およびカウントオプションを使用して、ある期間にわたっての統計を収集できます。また、-T オプションを使用することによってタイムスタンプを表示できます。例:
# zpool list -T d 3 2 Tue Nov 2 10:36:11 MDT 2010 NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT pool 33.8G 83.5K 33.7G 0% 1.00x ONLINE - rpool 33.8G 12.2G 21.5G 36% 1.00x ONLINE - Tue Nov 2 10:36:14 MDT 2010 pool 33.8G 83.5K 33.7G 0% 1.00x ONLINE - rpool 33.8G 12.2G 21.5G 36% 1.00x ONLINE -
-o オプションを使用して、特定の統計を要求することができます。このオプションを使用して、カスタムレポートを出力したり、必要な情報をすばやく表示したりできます。たとえば、各プールの名前とサイズだけを表示する場合は、次の構文を使用します。
# zpool list -o name,size NAME SIZE tank 80.0G dozer 1.2T
列の名前は、「すべてのストレージプールまたは特定のプールについての情報を一覧表示する」で説明したプロパティーに対応しています。
zpool list コマンドのデフォルト出力は、読みやすいように設計されているため、シェルスクリプトの一部として使いやすい状態ではありません。このコマンドをプログラムで使いやすくするために、-H オプションを使用して、列見出しを非表示にし、空白文字の代わりにタブでフィールドを区切ることができます。たとえば、システム上のすべてのプール名をリストとして要求するときは、次の構文を使用します。
# zpool list -Ho name tank dozer
別の例です。
# zpool list -H -o name,size tank 80.0G dozer 1.2T
ZFS は、プールの状態に関する情報を変更する zfs コマンドと zpool コマンドが正常に実行された場合にだけ自動的にログを記録します。この情報は、zpool history コマンドを使用して表示することができます。
例えば、ルートプールに関するコマンド出力を表示する場合は、次の構文を使用します。
# zpool history History for 'rpool': 2010-05-11.10:18:54 zpool create -f -o failmode=continue -R /a -m legacy -o cachefile=/tmp/root/etc/zfs/zpool.cache rpool mirror c1t0d0s0 c1t1d0s0 2010-05-11.10:18:55 zfs set canmount=noauto rpool 2010-05-11.10:18:55 zfs set mountpoint=/rpool rpool 2010-05-11.10:18:56 zfs create -o mountpoint=legacy rpool/ROOT 2010-05-11.10:18:57 zfs create -b 8192 -V 2048m rpool/swap 2010-05-11.10:18:58 zfs create -b 131072 -V 1536m rpool/dump 2010-05-11.10:19:01 zfs create -o canmount=noauto rpool/ROOT/zfsBE 2010-05-11.10:19:02 zpool set bootfs=rpool/ROOT/zfsBE rpool 2010-05-11.10:19:02 zfs set mountpoint=/ rpool/ROOT/zfsBE 2010-05-11.10:19:03 zfs set canmount=on rpool 2010-05-11.10:19:04 zfs create -o mountpoint=/export rpool/export 2010-05-11.10:19:05 zfs create rpool/export/home 2010-05-11.11:11:10 zpool set bootfs=rpool rpool 2010-05-11.11:11:10 zpool set bootfs=rpool/ROOT/zfsBE rpool
システムでこれと同じような出力を利用して、エラー状況のトラブルシューティングのために実行された「実際の」ZFS コマンドセットを特定することができます。
履歴ログの特徴を次に示します。
ログを無効にすることはできません。
ログは永続的にディスクに保存されます。つまり、ログはシステムのリブート後も保持されます。
ログはリングバッファーとして実装されます。最小サイズは 128K バイトです。最大サイズは 32M バイトです。
小さめのプールの場合、最大サイズはプールサイズの 1% を上限とします。このサイズはプールの作成時に自動的に決定されます。
ログの管理は不要です。つまり、ログのサイズを調整したり、ログの場所を変更したりする必要はありません。
特定のストレージプールのコマンド履歴を確認するには、次のような構文を使用します。
# zpool history tank History for 'tank': 2011-05-27.13:10:43 zpool create tank mirror c8t1d0 c8t2d0 2011-06-01.12:05:23 zpool scrub tank 2011-06-13.16:26:07 zfs create tank/users 2011-06-13.16:26:27 zfs create tank/users/finance 2011-06-13.16:27:15 zfs set users:dept=finance tank/users/finance
-l オプションを使用して、ユーザー名、ホスト名、および操作が実行されたゾーンを含む長形式を表示します。次に例を示します。
# zpool history -l tank 2011-05-27.13:10:43 zpool create tank mirror c8t1d0 c8t2d0 [user root on neo:global] 2011-06-01.12:05:23 zpool scrub tank [user root on neo:global] 2011-06-13.16:26:07 zfs create tank/users [user root on neo:global] 2011-06-13.16:26:27 zfs create tank/users/finance [user root on neo:global] 2011-06-13.16:27:15 zfs set users:dept=finance tank/users/finance [user root ...]
-i オプションを使用して、診断に利用できる内部イベント情報を表示します。次に例を示します。
# zpool history -i tank History for 'tank': 2011-05-27.13:10:43 zpool create tank mirror c8t1d0 c8t2d0 2011-05-27.13:10:43 [internal pool create txg:5] pool spa 33; zfs spa 33; zpl 5;... 2011-05-31.15:02:39 [internal pool scrub done txg:11828] complete=1 2011-06-01.12:04:50 [internal pool scrub txg:14353] func=1 mintxg=0 maxtxg=14353 2011-06-01.12:05:23 zpool scrub tank 2011-06-13.16:26:06 [internal create txg:29879] dataset = 52 2011-06-13.16:26:07 zfs create tank/users 2011-06-13.16:26:07 [internal property set txg:29880] $share2=2 dataset = 52 2011-06-13.16:26:26 [internal create txg:29881] dataset = 59 2011-06-13.16:26:27 zfs create tank/users/finance 2011-06-13.16:26:27 [internal property set txg:29882] $share2=2 dataset = 59 2011-06-13.16:26:45 [internal property set txg:29883] users:dept=finance dataset = 59 2011-06-13.16:27:15 zfs set users:dept=finance tank/users/finance
プールまたは特定の仮想デバイスの入出力統計を要求する場合は、zpool iostat コマンドを使用します。iostat コマンドと同様に、このコマンドでは、発生したすべての入出力アクティビティーの静的なスナップショットと、指定した間隔ごとに更新される統計を表示できます。次の統計が報告されます。
プールまたはデバイスに現在格納されているデータの量。この容量は、実装の内部的な詳細のために、実際のファイルシステムで利用できるディスク容量とわずかに異なります。
プール領域とデータセット領域の相違点の詳細については、「ZFS のディスク領域の計上」を参照してください。
プールまたはデバイスで使用できるディスク容量。used 統計と同様に、この容量はデータセットで使用できるディスク容量と多少異なります。
プールまたはデバイスに送信された入出力読み取り操作の数 (メタデータ要求を含む)。
プールまたはデバイスに送信された入出力書き込み操作の数。
すべての読み取り操作 (メタデータを含む) の帯域幅。単位/秒として表現されます。
すべての書き込み操作の帯域幅。単位/秒として表現されます。
オプションを指定しないで zpool iostat コマンドを実行すると、システム上のすべてのプールをブートしてから累積された統計が表示されます。次に例を示します。
# zpool iostat capacity operations bandwidth pool alloc free read write read write ---------- ----- ----- ----- ----- ----- ----- rpool 6.05G 61.9G 0 0 786 107 tank 31.3G 36.7G 4 1 296K 86.1K ---------- ----- ----- ----- ----- ----- -----
これらの統計はブートしてから累積されたものなので、プールのアイドル状態が相対的に多い場合には、帯域幅が低く表示されることがあります。間隔を指定すれば、帯域幅の現在の使用状況をより正確に表示できます。次に例を示します。
# zpool iostat tank 2 capacity operations bandwidth pool alloc free read write read write ---------- ----- ----- ----- ----- ----- ----- tank 18.5G 49.5G 0 187 0 23.3M tank 18.5G 49.5G 0 464 0 57.7M tank 18.5G 49.5G 0 457 0 56.6M tank 18.8G 49.2G 0 435 0 51.3M
この例のコマンドでは、tank プールの使用状況の統計が 2 秒ごとに表示されます (Ctrl - C キーを押すと停止する)。count 引数を追加で指定することもできます。この場合は、コマンドが指定した数だけ繰り返されたあとに終了します。たとえば、zpool iostat 2 3 の場合は、概要が 2 秒ごとに 3 回 (計 6 秒間) 出力されます。プールが 1 つだけの場合は、ひと続きの行に統計が表示されます。複数のプールがある場合は、各プールが分かれて見えるように、各プールの間に点線が挿入されます。
zpool iostat コマンドでは、プール全体の入出力統計だけでなく、仮想デバイスの入出力統計を表示できます。このコマンドを使用して、速度が異常に遅いデバイスを検出することができます。また、ZFS が生成した入出力の分布を監視するといった使い方もできます。仮想デバイス全体のレイアウトおよびすべての入出力統計を要求する場合は、zpool iostat -v コマンドを使用します。次に例を示します。
# zpool iostat -v capacity operations bandwidth pool alloc free read write read write ---------- ----- ----- ----- ----- ----- ----- rpool 6.05G 61.9G 0 0 785 107 mirror 6.05G 61.9G 0 0 785 107 c1t0d0s0 - - 0 0 578 109 c1t1d0s0 - - 0 0 595 109 ---------- ----- ----- ----- ----- ----- ----- tank 36.5G 31.5G 4 1 295K 146K mirror 36.5G 31.5G 126 45 8.13M 4.01M c1t2d0 - - 0 3 100K 386K c1t3d0 - - 0 3 104K 386K ---------- ----- ----- ----- ----- ----- -----
仮想デバイスの入出力統計を表示するときは、2 つの重要な点に注意してください。
まず、ディスク容量の使用統計は、最上位レベルの仮想デバイスに対してのみ利用できます。ミラーおよび RAID-Z 仮想デバイスにディスク領域がどのように割り当てられるかは、実装に固有なので、1 つの数値として表現するのは簡単ではありません。
次に、予期したとおりの正確な数値にならないことがあります。特に、RAID-Z デバイスとミラー化されたデバイスの統計は、正確に一致することがありません。この相違は、プールが作成された直後に、特に顕著になります。プールが作成されるときに大量の入出力がディスクに直接実行されますが、これらがミラーレベルでは計上されないためです。時間の経過とともに、これらの数値はしだいに等しくなります。ただし、故障したデバイス、応答しないデバイス、またはオフラインのデバイスも、この対称性に影響する可能性があります。
仮想デバイスの統計を検査するときにも、同じオプション (間隔とカウント) を使用できます。
再同期化進捗レポート。例:
scan: resilver in progress since Thu May 26 11:26:32 2011 1.26G scanned out of 2.40G at 6.15M/s, 0h3m to go 1.26G resilvered, 56.3% done
スクラブ進捗レポート。例:
scan: scrub in progress since Fri May 27 08:24:17 2011 18.0M scanned out of 2.35G at 8.99M/s, 0h4m to go 0 repaired, 0.75% done
再同期化完了メッセージ。例:
scan: resilvered 2.34G in 1h2m with 0 errors on Thu May 26 11:56:40 2011
スクラブ完了メッセージ。例:
scan: scrub repaired 512B in 1h2m with 0 errors on Fri May 27 08:54:50 2011
進行中のスクラブの取り消しメッセージ。例:
scan: scrub canceled on Wed Fri Jun 10 09:06:24 2011
スクラブおよび再同期化の完了メッセージはシステムのリブート後も残ります。
ZFS では、プールとデバイスの健全性を検査する方法が統合されています。プールの健全性は、そのすべてのデバイスの状態から判断されます。この状態情報は、zpool status コマンドを使って表示されます。また、発生する可能性のあるプールとデバイスの障害も fmd によって報告され、システムコンソールに表示されるとともに /var/adm/messages ファイルに記録されます。
この節では、プールとデバイスの健全性を確認する方法について説明します。この章では、健全でないプールを修復または回復する方法については説明しません。障害追跡およびデータの回復については、第 11 章Oracle Solaris ZFS のトラブルシューティングとプールの回復を参照してください。
各デバイスは、次のいずれかの状態になることができます。
デバイスまたは仮想デバイスは正常に動作しています。一時的なエラーがいくつか発生している可能性はありますが、それらを除けば正常に動作しています。
仮想デバイスで障害が発生しましたが、デバイスはまだ動作しています。この状態は、ミラーデバイスまたは RAID-Z デバイスを構成するデバイスのうち、1 つ以上のデバイスが失われたときによく発生します。プールの耐障害性が損なわれる可能性があります。別のデバイスで続けて障害が発生した場合には、回復できない状態になることがあります。
デバイスまたは仮想デバイスへのアクセスが完全にできない状態です。この状態は通常、このデバイスで大きな障害が発生していて、デバイスとの間でデータの送受信ができないことを示しています。最上位レベルの仮想デバイスがこの状態の場合には、そのプールへのアクセスはまったくできません。
管理者がデバイスを明示的にオフラインにしています。
デバイスまたは仮想デバイスを開くことができません。場合によっては、デバイスが UNAVAIL であるプールが DEGRADED モードで表示されることがあります。最上位レベルの仮想デバイスが UNAVAIL の場合は、そのプールのデバイスには一切アクセスできません。
システムの稼働中にデバイスが物理的に取り外されました。デバイスの取り外しの検出はハードウェアに依存しており、一部のプラットフォームではサポートされていない場合があります。
プールの健全性は、最上位レベルのすべての仮想デバイスから判断されます。すべての仮想デバイスが ONLINE の場合は、プールも ONLINE になります。仮想デバイスのいずれかが DEGRADED または UNAVAIL の場合は、プールも DEGRADED になります。最上位レベルの仮想デバイスが FAULTED または OFFLINE の場合は、プールも FAULTED になります。FAULTED 状態のプールには一切アクセスできません。必要なデバイスが接続または修復されるまで、データは回復できません。DEGRADED 状態のプールは引き続き動作しますが、プールがオンラインの場合と同じレベルのデータ冗長性やデータスループットを実現できない可能性があります。
次のように zpool status コマンドを使用することにより、プールの健全性状態をすばやく確認できます。
# zpool status -x all pools are healthy
プール名をコマンド構文に指定すれば、特定のプールを検査できます。ONLINE 状態ではないプールがある場合には、次の節で説明するように、問題が発生していないかどうかを調査するようにしてください。
-v オプションを使用すれば、より詳細な健全性の概要状態を要求することができます。次に例を示します。
# zpool status -v 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: scrub completed after 0h0m with 0 errors on Wed Jan 20 15:13:59 2010 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 online コマンドを使用してデバイスをオンラインにします。次に例を示します。
# zpool online tank c1t0d0 Bringing device c1t0d0 online # zpool status -x all pools are healthy
autoreplace プロパティーがオンの場合、置き換えたデバイスをオンラインにする必要はない場合があります。
プールにオフラインのデバイスがある場合は、コマンドの出力から問題のプールを確認できます。次に例を示します。
# zpool status -x pool: tank state: DEGRADED status: One or more devices has been taken offline by the administrator. Sufficient replicas exist for the pool to continue functioning in a degraded state. action: Online the device using 'zpool online' or replace the device with 'zpool replace'. scrub: resilver completed after 0h0m with 0 errors on Wed Jan 20 15:15:09 2010 config: NAME STATE READ WRITE CKSUM tank DEGRADED 0 0 0 mirror-0 DEGRADED 0 0 0 c1t0d0 ONLINE 0 0 0 c1t1d0 OFFLINE 0 0 0 48K resilvered errors: No known data errors
READ 列と WRITE 列には、そのデバイスで発生した入出力エラーの数が表示されます。CKSUM 列には、そのデバイスで発生した訂正不可能なチェックサムエラーの数が表示されます。どちらのエラー数も、デバイス障害が発生する可能性があることを示し、その場合には訂正のための対応がいくつか必要になります。最上位レベルの仮想デバイスでエラー数があると報告された場合、データの一部にアクセスできないことがあります。
errors: フィールドは既知のデータエラーを示します。
前の出力例では、オフラインのデバイスでデータエラーは発生していません。
zpool status コマンドによって、次のスクラブおよび再同期化情報が表示されます。
エラー状態のプールとデータを診断および修復する方法については、第 11 章Oracle Solaris ZFS のトラブルシューティングとプールの回復を参照してください。
zpool status の間隔およびカウントオプションを使用して、ある期間にわたっての統計を収集できます。また、-T オプションを使用することによってタイムスタンプを表示できます。例:
# zpool status -T d 3 2 zpool status -T d 3 2 Tue Nov 2 10:38:18 MDT 2010 pool: pool state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM pool ONLINE 0 0 0 c3t3d0 ONLINE 0 0 0 errors: No known data errors pool: rpool state: ONLINE scan: resilvered 12.2G in 0h14m with 0 errors on Thu Oct 28 14:55:57 2010 config: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 c3t0d0s0 ONLINE 0 0 0 c3t2d0s0 ONLINE 0 0 0 errors: No known data errors Tue Nov 2 10:38:21 MDT 2010 pool: pool state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM pool ONLINE 0 0 0 c3t3d0 ONLINE 0 0 0 errors: No known data errors pool: rpool state: ONLINE scan: resilvered 12.2G in 0h14m with 0 errors on Thu Oct 28 14:55:57 2010 config: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 c3t0d0s0 ONLINE 0 0 0 c3t2d0s0 ONLINE 0 0 0 errors: No known data errors