第 4 章 ZFS ストレージプールの管理
この章では、ZFS ストレージプールを作成および管理する方法について説明します。
この章は、次の節で構成されます。
ZFS ストレージプールのコンポーネント
以降の節では、次のストレージプールのコンポーネントについて詳しく説明します。
ZFS ストレージプール内でディスクを使用する
ストレージプールのもっとも基本的な要素は、物理ストレージです。128M バイト以上のサイズであれば、任意のブロック型デバイスを物理ストレージとして利用できます。このデバイスは通常、/dev/dsk ディレクトリとしてシステムから認識されるハードドライブです。
ディスク全体 (c1t0d0) または個別のスライス (c0t0d0s7) をストレージデバイスとして利用できます。推奨される操作モードは、ディスク全体を使用する方法です。この場合、ディスクを特にフォーマットする必要はありません。ZFS によって、EFI ラベルを使用する 1 つの大きなスライスのディスクとしてフォーマットされます。この方法を使用した場合に、format コマンドで表示されるパーティションテーブルは、次のような内容になります。
Current partition table (original):
Total disk sectors available: 17672849 + 16384 (reserved sectors)
Part Tag Flag First Sector Size Last Sector
0 usr wm 256 8.43GB 17672849
1 unassigned wm 0 0 0
2 unassigned wm 0 0 0
3 unassigned wm 0 0 0
4 unassigned wm 0 0 0
5 unassigned wm 0 0 0
6 unassigned wm 0 0 0
8 reserved wm 17672850 8.00MB 17689233
|
ディスク全体を使用するには、/dev/dsk/cXtXdX 命名規則を使用してディスクに名前を付ける必要があります。他社製のドライバの中には、異なる命名規則を使用したり、ディスクを /dev/dsk ディレクトリ以外の場所に配置するものがあります。これらのディスクを使用する場合は、ディスクの名前を手動で付けて、ZFS にスライスを渡す必要があります。
ディスク全体を使ってストレージプールを作成するときは、EFI ラベルが適用されます。EFI ラベルの詳細については、『Solaris のシステム管理 (デバイスとファイルシステム)』の「EFI ディスクラベル」を参照してください。
ZFS ルートプールに使用するディスクは、EFI ラベルではなく、SMI ラベルを使用して作成する必要があります。format - e コマンドを使用して、ディスクのラベルを SMI ラベルに変更することができます。
ディスクを指定するときには、フルパス (/dev/dsk/c1t0d0 など) または /dev/dsk ディレクトリ内のデバイス名で構成される短縮名 (c1t0d0 など) を使用できます。有効なディスク名の例を挙げます。
-
c1t0d0
-
/dev/dsk/c1t0d0
-
c0t0d6s2
-
/dev/foo/disk
物理ディスクの全体を使用するのが、ZFS ストレージプールを作成するためのもっとも単純な方法です。ディスクスライス、ハードウェア RAID アレイ内の LUN、またはソフトウェアベースのボリュームマネージャーが提供するボリュームからプールを構築する場合、管理、信頼性、およびパフォーマンスの観点から ZFS 構成が次第により複雑になります。次の点を考慮すれば、ほかのハードウェアまたはソフトウェアストレージ解決策を使って ZFS を構成する方法を決定しやすくなる可能性があります。
-
ハードウェア RAID アレイの LUN 上に ZFS 構成を構築する場合、ZFS の冗長機能とアレイが提供する冗長機能との関係を理解する必要があります。ある構成で十分な冗長性やパフォーマンスが得られても、別の構成ではそうならない可能性もあります。
-
SolarisTM Volume Manager (SVM) や Veritas Volume Manager (VxVM) など、ソフトウェアベースのボリュームマネージャーが提供するボリュームを使って ZFS 用の論理デバイスを構築することも可能です。ただし、そうした構成は推奨されません。ZFS はこのようなデバイス上でも正しく動作しますが、最適なパフォーマンスが得られない場合があります。
ストレージプールの推奨事項に関するその他の情報は、次の ZFS ベストプラクティスのサイトを参照してください。
http://www.solarisinternals.com/wiki/index.php/ZFS_Best_Practices_Guide
ディスクは、パスとデバイス ID の両方で識別されます (利用できる場合)。この方法を利用すれば、ZFS がどのような状態であっても、状態を更新せずにシステム上のデバイスを再構成することができます。ディスクのコントローラを 1 から 2 に切り替えた場合は、ディスクが移動したことがデバイス ID を使用して自動的に検出され、コントローラ 2 を使ってディスクへのアクセスが行われます。デバイス ID は、ドライブのファームウェアに一意です。まれにですが、一部のファームウェア更新によってデバイス ID が変更されることがわかっています。ZFS では、この状況が発生しても、パスを使ってそのデバイスにアクセスし、保管されたデバイス ID を自動的に更新することができます。デバイスのパスと ID の両方を誤って変更した場合、そのデバイスを使用するにはプールをエクスポートして再度インポートする必要があります。
ZFS ストレージプール内でスライスを使用する
ディスクスライスを使ってストレージプールを作成するときは、従来の Solaris VTOC (SMI) ラベルを使ってディスクに名前を付けることができます。
ブート可能な ZFS ルートプールの場合、プール内のディスクには、スライスが含まれ、SMI ラベルが付けられていなければなりません。もっとも単純な構成としては、すべてのディスク容量をスライス 0 に割り当て、そのスライスをルートプールに使用します。
SPARC システムの 72G バイトのディスクに、68G バイトの使用可能領域がスライス 0 に配置されています。次の format の出力を参照してください。
# format
.
.
.
Specify disk (enter its number): 4
selecting c1t1d0
partition> p
Current partition table (original):
Total disk cylinders available: 14087 + 2 (reserved cylinders)
Part Tag Flag Cylinders Size Blocks
0 root wm 0 - 14086 68.35GB (14087/0/0) 143349312
1 unassigned wm 0 0 (0/0/0) 0
2 backup wm 0 - 14086 68.35GB (14087/0/0) 143349312
3 unassigned wm 0 0 (0/0/0) 0
4 unassigned wm 0 0 (0/0/0) 0
5 unassigned wm 0 0 (0/0/0) 0
6 unassigned wm 0 0 (0/0/0) 0
7 unassigned wm 0 0 (0/0/0) 0
|
x86 システムの 72G バイトのディスクに、68G バイトの使用可能領域がスライス 0 に配置されています。次の format の出力を参照してください。少量のブート情報がスライス 8 に格納されています。スライス 8 は管理不要で、変更することはできません。
# format
.
.
.
selecting c1t0d0
partition> p
Current partition table (original):
Total disk cylinders available: 49779 + 2 (reserved cylinders)
Part Tag Flag Cylinders Size Blocks
0 root wm 1 - 49778 68.36GB (49778/0/0) 143360640
1 unassigned wu 0 0 (0/0/0) 0
2 backup wm 0 - 49778 68.36GB (49779/0/0) 143363520
3 unassigned wu 0 0 (0/0/0) 0
4 unassigned wu 0 0 (0/0/0) 0
5 unassigned wu 0 0 (0/0/0) 0
6 unassigned wu 0 0 (0/0/0) 0
7 unassigned wu 0 0 (0/0/0) 0
8 boot wu 0 - 0 1.41MB (1/0/0) 2880
9 unassigned wu 0 0 (0/0/0) 0
|
ブート可能な ZFS ルートプールでない ZFS ストレージプールにスライスを使用する場合は、次の条件を確認することが必要になることがあります。
ZFS ストレージプール内のファイルを使用する
ZFS では、ストレージプール内の UFS ファイルを仮想デバイスとして使用することもできます。この機能は、本稼働環境で使用するのではなく、主にテストや簡単な実験のために使用します。これは、ファイルをどのように使用する場合でも、整合性を保つために背後のファイルシステムに依存しているためです。ZFS プールを UFS ファイルシステム上のファイルに基づいて作成する場合には、正確さと同期のセマンティクスを保証するために、UFS に暗黙に依存しています。
ただし、ZFS を初めて使用してみる場合や、十分な物理デバイスがない状況で複雑なレイアウトを実験する場合には、これらのファイルが非常に便利なことがあります。すべてのファイルは、完全なパスで指定し、64M バイト以上のサイズにする必要があります。ファイルを移動するかファイルの名前を変更した場合、そのファイルを使用するには、プールをエクスポートして再度インポートする必要があります。デバイス ID が関連付けられていないと、ファイルを検出できないためです。
ZFS ストレージプールの複製機能
ZFS には、ミラー化構成と RAID-Z 構成において、自己修復プロパティーに加えてデータ冗長性も用意されています。
ミラー化されたストレージプール構成
ストレージプール構成をミラー化するには、2 つのディスクが必要です。ディスクごとに個別のコントローラを割り当てることをお勧めします。ミラー化構成では、多数のディスクを使用できます。また、各プール内に複数のミラーを作成することもできます。概念的に単純なミラー化構成は、次のようになります。
概念的により複雑なミラー化構成は、次のようになります。
mirror c1t0d0 c2t0d0 c3t0d0 mirror c4t0d0 c5t0d0 c6t0d0
|
ミラー化されたストレージプールの作成方法については、「ミラー化されたストレージプールを作成する」を参照してください。
RAID-Z ストレージプール構成
ZFS は、ミラー化ストレージプール構成のほかに、シングルパリティーまたはダブルパリティーの耐障害性を備えた RAID-Z 構成も提供します。シングルパリティーの RAID-Z は RAID-5 に似ています。ダブルパリティーの RAID-Z は RAID-6 に似ています。
従来の RAID-5 に似たアルゴリズム (RAID-4、RAID-6、RDP、EVEN-ODD など) はすべて、「RAID-5 書き込みホール」と呼ばれる問題の影響を受けます。RAID-5 ストライプが書き込まれている途中に電源が切断され、すべてのブロックがディスクにまだ書き込まれていない場合、パリティーとデータが同期されないままになり、あとでストライプ全体を書き込んで上書きしない限り、永久に使用できない状態になります。RAID-Z では、可変幅の RAID ストライプを使用して、すべての書き込みがストライプ全体を書き込むようになっています。ZFS では、ファイルシステムとデバイス管理を統合して、可変幅の RAID ストライプの処理に必要な基本となるデータ冗長モデルの情報をファイルシステムのメタデータに十分に取り込むことによって、この設計を実現しています。RAID-Z は、RAID-5 書き込みホールをソフトウェアだけで解決する、世界初のソリューションです。
RAID-Z 構成はサイズ X のディスク N 基とパリティーディスク P 基で構成されているので、約 (N-P)*X バイトを保管することができ、P 個のデバイスで障害が発生してもデータの完全性が低下することがありません。シングルパリティーの RAID-Z 構成には 2 基以上のディスク、ダブルパリティーの RAID-Z 構成には 3 基以上のディスクが必要になります。たとえば、3 つのディスクで構成されるシングルパリティー RAID-Z 構成の場合には、パリティーデータが占有する領域は 3 つのディスクのいずれかです。それ以外の点では、RAID-Z 構成を作成するために特別なハードウェアは必要ありません。
3 つのディスクを使用する RAID-Z 構成の概念は、次のようになります。
raidz c1t0d0 c2t0d0 c3t0d0
|
概念的により複雑な RAID-Z 構成は、次のようになります。
raidz c1t0d0 c2t0d0 c3t0d0 c4t0d0 c5t0d0 c6t0d0 c7t0d0 raidz c8t0d0 c9t0d0 c10t0d0 c11t0d0
c12t0d0 c13t0d0 c14t0d0
|
多数のディスクで構成される RAID-Z 構成を作成する場合、たとえばこの例のように 14 個のディスクで構成される RAID-Z 構成の場合には、7 個のディスクで構成される 2 つのグループに分割することをお勧めします。RAID-Z 構成をディスクグループに分割する場合には、その数を 1 桁にすると、パフォーマンスが向上します。
RAID-Z ストレージプールの作成方法については、「RAID-Z ストレージプールを作成する」を参照してください。
パフォーマンスや容量を考慮したうえでミラー化構成または RAID-Z 構成のどちらを選択するかについての詳細は、次のブログを参照してください。
http://blogs.sun.com/roller/page/roch?entry=when_to_and_not_to
RAID-Z ストレージプールの推奨事項に関するその他の情報は、次の ZFS ベストプラクティスのサイトを参照してください。
http://www.solarisinternals.com/wiki/index.php/ZFS_Best_Practices_Guide
ZFS ハイブリッドストレージプール
Sun Storage 7000 製品シリーズで利用可能な ZFS ハイブリッドストレージプールは、パフォーマンスの向上および容量の増加と同時に電力消費の削減を実現するために、DRAM、SSD、および HDD を組み合わせた特殊なストレージプールです。この製品の管理インタフェースを使用すると、ストレージプールの ZFS 冗長構成を選択でき、ほかの構成オプションも簡単に管理できます。
この製品の詳細については、『Sun Storage Unified Storage System Administration Guide』を参照してください。
冗長構成の自己修復データ
ZFS のミラー化構成または RAID-Z 構成は、自己修復データを備えています。
不正なデータブロックが検出されると、ZFS は別の冗長コピーから正しいデータを取得するだけでなく、不正なデータを適切なコピーで置き換えて修復も行います。
ストレージプール内の動的なストライプ
ZFS では、仮想デバイスがプールに追加されるたびに、使用可能なすべてのデバイス上にデータが動的にストライプ化されます。データがどこに割り当てられるかは書き込み時に決定されるため、割り当て時には固定幅のストライプは作成されません。
仮想デバイスがプールに追加されると、パフォーマンスと領域割り当てポリシーを維持するために、データは新しいデバイスに順次割り当てられます。各仮想デバイスは、ほかのディスクデバイスまたはファイルを含むミラーまたは RAID-Z デバイスでもかまいません。この構成を使用すれば、プールの障害時の特性を柔軟に制御できます。たとえば、4 つのディスクから次の構成を作成できます。
ZFS では、1 つのプールの中に種類の異なる仮想デバイスを組み合わせることもできますが、この方法は推奨されていません。たとえば、2 方向のミラー構成と 3 方向の RAID-Z 構成を含むプールを作成できます。ただし、耐障害性は、もっとも低い仮想デバイス (この場合は RAID-Z) と同じになります。最上位の仮想デバイスは同じ種類のデバイスを使用し、各デバイスで同じ冗長レベルにすることをお勧めします。
ZFS ストレージプールを作成および破棄する
以降の節では、ZFS ストレージプールを作成および破棄するさまざまなシナリオについて説明します。
設計上は、すばやく簡単にプールを作成して破棄できるようになっています。ただし、これらの操作を行うときには注意が必要です。使用中であることがわかっているデバイスについては、新しいプールで使用されないようにするためのチェックが実行されます。ただし、すでに使用されているデバイスを常に認識できるわけではありません。プールを破棄する操作は、さらに簡単に実行できます。zpool destroy は、注意深く実行してください。簡単なコマンドですが、大きな影響が発生します。
ZFS ストレージプールを作成する
ストレージプールを作成するには、zpool create コマンドを使用します。このコマンドの引数には、プール名および任意の数の仮想デバイスを指定します。プール名は、「ZFS コンポーネントに名前を付けるときの規則」で説明した規則に従って付ける必要があります。
基本的なストレージプールを作成する
次のコマンドでは、ディスク c1t0d0 および c1t1d0 で構成される、tank という名前の新しいプールが作成されます。
# zpool create tank c1t0d0 c1t1d0
|
これらのディスクはすべて、/dev/dsk ディレクトリに作成されます。適切な名前が自動的に割り当てられ、1 つの大きなスライスで構成されます。データは、両方のディスクに動的にストライプ化されます。
ミラー化されたストレージプールを作成する
ミラー化されたプールを作成するには、mirror キーワードと、ミラーを構成する任意の数のストレージデバイスを使用します。複数のミラーを指定する場合は、コマンド行で mirror キーワードを繰り返すことができます。次のコマンドでは、1 つのプールと 2 つの 2 方向ミラーが作成されます。
# zpool create tank mirror c1d0 c2d0 mirror c3d0 c4d0
|
2 番目の mirror キーワードでは、新しい最上位仮想デバイスを指定しています。データは両方のミラーにまたがって動的にストライプ化され、各ディスク間で適切に冗長化されます。
推奨されるミラー化構成の詳細については、次のサイトを参照してください。
http://www.solarisinternals.com/wiki/index.php/ZFS_Best_Practices_Guide
現時点では、ZFS ミラー化構成では次の操作がサポートされています。
現時点では、ミラー化構成では次の操作はサポートされていません。
ZFS ルートプールを作成する
最新の Solaris リリースでは、ZFS ルートファイルシステムのインストールおよび ZFS ルートファイルシステムからの起動が可能になりました。ルートプールの構成に関する次の情報を確認してください。
-
ルートプールに使用するディスクには VTOC (SMI) ラベルが必要です。また、ディスクスライスを使用してプールを作成する必要があります。
-
ルートプールは、ミラー化構成または単一ディスク構成として作成する必要があります。ディスクを追加して複数のミラー化仮想デバイスを作成することはできませんが、zpool attach コマンドを使用して 1 つのミラー化仮想デバイスを拡張することができます。
-
RAID-Z やストライプ化構成はサポートされていません。
-
ルートプールに別個のログデバイスを使用することはできません。
-
ルートプールにサポートされていない構成を使用しようとすると、次のようなメッセージが表示されます。
ERROR: ZFS pool <pool-name> does not support boot environments
|
# zpool add -f rpool log c0t6d0s0
cannot add to 'rpool': root pool can not have multiple vdevs or separate logs
|
ZFS ルートファイルシステムのインストールと起動の詳細については、第 5 章ZFS ルートファイルシステムのインストールと起動を参照してください。
RAID-Z ストレージプールを作成する
シングルパリティー RAID-Z プールの作成方法は、ミラー化されたプールの作成方法と同じですが、mirror キーワードの代わりに raidz または raidz1 を使用する点が異なります。次の例では、5 個のディスクで構成される 1 つの RAID-Z デバイスを使ってプールを作成する方法を示します。
# zpool create tank raidz c1t0d0 c2t0d0 c3t0d0 c4t0d0 /dev/dsk/c5t0d0
|
この例では、フルパスを使ってディスクを指定できることを示しています。デバイス /dev/dsk/c5t0d0 は、デバイス c5t0d0 と同じことです。
ディスクスライスを使用して同じような構成を作成することもできます。次に例を示します。
# zpool create tank raidz c1t0d0s0 c2t0d0s0 c3t0d0s0 c4t0d0s0 c5t0d0s0
|
ただし、スライスゼロのサイズを適切に設定するには、ディスクが事前にフォーマットされている必要があります。
プール作成時に raidz2 キーワードを使用すれば、ダブルパリティー RAID-Z 構成を作成できます。次に例を示します。
# zpool create tank raidz2 c1t0d0 c2t0d0 c3t0d0
# zpool status -v tank
pool: tank
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
raidz2 ONLINE 0 0 0
c1t0d0 ONLINE 0 0 0
c2t0d0 ONLINE 0 0 0
c3t0d0 ONLINE 0 0 0
errors: No known data errors
|
現時点では、ZFS RAID-Z 構成では次の操作がサポートされています。
現時点では、RAID-Z 構成では次の操作がサポートされていません。
RAID-Z 構成の詳細については、「RAID-Z ストレージプール構成」を参照してください。
ログデバイスを持つ ZFS ストレージプールを作成する
デフォルトでは、ZIL はメインプール内のブロックから割り当てられます。しかし、NVRAM や専用ディスクなどで、別個のインテントログデバイスを使用することにより、パフォーマンスを向上できる可能性があります。ZFS ログデバイスの詳細については、「別個の ZFS ログデバイスを設定する」を参照してください。
ZFS ログデバイスは、ストレージプールの作成時または作成後に設定できます。
たとえば、ミラー化ログデバイスを持つミラー化ストレージプールを作成します。
# zpool create datap mirror c1t1d0 c1t2d0 mirror c1t3d0 c1t4d0 log mirror c1t5d0 c1t8d0
# zpool status
pool: datap
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
datap ONLINE 0 0 0
mirror ONLINE 0 0 0
c1t1d0 ONLINE 0 0 0
c1t2d0 ONLINE 0 0 0
mirror ONLINE 0 0 0
c1t3d0 ONLINE 0 0 0
c1t4d0 ONLINE 0 0 0
logs ONLINE 0 0 0
mirror ONLINE 0 0 0
c1t5d0 ONLINE 0 0 0
c1t8d0 ONLINE 0 0 0
errors: No known data errors
|
ログデバイス障害からの回復の詳細については、例 11–2 を参照してください。
キャッシュデバイスを使用して ZFS ストレージプールを作成する
キャッシュデバイスを使用してストレージプールを作成して、ストレージプールデータをキャッシュすることができます。次に例を示します。
# zpool create tank mirror c2t0d0 c2t1d0 c2t3d0 cache c2t5d0 c2t8d0
# zpool status tank
pool: tank
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
mirror ONLINE 0 0 0
c2t0d0 ONLINE 0 0 0
c2t1d0 ONLINE 0 0 0
c2t3d0 ONLINE 0 0 0
cache
c2t5d0 ONLINE 0 0 0
c2t8d0 ONLINE 0 0 0
|
キャッシュデバイスを使用して ZFS ストレージプールを作成するかどうか検討する場合は、次の点を再考してください。
-
キャッシュデバイスを使用すると、ほぼ静的なコンテンツをランダムに読み込む作業負荷のパフォーマンスが大幅に向上します。
-
zpool iostat コマンドを次のように使用して、容量と読み込みを監視できます。
-
プールを作成するときに 1 つまたは複数のキャッシュデバイスを追加することができ、また、プールを作成した後にそれらのキャッシュデバイスを追加および削除することができます。詳細は、例 4–4 を参照してください。
-
キャッシュデバイスは、ミラー化することも、RAID-Z 構成に含めることもできません。
-
キャッシュデバイスで読み取りエラーが検出されると、ミラー化構成または RAID-Z 構成に含まれている可能性があるオリジナルのストレージプールデバイスに対して、その読み取り I/O が再発行されます。キャッシュデバイスの内容は、他のシステムキャッシュによるキャッシュと同様、揮発性であるとみなされます。
ストレージプールの仮想デバイスの情報を表示する
各ストレージプールは、1 つ以上の仮想デバイスで構成されています。「仮想デバイス」は、物理ストレージのレイアウトと障害時の特性を定義した、ストレージプールの内部表現です。つまり、仮想デバイスは、ストレージプールの作成に使用されるディスクデバイスまたはファイルを表しています。プールでは、構成の最上位に任意の数の仮想デバイス (「ルート vdevs」と呼ばれる) を含めることができます。
ルートまたは最上位レベルの 2 つの仮想デバイスは、データ冗長性を備えています。ミラーおよび RAID-Z 仮想デバイスです。これらの仮想デバイスは、複数のディスク、ディスクスライス、またはファイルで構成されています。スペアは、プールで使用可能なホットスペアを追跡する特殊な仮想デバイスです。
次の例では、2 つのルート仮想デバイスで構成されたプールを作成する方法を示します。ルート仮想デバイスはそれぞれ 2 ディスクのミラーです。
# zpool create tank mirror c1d0 c2d0 mirror c3d0 c4d0
|
次の例では、4 ディスクから成る 1 つのルート仮想デバイスで構成されたプールを作成する方法を示します。
# zpool create mypool raidz2 c1d0 c2d0 c3d0 c4d0
|
zpool add コマンドを使用して、このプールに別のルート仮想デバイスを追加できます。次に例を示します。
# zpool add mypool raidz2 c2d0 c3d0 c4d0 c5d0
|
非冗長プールで使用されるディスク、ディスクスライス、またはファイルは、それ自体が最上位の仮想デバイスとして機能します。ストレージプールには通常、複数の最上位レベルの仮想デバイスが含まれています。ZFS では、プール内のすべての最上位レベルの仮想デバイス間でデータが動的にストライプ
化されます。
ZFS ストレージプールに含まれている仮想デバイスと物理デバイスは、zpool status コマンドで表示されます。次に例を示します。
# zpool status tank
pool: tank
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
mirror ONLINE 0 0 0
c0t1d0 ONLINE 0 0 0
c1t1d0 ONLINE 0 0 0
mirror ONLINE 0 0 0
c0t2d0 ONLINE 0 0 0
c1t2d0 ONLINE 0 0 0
mirror ONLINE 0 0 0
c0t3d0 ONLINE 0 0 0
c1t3d0 ONLINE 0 0 0
|
ZFS ストレージプールの作成エラーに対応する
さまざまな原因で、プールの作成エラーが発生することがあります。指定されたデバイスが存在しないなどの原因の明白なエラーもあれば、理由がはっきりしないエラーもあります。
使用中のデバイスを検出する
ZFS では、デバイスをフォーマットする前に、ディスクが ZFS またはオペレーティングシステムのほかの部分で使用されているかどうかを最初に確認します。ディスクが使用中の場合は、たとえば次のようなエラーが表示されます。
# zpool create tank c1t0d0 c1t1d0
invalid vdev specification
use '-f' to override the following errors:
/dev/dsk/c1t0d0s0 is currently mounted on /. Please see umount(1M).
/dev/dsk/c1t0d0s1 is currently mounted on swap. Please see swap(1M).
/dev/dsk/c1t1d0s0 is part of active ZFS pool zeepool. Please see zpool(1M).
|
これらのエラーの中には -f オプションを使用することで無効にできるものもありますが、ほとんどのエラーは無効にできません。以降に示す使用の場合は -f オプションを指定しても無効にはできないため、手動で訂正する必要があります。
-
マウントされたファイルシステム
-
このディスクまたはそのスライスの 1 つに、現在マウントされているファイルシステムが含まれています。このエラーを訂正するには、umount コマンドを使用してください。
-
/etc/vfstab 内のファイルシステム
-
このディスクには、/etc/vfstab ファイルに指定されているファイルシステムが含まれていますが、そのファイルシステムが現在マウントされていません。このエラーを訂正するには、/etc/vfstab ファイルでその行をコメントにしてください。
-
専用のダンプデバイス
-
このディスクは、システム専用のダンプデバイスとして使用中です。このエラーを訂正するには、dumpadm コマンドを使用してください。
-
ZFS プールの一部
-
このディスクまたはファイルは、アクティブな ZFS ストレージプールに含まれています。このエラーを訂正するには、そのプールが不要であれば zpool destroy コマンドを使用して破棄してください。または、zpool detach コマンドを使用して、そのプールからディスクを切り離します。ディスクを切り離すことができるのは、ミラー化ストレージプールの場合のみです。
次の使用中チェックは警告として役に立つ情報ですが、-f オプションを使用して無効にすれば、プールを作成できます。
-
ファイルシステムを含んでいる
-
このディスクには既知のファイルシステムが含まれていますが、マウントされていないうえ、使用中のメッセージが表示されません。
-
ボリュームの一部
-
このディスクは SVM ボリュームに含まれています。
-
Live upgrade
-
このディスクは、Solaris Live Upgrade 用の代替ブート環境として使用中です。
-
エクスポートされた ZFS プール
-
このディスクは、エクスポートされたストレージプール、またはシステムから手動で削除されたストレージプールに含まれています。後者の場合、このプールは潜在的にアクティブとして報告されます。このディスクがネットワークに接続されたドライブとして別のシステムで使用されているかどうか、わからないためです。潜在的にアクティブなプールを無効にする場合には、注意が必要です。
次の例は、-f オプションの使用方法を示しています。
# zpool create tank c1t0d0
invalid vdev specification
use '-f' to override the following errors:
/dev/dsk/c1t0d0s0 contains a ufs filesystem.
# zpool create -f tank c1t0d0
|
できるだけ、-f オプションを使用しないでエラーを訂正するようにしてください。
複製レベルが一致しない
複製レベルの異なる仮想デバイスを使ってプールを作成することは、推奨されていません。zpool コマンドは、冗長レベルの一致しないプールが誤って作成されることを回避しようとします。このような構成のプールを作成しようとすると、次のようなエラーが表示されます。
# zpool create tank c1t0d0 mirror c2t0d0 c3t0d0
invalid vdev specification
use '-f' to override the following errors:
mismatched replication level: both disk and mirror vdevs are present
# zpool create tank mirror c1t0d0 c2t0d0 mirror c3t0d0 c4t0d0 c5t0d0
invalid vdev specification
use '-f' to override the following errors:
mismatched replication level: 2-way mirror and 3-way mirror vdevs are present
|
-f オプションを使用することでこれらのエラーを無効にできますが、この方法は推奨されていません。このコマンドを使用してサイズの異なるデバイスで構成されるミラー化または RAID-Z プールを作成しようとした場合にも、警告が表示されます。この構成は許可されていますが、冗長レベルが一致していないことから、大きい方のデバイスに未使用の領域が発生します。警告を無効にするには、-f オプションを指定する必要があります。
ストレージプール作成のドライランを行う
プールの作成は、さまざまな原因で予期せずに失敗することがあります。また、ディスクをフォーマットする操作は、潜在的に危険を伴います。このため、zpool create コマンドには -n オプションが用意されています。このオプションを利用すれば、実際にデバイスへの書き込みを行わずに、プールの作成のシミュレーションを行うことができます。このオプションを指定すると、使用中のデバイスの確認と複製レベルの検証が行われ、処理中に発生したエラーがすべて報告されます。エラーが見つからない場合は、次のような出力が表示されます。
# zpool create -n tank mirror c1t0d0 c1t1d0
would create 'tank' with the following layout:
tank
mirror
c1t0d0
c1t1d0
|
一部のエラーは、プールを実際に作成しないと検出できません。たとえば、同じ構成に同じデバイスを 2 回指定していることがよくあります。このエラーは、データ自体を書き込まないと確実に検出できません。create -n コマンドでは成功したように報告されることがありますが、実際に実行してみるとプールの作成に失敗します。
ストレージプールのデフォルトマウントポイント
プールが作成されるときに、root データセットのデフォルトマウントポイントは /pool-name になります。このディレクトリは、存在しないディレクトリか、空のディレクトリにする必要があります。ディレクトリが存在しない場合は、自動的に作成されます。ディレクトリが空の場合は、root データセットが既存のディレクトリの最上位にマウントされます。別のデフォルトマウントポイントを使用してプールを作成する場合は、-zpool create コマンドの m オプションを使用します。
# zpool create home c1t0d0
default mountpoint '/home' exists and is not empty
use '-m' option to specify a different default
# zpool create -m /export/zfs home c1t0d0
|
# zpool create home c1t0d0
default mountpoint '/home' exists and is not empty
use '-m' option to provide a different default
# zpool create -m /export/zfs home c1t0d0
|
このコマンドを実行すると、/export/zfs をマウントポイントとして、新しいプール home および home データセットが作成されます。
マウントポイントの詳細については、「ZFS マウントポイントを管理する」を参照してください。
ZFS ストレージプールを破棄する
プールを破棄するときは、zpool destroy コマンドを使用します。このコマンドを実行すると、マウント済みのデータセットがプールに含まれている場合でも、プールが破棄されます。

注意 –
プールを破棄するときは、十分に注意してください。破棄するプールに間違いがないことを確認し、常にデータをコピーしておいてください。ほかのプールを間違って破棄してしまった場合は、そのプールの回復を試みることができます。詳細は、「破棄された ZFS ストレージプールを回復する」を参照してください。
エラー状態のデバイスが含まれるプールを破棄する
プールを破棄するには、そのプールが有効でなくなったことを示すデータをディスクに書き込む必要があります。この状態情報が書き込まれたデバイスは、インポートを実行するときに、アクティブである可能性のあるプールとして表示されなくなります。1 つ以上のデバイスが使用できない状態のときでも、そのプールを破棄できます。ただし、これらの破損したデバイスには、必要な状態情報は書き込まれません。
これらのデバイスが適切な方法で修復されると、新しいプールを作成するときに「潜在的にアクティブ」として報告され、インポートするプールを検索するときに有効なデバイスとして表示されます。エラー状態のデバイスが多いために、プール自体がエラー状態 になる (最上位レベルの仮想デバイスがエラー状態になる) 場合は、このコマンドにより警告が出力され、-f オプションを指定しないとコマンドを完了できません。プールを開かないとデータがプールに格納されているかどうかがわからないときには、このオプションが必要になります。次に例を示します。
# zpool destroy tank
cannot destroy 'tank': pool is faulted
use '-f' to force destruction anyway
# zpool destroy -f tank
|
プールとデバイスの健全性の詳細については、「ZFS ストレージプールの健全性状態を調べる」を参照してください。
インポートツールの詳細については、「ZFS ストレージプールをインポートする」を参照してください。
ZFS ストレージプール内のデバイスを管理する
デバイスに関する基本情報のほとんどは、「ZFS ストレージプールのコンポーネント」に記載してあります。プールを作成したあとに、いくつかのタスクを実行してプール内の物理デバイスを管理できます。
ストレージプールにデバイスを追加する
最上位レベルの新しい仮想デバイスを追加することで、プールに領域を動的に追加できます。プール内のすべてのデータセットは、この領域をすぐに利用できます。新しい仮想デバイスをプールに追加するときは、zpool add コマンドを使用します。次に例を示します。
# zpool add zeepool mirror c2t1d0 c2t2d0
|
仮想デバイスを指定する書式は zpool create コマンドの場合と同じで、同じ規則が適用されます。デバイスは使用中かどうかを判断するために検査されます。また、このコマンドは -f オプションが指定されないかぎり冗長レベルを変更することはできません。ドライランを実行できるように、このコマンドも -n オプションをサポートしています。次に例を示します。
# zpool add -n zeepool mirror c3t1d0 c3t2d0
would update 'zeepool' to the following configuration:
zeepool
mirror
c1t0d0
c1t1d0
mirror
c2t1d0
c2t2d0
mirror
c3t1d0
c3t2d0
|
このコマンドの構文では、ミラー化されたデバイス c3t1d0 と c3t2d0 が zeepool の既存の構成に追加されます。
仮想デバイスがどのように検査されるかの詳細については、「使用中のデバイスを検出する」を参照してください。
例 4–1 ZFS ミラー化構成にディスクを追加する
次の例では、Sun Fire x4500 システムの既存の ZFS ミラー化構成に別のミラーが追加されます。
# zpool status tank
pool: tank
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
mirror ONLINE 0 0 0
c0t1d0 ONLINE 0 0 0
c1t1d0 ONLINE 0 0 0
mirror ONLINE 0 0 0
c0t2d0 ONLINE 0 0 0
c1t2d0 ONLINE 0 0 0
errors: No known data errors
# zpool add tank mirror c0t3d0 c1t3d0
# zpool status tank
pool: tank
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
mirror ONLINE 0 0 0
c0t1d0 ONLINE 0 0 0
c1t1d0 ONLINE 0 0 0
mirror ONLINE 0 0 0
c0t2d0 ONLINE 0 0 0
c1t2d0 ONLINE 0 0 0
mirror ONLINE 0 0 0
c0t3d0 ONLINE 0 0 0
c1t3d0 ONLINE 0 0 0
errors: No known data errors
|
例 4–2 RAID-Z 構成にディスクを追加する
同様にディスクを RAID-Z 構成に追加することができます。次の例は、3 つのディスクから成る 1 台の RAID–Z デバイスを持つストレージプールを、3 つのディスクから成る 2 台の RAID-Z デバイスを持つストレージプールに変換する方法を示しています。
# zpool status
pool: rpool
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
raidz1 ONLINE 0 0 0
c1t2d0 ONLINE 0 0 0
c1t3d0 ONLINE 0 0 0
c1t4d0 ONLINE 0 0 0
errors: No known data errors
# zpool add rpool raidz c2t2d0 c2t3d0 c2t4d0
# zpool status
pool: rpool
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
raidz1 ONLINE 0 0 0
c1t2d0 ONLINE 0 0 0
c1t3d0 ONLINE 0 0 0
c1t4d0 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
c2t2d0 ONLINE 0 0 0
c2t3d0 ONLINE 0 0 0
c2t4d0 ONLINE 0 0 0
errors: No known data errors
|
例 4–3 ZFS ストレージプールにミラー化ログデバイスを追加する
次の例は、ミラー化ストレージプールにミラー化ログデバイスを追加する方法を示しています。ストレージプールでログデバイスを使用する方法の詳細については、「別個の ZFS ログデバイスを設定する」を参照してください。
# zpool status newpool
pool: newpool
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
newpool ONLINE 0 0 0
mirror ONLINE 0 0 0
c1t9d0 ONLINE 0 0 0
c1t10d0 ONLINE 0 0 0
errors: No known data errors
# zpool add newpool log mirror c1t11d0 c1t12d0
# zpool status newpool
pool: newpool
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
newpool ONLINE 0 0 0
mirror ONLINE 0 0 0
c1t9d0 ONLINE 0 0 0
c1t10d0 ONLINE 0 0 0
logs ONLINE 0 0 0
mirror ONLINE 0 0 0
c1t11d0 ONLINE 0 0 0
c1t12d0 ONLINE 0 0 0
errors: No known data errors
|
既存のログデバイスにログデバイスを接続して、ミラー化ログデバイスを作成できます。この操作は、ミラー化されていないストレージプール内にデバイスを接続する操作と同じです。
例 4–4 ZFS ストレージプールにキャッシュデバイスを追加および削除する
ZFS ストレージプールにキャッシュデバイスを追加することや、ZFS ストレージプールからキャッシュデバイスを削除することができます。
zpool add コマンドを使用して、キャッシュデバイスを追加します。次に例を示します。
# zpool add tank cache c2t5d0 c2t8d0
# zpool status tank
pool: tank
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
mirror ONLINE 0 0 0
c2t0d0 ONLINE 0 0 0
c2t1d0 ONLINE 0 0 0
c2t3d0 ONLINE 0 0 0
cache
c2t5d0 ONLINE 0 0 0
c2t8d0 ONLINE 0 0 0
errors: No known data errors
|
キャッシュデバイスは、ミラー化することも、RAID-Z 構成に含めることもできません。
zpool remove コマンドを使用して、キャッシュデバイスを削除します。次に例を示します。
# zpool remove tank c2t5d0 c2t8d0
# zpool status tank
pool: tank
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
mirror ONLINE 0 0 0
c2t0d0 ONLINE 0 0 0
c2t1d0 ONLINE 0 0 0
c2t3d0 ONLINE 0 0 0
errors: No known data errors
|
現時点では、zpool remove コマンドはホットスペアおよびキャッシュデバイスの削除のみをサポートしています。メインのミラー化プール構成に含まれて入るデバイスは、zpool detach コマンドを使用して削除することができます。非冗長デバイスおよび RAID-Z デバイスはプールから削除することはできません。
ZFS ストレージプールでキャッシュデバイスを使用する方法の詳細については、「キャッシュデバイスを使用して ZFS ストレージプールを作成する」を参照してください。
ストレージプール内でデバイスを接続する/切り離す
zpool add コマンド以外に、zpool attach コマンドを使って、新しいデバイスを既存のミラー化されたデバイスまたはミラー化されていないデバイスに追加できます。
ZFS ルートプールのディスクを置き換えるためにディスクの追加および切り離しを行う場合は、「ZFS ルートプールのディスクを置き換える方法」を参照してください。
例 4–5 2 方向ミラー化ストレージプールを 3 方向ミラー化ストレージプールに変換する
この例では、新しいデバイス c2t1d0 を既存のデバイス c1t1d0 に接続すると、既存の 2 方向ミラー zeepool が 3 方向ミラーに変換されます。
# zpool status
pool: zeepool
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
zeepool ONLINE 0 0 0
mirror ONLINE 0 0 0
c0t1d0 ONLINE 0 0 0
c1t1d0 ONLINE 0 0 0
errors: No known data errors
# zpool attach zeepool c1t1d0 c2t1d0
# zpool status
pool: zeepool
state: ONLINE
scrub: resilver completed after 0h0m with 0 errors on Fri Aug 28 14:11:33 2009
config:
NAME STATE READ WRITE CKSUM
zeepool ONLINE 0 0 0
mirror ONLINE 0 0 0
c0t1d0 ONLINE 0 0 0
c1t1d0 ONLINE 0 0 0
c2t1d0 ONLINE 0 0 0 73.5K resilvered
|
たとえば、既存のデバイスが 2 方向ミラーの一部である場合は、新規デバイスを接続すると、3 方向ミラーが作成されます。どのような場合にも、新しいデバイスを接続すると、すぐに再同期化が開始されます。
例 4–6 非冗長な ZFS ストレージプールをミラー化された ZFS ストレージプールに変換する
また、zpool attach コマンドを使用して、非冗長なストレージプールを冗長なストレージプールに変換できます。次に例を示します。
# zpool create tank c0t1d0
# zpool status
pool: tank
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
c0t1d0 ONLINE 0 0 0
errors: No known data errors
# zpool attach tank c0t1d0 c1t1d0
# zpool status
pool: tank
state: ONLINE
scrub: resilver completed after 0h0m with 0 errors on Fri Aug 28 14:13:12 2009
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
mirror ONLINE 0 0 0
c0t1d0 ONLINE 0 0 0
c1t1d0 ONLINE 0 0 0 73.5K resilvered
|
zpool detach コマンドを使用して、ミラー化されたストレージプールからデバイスを切り離すことができます。次に例を示します。
# zpool detach zeepool c2t1d0
|
ただし、データの有効な複製がほかに存在しない場合、この操作は拒否されます。次に例を示します。
# zpool detach newpool c1t2d0
cannot detach c1t2d0: only applicable to mirror and replacing vdevs
|
ストレージプール内のデバイスをオンラインまたはオフラインにする
ZFS では、デバイスを個別にオフラインまたはオンラインにできます。ハードウェアが信頼できない場合または正しく機能しない場合でも、ZFS ではその状態を一時的な状態と見なして、デバイスへのデータの読み取りおよび書き込みを続行します。一時的な状態でない場合には、デバイスをオフラインにして無視されるように設定できます。オフラインのデバイスには、要求はまったく送信されません。
注 –
デバイスを置き換えるときに、オフラインにする必要はありません。
一時的にストレージを切断する必要がある場合は、offline コマンドを使用できます。たとえば、ファイバチャネルスイッチのセットからアレイを物理的に切断し、そのアレイを別のセットに接続する必要がある場合は、ZFS ストレージプールで使用されていたアレイからLUN をオフラインにできます。新しいスイッチのセットでアレイが再接続されて使用できるようになると、続いて同じLUN をオンラインにできます。LUN がオフラインの間にストレージプールに追加されたデータは、オンラインに戻されたあとの LUN と再同期化されます。
このシナリオが可能になるのは、新しいスイッチにストレージが接続されると、そのストレージが場合によっては以前と異なるコントローラを介して該当のシステムに認識され、使用しているプールがRAID-Z 構成またはミラー構成として設定されている場合です。
デバイスをオフラインにする
zpool offline コマンドを使用して、デバイスをオフラインにできます。デバイスがディスクの場合は、パスまたは短縮名を使って指定できます。次に例を示します。
# zpool offline tank c1t0d0
bringing device c1t0d0 offline
|
デバイスをオフラインにするときは、次の点に留意してください。
-
プールをオフラインにすることはできません。エラーになります。たとえば、RAID-Z 構成の 2 つのデバイスをオフラインにしたり、最上位レベルの仮想デバイスをオフラインにしたりすることはできません。
# zpool offline tank c1t0d0
cannot offline c1t0d0: no valid replicas
|
-
デフォルトでは、オフライン状態は持続的です。システムを再起動しても、デバイスはオフラインのままです。
デバイスを一時的にオフラインにするには、zpool offline -t オプションを使用します。次に例を示します。
# zpool offline -t tank c1t0d0
bringing device 'c1t0d0' offline
|
システムを再起動すると、このデバイスは自動的に ONLINE 状態に戻ります。
-
デバイスはオフラインになるとき、ストレージプールから切り離されません。オフラインのデバイスを別のプールで使用しようとすると、元のプールが破棄されたあとであっても、次のようなメッセージが表示されます。
device is part of exported or potentially active ZFS pool. Please see zpool(1M)
|
元のストレージプールを破棄したあとで、オフラインのデバイスを別のストレージプールで使用する場合は、まずデバイスをオンラインに戻してから、元のストレージプールを破棄します。
元のストレージプールを破棄しないで、デバイスを別のストレージプールから使用する場合は、元のストレージプールにある既存のデバイスを別の類似したデバイスに置き換える方法もあります。デバイスを置き換える方法については、「ストレージプール内のデバイスを置き換える」を参照してください。
オフラインのデバイスは、プール状態のクエリー検索を行うと、OFFLINE 状態として表示されます。プール状態のクエリー検索については、「ZFS ストレージプールの状態のクエリー検索を行う」を参照してください。
デバイスの健全性の詳細については、「ZFS ストレージプールの健全性状態を調べる」を参照してください。
デバイスをオンラインにする
オフラインにしたデバイスは、zpool online コマンドを使って復元できます。
# zpool online tank c1t0d0
bringing device c1t0d0 online
|
デバイスがオンラインになると、プールに書き込まれたすべてのデータは、新しく使用可能になったデバイスに再同期化されます。デバイスをオンラインにする操作を利用して、ディスクを置き換えることはできません。デバイスをオフラインにしてから、そのデバイスを置き換えてオンラインにしようとしても、エラー状態のままです。
エラー状態のデバイスをオンラインにしようとすると、次のようなメッセージが表示されます。
# zpool online tank c1t0d0
warning: device 'c1t0d0' onlined, but remains in faulted state
use 'zpool replace' to replace devices that are no longer present
|
また、ディスクでエラーが発生したことを通知するメッセージが fmd から出力されることもあります。
SUNW-MSG-ID: ZFS-8000-D3, TYPE: Fault, VER: 1, SEVERITY: Major
EVENT-TIME: Fri Aug 28 14:08:39 MDT 2009
PLATFORM: SUNW,Sun-Fire-T200, CSN: -, HOSTNAME: neo2
SOURCE: zfs-diagnosis, REV: 1.0
EVENT-ID: 9da778a7-a828-c88a-d679-c9a7873f4808
DESC: A ZFS device failed. Refer to http://sun.com/msg/ZFS-8000-D3 for more information.
AUTO-RESPONSE: No automated response will occur.
IMPACT: Fault tolerance of the pool may be compromised.
REC-ACTION: Run 'zpool status -x' and replace the bad device.
|
エラー状態のデバイスを置き換える方法の詳細については、「見つからないデバイスに関する問題を解決する」を参照してください。
ストレージプールのデバイスをクリアーする
障害のためにデバイスがオフラインになり、エラーが zpool status の出力に表示される場合は、zpool clear コマンドを使ってエラー数をクリアーできます。
引数を指定しないでこのコマンドを実行した場合は、プールに含まれるすべてのデバイスのエラーがクリアーされます。次に例を示します。
1 つ以上のデバイスを指定してこのコマンドを実行した場合は、指定したデバイスに関連付けられたエラーだけがクリアーされます。次に例を示します。
# zpool clear tank c1t0d0
|
zpool エラーのクリアーの詳細については、「一時的なエラーを解消する」を参照してください。
ストレージプール内のデバイスを置き換える
zpool replace コマンドを使用して、ストレージプール内のデバイスを置き換えることができます。
冗長プール内の同じ場所にある別のデバイスでデバイスを物理的に置き換える場合は、置き換えられるデバイスを特定するだけで済みます。ZFS では、それが同じ場所にある別のディスクであることを認識します。たとえば、障害の発生したディスク (c1t1d0) を置き換える場合、そのディスクを取り除き、同じ場所でそれを置き換えるには、次のような構文を使用します。
# zpool replace tank c1t1d0
|
1 つのデバイスしか備えていない非冗長ストレージプール内のデバイスを置き換える場合は、両方のデバイスを指定する必要があります。次に例を示します。
# zpool replace tank c1t1d0 c1t2d0
|
ZFS ルートプールのディスクを置き換える場合は、「ZFS ルートプールのディスクを置き換える方法」を参照してください。
ディスクを置き換えるための基本的な手順は次のとおりです。
-
必要に応じて、zpool offline コマンドでディスクをオフラインにします。
-
置き換えるディスクを取り外します。
-
交換用ディスクを挿入します。
-
zpool replace コマンドを実行します。次に例を示します。
# zpool replace tank c1t1d0
|
-
zpool online コマンドでディスクをオンラインに戻します。
Sun Fire x4500 などの一部のシステムでは、ディスクをオフラインにする前に構成解除する必要があります。このシステム上の同じスロット位置でディスクを置き換える場合には、上記のように zpool replace コマンドを実行するだけで済みます。
このシステム上のディスクを置き換える例については、例 11–1 を参照してください。
ZFS ストレージプール内のデバイスを置き換える場合は、次のことを考慮してください。
-
プールのプロパティー autoreplace をオンに設定した場合、そのプールに以前属していたデバイスと物理的に同じ位置に新しいデバイスが検出されると、そのデバイスは自動的にフォーマットされ、zpool replace コマンドを使用せずに置き換えられます。ハードウェアの種類によっては、この機能を使用できない場合があります。
-
デバイスを置き換えるときは、ミラー化構成または RAID-Z 構成内のすべてのデバイスの最小サイズと等しいかそれ以上のデバイスを使用する必要があります。
-
置き換えたあとのデバイスの方が大きい場合は、置き換えが完了すると、プールの容量が大きくなります。現時点では、拡張された容量を確認するには、プールをエクスポートしてインポートする必要があります。次に例を示します。
# zpool list tank
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
tank 16.8G 94K 16.7G 0% ONLINE -
# zpool replace tank c0t0d0 c0t4d0
# zpool list tank
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
tank 16.8G 112K 16.7G 0% ONLINE -
# zpool export tank
# zpool import tank
# zpool list tank
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
tank 33.9G 114K 33.9G 0% ONLINE -
|
プールのエクスポートとインポートの詳細は、「ZFS ストレージプールを移行する」を参照してください。
-
現時点では、ストレージプールの一部である既存の LUN のサイズが大きくなるときも、拡張された容量を確認するには、エクスポートとインポートの手順を実行する必要があります。
-
大規模プール内で多数のディスクを置き換える場合は、新しいディスク上にデータを再同期化するために時間がかかります。また、ディスクの置き換えの合間に zpool scrub コマンドを実行して、置き換えたあとのデバイスが動作可能であり、データが正しく書き込まれることを確認することもできます。
-
障害の発生したディスクがホットスペアに自動的に置き換えられた場合は、障害の発生したディスクが置き換えられたあとでスペアの切り離しが必要になることがあります。ホットスペアの切り離しについては、「ストレージプール内のホットスペアをアクティブにする/非アクティブにする」を参照してください。
デバイスの置き換えの詳細については、「見つからないデバイスに関する問題を解決する」および「破損したデバイスを交換または修復する」を参照してください。
ストレージプールにホットスペアを指定する
ホットスペア機能を使って、1 つ以上のストレージプールで障害が発生したデバイスまたはエラー状態のデバイスを置き換えるために使用するディスクを指定できます。「ホットスペア」として指定したデバイスはプール内ではアクティブデバイスではありませんが、プールのアクティブデバイスで障害が発生した場合には、そのデバイスがホットスペアに自動的に置き換えられます。
次の方法を使って、デバイスをホットスペアとして指定できます。
プールを作成するときに、デバイスをホットスペアとして指定します。次に例を示します。
# zpool create zeepool mirror c1t1d0 c2t1d0 spare c1t2d0 c2t2d0
# zpool status zeepool
pool: zeepool
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
zeepool ONLINE 0 0 0
mirror ONLINE 0 0 0
c1t1d0 ONLINE 0 0 0
c2t1d0 ONLINE 0 0 0
spares
c1t2d0 AVAIL
c2t2d0 AVAIL
|
プールを作成したあとにプールにホットスペアを追加する方法を使って、ホットスペアを指定します。次に例を示します。
# zpool add zeepool spare c1t3d0 c2t3d0
# zpool status zeepool
pool: zeepool
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
zeepool ONLINE 0 0 0
mirror ONLINE 0 0 0
c1t1d0 ONLINE 0 0 0
c2t1d0 ONLINE 0 0 0
spares
c1t3d0 AVAIL
c2t3d0 AVAIL
|
ホットスペアとして指定したデバイスは、複数のプールで共有できます。次に例を示します。
# zpool create zeepool mirror c1t1d0 c2t1d0 spare c1t2d0 c2t2d0
# zpool create tank raidz c3t1d0 c4t1d0 spare c1t2d0 c2t2d0
|
ホットスペアをストレージプールから削除するときは、zpool remove コマンドを使用します。次に例を示します。
# zpool remove zeepool c1t2d0
# zpool status zeepool
pool: zeepool
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
zeepool ONLINE 0 0 0
mirror ONLINE 0 0 0
c1t1d0 ONLINE 0 0 0
c2t1d0 ONLINE 0 0 0
spares
c1t3d0 AVAIL
|
ストレージプールが現在使用しているホットスペアは、削除できません。
ZFS ホットスペアの使用時には、次の点に留意してください。
-
現時点では、zpool remove コマンドはホットスペアおよびキャッシュデバイスを削除するときにのみ使用できます。
-
プール内でもっとも大きいディスクのサイズと等しいかそれ以上のディスクをスペアとして追加します。小さなディスクをスペアとしてプールに追加することも許可されています。ただし、小さなスペアディスクがアクティブになると、自動的または zpool replace コマンドにより、次のようなエラーで操作が失敗します。
cannot replace disk3 with disk4: device is too small
|
-
ホットスペアをプール間で共有することができます。ただし、プールに使用中の共有スペアがある場合は、zpool export -f (強制) オプションを使用しないとプールをエクスポートできません。プールに使用中の共有スペアがある場合にプールをエクスポートし、別のプールがエクスポートされたプールからその共有スペアを使用しようとするとデータ破壊の可能性がありますが、この動作によって防ぐことができます。プールに使用中の共有スペアがある場合に -f オプションを使用してプールをエクスポートするときは、別のプールがその使用中の共有スペアをアクティブにしようとするとデータ破壊が発生する可能性があることに注意してください。
ストレージプール内のホットスペアをアクティブにする/非アクティブにする
ホットスペアをアクティブにするには、次のようにします。
-
手動で置き換える – zpool replace コマンドを使用して、ストレージプール内で障害の発生したデバイスをホットスペアで置き換えます。
-
自動的に置き換える – FMA エージェントは、エラー状態を受け取ると、プールを検査して使用可能なホットスペアがあるかどうかを確認します。ある場合は、障害の発生したデバイスを使用可能なスペアに置き換えます。
現在使用しているホットスペアで障害が発生した場合、エージェントはそのスペアを切り離し、置き換えた状態を取り消します。続いてエージェントは、別のホットスペアが使用可能であれば、そのスペアを使ってデバイスを置き換えようとします。現時点では、デバイスがシステムから見えなくならないと ZFS 診断エンジンがエラー状態を発行しないので、この機能もその事実に制限されます。
障害の発生したデバイスにアクティブなスペアがある場合にデバイスを物理的に交換するときは、zpool detach コマンドを使用して、置き換える元のデバイスを再度アクティブにして、スペアを切り離すことができます。プールのプロパティー autoreplace をオンに設定した場合は、新しいデバイスが挿入されオンライン処理が完了すると、スペアは自動的に切り離されてスペアプールに戻されます。
デバイスをホットスペアに手動で置き換えるときは、zpool replace コマンドを使用します。次に例を示します。
# zpool replace zeepool c2t1d0 c2t3d0
# zpool status zeepool
pool: zeepool
state: ONLINE
scrub: resilver completed after 0h0m with 0 errors on Fri Aug 28 14:16:04 2009
config:
NAME STATE READ WRITE CKSUM
zeepool ONLINE 0 0 0
mirror ONLINE 0 0 0
c1t2d0 ONLINE 0 0 0
spare ONLINE 0 0 0
c2t1d0 ONLINE 0 0 0
c2t3d0 ONLINE 0 0 0 76.5K resilvered
spares
c2t3d0 INUSE currently in use
errors: No known data errors
|
ホットスペアが使用可能な場合、エラー状態のデバイスは自動的に置き換えられます。次に例を示します。
# zpool status -x
pool: zeepool
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-D3
scrub: resilver completed after 0h12m with 0 errors on Fri Aug 28 14:18:16 2009
config:
NAME STATE READ WRITE CKSUM
zeepool DEGRADED 0 0 0
mirror DEGRADED 0 0 0
c1t2d0 ONLINE 0 0 0
spare DEGRADED 0 0 0
c2t1d0 UNAVAIL 0 0 0 cannot open
c2t3d0 ONLINE 0 0 0 58.5K resilvered
spares
c2t3d0 INUSE currently in use
errors: No known data errors
|
現時点では、次の 3 つの方法を使って、ホットスペアを非アクティブにできます。
エラー状態のデバイスを置き換えたあとに、zpool detach コマンドを使ってホットスペアをスペアセットへ戻します。次に例を示します。
# zpool detach zeepool c2t3d0
# zpool status zeepool
pool: zeepool
state: ONLINE
scrub: resilver completed with 0 errors on Fri Aug 28 14:21:02 2009
config:
NAME STATE READ WRITE CKSUM
zeepool ONLINE 0 0 0
mirror ONLINE 0 0 0
c1t2d0 ONLINE 0 0 0
c2t1d0 ONLINE 0 0 0
spares
c2t3d0 AVAIL
errors: No known data errors
|
ZFS ストレージプールのプロパティーの管理
zpool get コマンドを使用して、プールのプロパティーの情報を表示できます。次に例を示します。
# zpool get all mpool
NAME PROPERTY VALUE SOURCE
mpool size 33.8G -
mpool used 5.91G -
mpool available 27.8G -
mpool capacity 17% -
mpool altroot - default
mpool health ONLINE -
mpool guid 17361998391267837263 -
mpool version 10 default
mpool bootfs mpool/ROOT/zfs2BE local
mpool delegation on default
mpool autoreplace on local
mpool cachefile - default
mpool failmode continue local
mpool listsnapshots on default
|
ストレージプールのプロパティーは zpool set コマンドで設定できます。次に例を示します。
# zpool set autoreplace=on mpool
# zpool get autoreplace mpool
NAME PROPERTY VALUE SOURCE
mpool autoreplace on default
|
表 4–1 ZFS プールのプロパティーの説明
|
プロパティー名
|
種類
|
デフォルト値
|
説明
|
|
altroot
|
文字列
|
off
|
代替ルートディレクトリを示します。設定されている場合、プール内のすべてのマウントポイントの先頭にこのディレクトリが付加されます。このプロパティーは、不明なプールを調べるときやマウントポイントが信頼できない場合、または通常のパスが有効でない代替ブート環境で使用できます。
|
|
available
|
数値
|
なし
|
読み取り専用の値。プール内で使用できるストレージ容量を示します。
このプロパティーは、列の短縮名 avail を使用して参照することもできます。
|
|
autoreplace
|
ブール型
|
off
|
自動デバイス交換を制御します。オフに設定されている場合、管理者が zpool replace コマンドを使ってデバイス交換を開始する必要があります。オンに設定されている場合、そのプールに以前属していたデバイスと物理的に同じ位置にある新しいデバイスは、いずれも自動的にフォーマットされ、置き換えられます。デフォルトの動作はオフです。このプロパティーは、列の短縮名 replace を使用して参照することもできます。
|
|
bootfs
|
ブール型
|
なし
|
ルートプールのデフォルトのブート可能データセットを示します。このプロパティーは主にインストールプログラムとアップグレードプログラムで設定されます。
|
|
capacity
|
数値
|
なし
|
読み取り専用の値。使用されているプール領域の割合を示します。
このプロパティーは、列の短縮名 cap を使用して参照することもできます。
|
|
委託
|
ブール型
|
on
|
データセットに定義されているアクセス権を非特権ユーザーに付与できるかどうかを制御します。詳細は、第 9 章ZFS 委任管理を参照してください。
|
|
failmode
|
文字列
|
wait
|
壊滅的なプール障害が発生した場合のシステムの動作を制御します。通常は、配下のストレージデバイスへの接続が失われた場合や、プール内のすべてのデバイスに障害が発生した場合に、このような状況になります。このような場合の動作は、次のいずれかの値によって決定されます。
-
wait – デバイスへの接続を復元し、zpool clear コマンドでエラーを解決するまで、すべての入出力アクセスをブロックします。これはデフォルトの動作です。
-
continue – 新しい書き込み入出力要求には EIO を返しますが、正常な残りのデバイスに対する読み取りは許可します。まだディスクにコミットされていない書き込み要求はブロックされます。デバイスを再接続するか交換したあと、zpool clear コマンドでエラーを解決する必要があります。
-
panic – コンソールにメッセージを出力し、システムクラッシュダンプを生成します。
|
|
guid
|
文字列
|
なし
|
読み取り専用プロパティー。プールの一意の識別子を示します。
|
|
health
|
文字列
|
なし
|
読み取り専用プロパティー。プールの現在の健全性を ONLINE、DEGRADED、FAULTED、OFFLINE、REMOVED、または UNAVAIL のいずれかで示します。
|
|
listsnapshots
|
文字列
|
off
|
このプールに関連付けられているスナップショット情報が zfs list コマンドによって表示されるようにするかどうかを制御します。このプロパティーが無効な場合、zfs list -t snapshot コマンドを使用すればスナップショット情報を表示できます。デフォルト値は on です。
|
|
size
|
数値
|
なし
|
読み取り専用プロパティー。ストレージプールの合計サイズを示します。
|
|
used
|
数値
|
なし
|
読み取り専用プロパティー。プール内で使用されているストレージ容量を示します。
|
|
version
|
数値
|
なし
|
プールの現在のディスク上バージョンを示します。このプロパティーの値を増やすことはできても、減らすことはできません。プールを更新する方法としては zpool upgrade コマンドをお勧めしますが、下位互換性のために特定のバージョンが必要な場合には、このプロパティーを使用できます。このプロパティーには、1 から zpool upgrade -v コマンドで報告される現在のバージョンまでの任意の数値を設定できます。current 値は、サポートされている最新バージョンを表す別名です。
|
ZFS ストレージプールの状態のクエリー検索を行う
zpool list コマンドでは、いくつかの方法でプール状態に関する情報を要求できます。主に 3 つのカテゴリの情報を要求できます。 基本的な使用状況の情報、入出力統計、および健全性状態です。ここでは、3 種類のストレージプール情報のすべてについて説明します。
基本的な ZFS ストレージプールの情報を表示する
zpool list コマンドを使用して、プールに関する基本的な情報を表示できます。
すべてのストレージプールの情報を表示する
引数を指定しないでコマンドを実行した場合は、システム上のすべてのプールについて、すべてのフィールドが表示されます。次に例を示します。
# zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
tank 80.0G 22.3G 47.7G 28% ONLINE -
dozer 1.2T 384G 816G 32% ONLINE -
|
この出力には、次の情報が表示されます。
-
NAME
-
プールの名前。
-
SIZE
-
プールの合計サイズ。最上位レベルにあるすべての仮想デバイスの合計サイズになります。
-
USED
-
すべてのデータセットおよび内部メタデータから割り当てられた容量。この容量は、ファイルシステムレベルで報告される容量とは一致しません。
使用可能なファイルシステムの容量を確認する方法の詳細については、「ZFS の領域の計上」を参照してください。
-
AVAILABLE
-
プール内で割り当てられていない容量。
-
CAPACITY (CAP)
-
使用されている容量。総容量に対するパーセントで表現されます。
-
HEALTH
-
プールの現在の健全性状態。
プールの健全性の詳細については、「ZFS ストレージプールの健全性状態を調べる」を参照してください。
-
ALTROOT
-
プールの代替ルート (存在する場合)。
代替ルートプールの詳細については、「ZFS 代替ルートプールを使用する」を参照してください。
プール名を指定して、特定のプールの統計を収集することもできます。次に例を示します。
# zpool list tank
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
tank 80.0G 22.3G 47.7G 28% ONLINE -
|
特定のストレージプールの統計を表示する
-o オプションを使用して、特定の統計を要求することができます。このオプションを使用して、カスタムレポートを出力したり、必要な情報をすばやく表示したりできます。たとえば、各プールの名前とサイズだけを表示する場合は、次の構文を使用します。
# zpool list -o name,size
NAME SIZE
tank 80.0G
dozer 1.2T
|
列の名前は、「すべてのストレージプールの情報を表示する」で説明したプロパティーに対応しています。
ZFS ストレージプールの出力をスクリプトで使えるようにする
zpool list コマンドのデフォルト出力は、読みやすいように設計されているため、シェルスクリプトの一部として使いやすい状態ではありません。このコマンドをプログラムで使いやすくするために、-H オプションを使用して、列見出しを非表示にし、空白文字の代わりにタブでフィールドを区切ることができます。たとえば、システム上のすべてのプール名を単純なリストとして要求するときは、次のようにします。
# zpool list -Ho name
tank
dozer
|
別の例です。
# zpool list -H -o name,size
tank 80.0G
dozer 1.2T
|
ZFS ストレージプールのコマンド履歴を表示する
ZFS は、プールの状態に関する情報を変更する zfs コマンドと zpool コマンドが正常に実行された場合にだけ自動的にログを記録します。この情報は、zpool history コマンドを使用して表示することができます。
例えば、ルートプールに関するコマンド出力を表示する場合は、次の構文を使用します。
# zpool history
History for 'rpool':
2009-05-07.13:51:00 zpool create -f -o failmode=continue -R /a -m legacy -o cachefile=
/tmp/root/etc/zfs/zpool.cache rpool c1t0d0s0
2009-05-07.13:51:01 zfs set canmount=noauto rpool
2009-05-07.13:51:02 zfs set mountpoint=/rpool rpool
2009-05-07.13:51:02 zfs create -o mountpoint=legacy rpool/ROOT
2009-05-07.13:51:03 zfs create -b 8192 -V 2048m rpool/swap
2009-05-07.13:51:04 zfs create -b 131072 -V 1024m rpool/dump
2009-05-07.13:51:09 zfs create -o canmount=noauto rpool/ROOT/snv_114
2009-05-07.13:51:10 zpool set bootfs=rpool/ROOT/snv_114 rpool
2009-05-07.13:51:10 zfs set mountpoint=/ rpool/ROOT/snv_114
2009-05-07.13:51:11 zfs set canmount=on rpool
2009-05-07.13:51:12 zfs create -o mountpoint=/export rpool/export
2009-05-07.13:51:12 zfs create rpool/export/home
|
システムでこれと同じような出力を利用して、エラーシナリオのトラブルシューティングのために実行された ZFS コマンドセットを正確に特定することができます。
履歴ログの特徴を次に示します。
-
ログを無効にすることはできません。
-
ログは永続的にディスクに保存されます。つまり、ログはシステムの再起動後も保持されます。
-
ログはリングバッファーとして実装されます。最小サイズは 128K バイトです。最大サイズは 32M バイトです。
-
小さめのプールの場合、最大サイズはプールサイズの 1% を上限とします。このサイズはプールの作成時に自動的に決定されます。
-
管理不要です。つまり、ログのサイズを調整したり、ログの場所を変更したりする必要はありません。
特定のストレージプールのコマンド履歴を確認するには、次のような構文を使用します。
# zpool history mypool
History for 'mypool':
2009-06-02.10:56:54 zpool create mypool mirror c0t4d0 c0t5d0
2009-06-02.10:57:31 zpool add mypool spare c0t6d0
2009-06-02.10:57:54 zpool offline mypool c0t5d0
2009-06-02.10:58:02 zpool online mypool c0t5d0
|
-l オプションを使用して、ユーザー名、ホスト名、および操作が実行されたゾーンを含む長形式を表示します。次に例を示します。
# zpool history -l mypool
History for 'mypool':
2009-06-02.10:56:54 zpool create mypool mirror c0t4d0 c0t5d0 [user root on neo:global]
2009-06-02.10:57:31 zpool add mypool spare c0t6d0 [user root on neo:global]
2009-06-02.10:57:54 zpool offline mypool c0t5d0 [user root on neo:global]
2009-06-02.10:58:02 zpool online mypool c0t5d0 [user root on neo:global]
|
-i オプションを使用して、診断に利用できる内部イベント情報を表示します。次に例を示します。
# zpool history -i mypool
History for 'mypool':
2009-06-02.10:56:54 zpool create mypool mirror c0t4d0 c0t5d0
2009-06-02.10:57:31 zpool add mypool spare c0t6d0
2009-06-02.10:57:54 zpool offline mypool c0t5d0
2009-06-02.10:58:02 zpool online mypool c0t5d0
2009-06-02.11:02:20 [internal create txg:23] dataset = 24
2009-06-02.11:02:20 [internal property set txg:24] mountpoint=/data dataset = 24
2009-06-02.11:02:20 zfs create -o mountpoint=/data mypool/data
2009-06-02.11:02:34 [internal create txg:26] dataset = 30
2009-06-02.11:02:34 zfs create mypool/data/datab
|
ZFS ストレージプールの入出力統計を表示する
プールまたは特定の仮想デバイスの入出力統計を要求する場合は、zpool iostat コマンドを使用します。iostat コマンドと同様に、このコマンドでは、その時点までに発生したすべての I/O アクティビティーの静的なスナップショットと、指定した間隔ごとに更新される統計を表示できます。次の統計が報告されます。
-
USED CAPACITY
-
プールまたはデバイスに現在格納されているデータの量。この数値は、実装の内部的な詳細のために、実際のファイルシステムで利用できる容量とわずかに異なります。
プール領域とデータセット領域の相違点の詳細については、「ZFS の領域の計上」を参照してください。
-
AVAILABLE CAPACITY
-
プールまたはデバイスで使用できる容量。used 統計と同様に、この容量はデータセットで使用できる容量と多少異なります。
-
READ OPERATIONS
-
プールまたはデバイスに送信された入出力読み取り操作の数 (メタデータ要求を含む)。
-
WRITE OPERATIONS
-
プールまたはデバイスに送信された入出力書き込み操作の数。
-
READ BANDWIDTH
-
すべての読み取り操作 (メタデータを含む) の帯域幅。単位/秒として表現されます。
-
WRITE BANDWIDTH
-
すべての書き込み操作の帯域幅。単位/秒として表現されます。
プール全体の統計を表示する
オプションを指定しないで zpool iostat コマンドを実行すると、システム上のすべてのプールを起動してから累積された統計が表示されます。次に例を示します。
# zpool iostat
capacity operations bandwidth
pool used avail read write read write
---------- ----- ----- ----- ----- ----- -----
tank 100G 20.0G 1.2M 102K 1.2M 3.45K
dozer 12.3G 67.7G 132K 15.2K 32.1K 1.20K
|
これらの統計は起動してから累積されたものなので、プールのアイドル状態が相対的に多い場合には、帯域幅が低く表示されることがあります。間隔を指定すれば、帯域幅の現在の使用状況をより正確に表示できます。次に例を示します。
# zpool iostat tank 2
capacity operations bandwidth
pool used avail read write read write
---------- ----- ----- ----- ----- ----- -----
tank 100G 20.0G 1.2M 102K 1.2M 3.45K
tank 100G 20.0G 134 0 1.34K 0
tank 100G 20.0G 94 342 1.06K 4.1M
|
この例のコマンドでは、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
tank used avail read write read write
---------- ----- ----- ----- ----- ----- -----
mirror 20.4G 59.6G 0 22 0 6.00K
c1t0d0 - - 1 295 11.2K 148K
c1t1d0 - - 1 299 11.2K 148K
---------- ----- ----- ----- ----- ----- -----
total 24.5K 149M 0 22 0 6.00K
|
仮想デバイスに基づいて入出力統計を表示するときは、次の 2 つの点が重要になります。
-
まず、容量の使用状況を要求できるのは、最上位レベルの仮想デバイスだけです。ミラーおよび RAID-Z 仮想デバイスに領域がどのように割り当てられるかは、実装に固有なので、1 つの数値として表現するのは簡単ではありません。
-
次に、予期したとおりの正確な数値にならないことがあります。特に、RAID-Z デバイスとミラー化されたデバイスの統計は、正確に一致することがありません。この相違は、プールが作成された直後に、特に顕著になります。プールが作成されるときに大量の入出力がディスクに直接実行されますが、これらがミラーレベルでは計上されないためです。時間が経過するにつれて、これらの数値は次第に一致していくはずです。ただし、接続がなく応答のない、つまりオフラインのデバイスが、この数値に影響する可能性があります。
仮想デバイスの統計を検査するときにも、同じオプション (間隔とカウント) を使用できます。
ZFS ストレージプールの健全性状態を調べる
ZFS では、プールとデバイスの健全性を検査する方法が統合されています。プールの健全性は、そのすべてのデバイスの状態から判断されます。この状態情報は、zpool status コマンドを使って表示されます。また、発生する可能性のあるプールとデバイスの障害も fmd によって報告され、システムコンソールと /var/adm/messages ファイルに表示されます。この節では、プールとデバイスの健全性を確認する方法について説明します。この章では、健全でないプールを修復または回復する方法については説明しません。障害追跡およびデータの回復の詳細については、第 11 章ZFS のトラブルシューティングとデータの回復を参照してください。
各デバイスは、次のいずれかの状態になることができます。
-
ONLINE
-
デバイスは正常に機能しています。一時的なエラーがいくつか発生している可能性はありますが、それらを除けば正常に動作しています。
-
DEGRADED
-
仮想デバイスに障害が発生していますが、引き続き利用できます。この状態は、ミラーデバイスまたは RAID-Z デバイスを構成するデバイスのうち、1 つ以上のデバイスが失われたときによく発生します。プールの耐障害性が損なわれる可能性があります。別のデバイスで続けて障害が発生した場合には、回復できない状態になることがあります。
-
FAULTED
-
仮想デバイスへのアクセスが完全にできない状態です。この状態は通常、このデバイスで大きな障害が発生していて、デバイスに対するデータの送受信ができないことを示しています。最上位レベルの仮想デバイスがこの状態の場合には、そのプールへのアクセスはまったくできません。
-
OFFLINE
-
管理者がその仮想デバイスを明示的にオフラインにしています。
-
UNAVAILABLE
-
デバイスまたは仮想デバイスを開くことができません。場合によっては、デバイスが UNAVAILABLE であるプールが DEGRADED モードで表示されることがあります。最上位レベルの仮想デバイスが使用できない場合は、そのプールのデバイスには一切アクセスできません。
-
REMOVED
-
システムの稼働中にデバイスが物理的に取り外されました。デバイスの取り外しの検出はハードウェアに依存しており、一部のプラットフォームではサポートされていない場合があります。
プールの健全性は、最上位レベルのすべての仮想デバイスから判断されます。すべての仮想デバイスが ONLINE の場合は、プールも ONLINE になります。仮想デバイスのいずれかが DEGRADED または UNAVAILABLE の場合は、プールも DEGRADED になります。最上位レベルの仮想デバイスが FAULTED または OFFLINE の場合は、プールも FAULTED になります。エラー状態のプールには一切アクセスできません。必要なデバイスが接続または修復されるまで、データは回復できません。機能低下状態のプールは引き続き動作しますが、プールがオンラインの場合と同じレベルのデータ冗長性やデータスループットを実現できない可能性があります。
ストレージプールの基本的な健全性状態
プールの健全性状態の概要をもっとも簡単に確認する方法は、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: none requested
config:
NAME STATE READ WRITE CKSUM
tank DEGRADED 0 0 0
mirror DEGRADED 0 0 0
c1t0d0 FAULTED 0 0 0 cannot open
c1t1d0 ONLINE 0 0 0
errors: No known data errors
|
この出力には、プールが現在の状態になった理由が詳細に表示されます。たとえば、問題に関するわかりやすい説明や、詳細な情報を入手するためのナレッジ記事へのリンクが表示されます。ナレッジ記事では、現在の問題から回復するための最良の方法に関する最新情報を提供しています。構成に関する詳細な情報を利用すれば、どのデバイスが損傷しているかや、プールをどのように修復するかを確認できるはずです。
上の例では、エラー状態のデバイスを置き換えるべきです。デバイスを置き換えたあとに、zpool online コマンドを使用してデバイスをオンラインに戻します。次に例を示します。
# zpool online tank c1t0d0
Bringing device c1t0d0 online
# zpool status -x
all pools are healthy
|
プールにオフラインのデバイスがある場合は、コマンドの出力から問題のプールを確認できます。次に例を示します。
# zpool status -x
pool: tank
state: DEGRADED
status: One or more devices has been taken offline by the adminstrator.
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: none requested
config:
NAME STATE READ WRITE CKSUM
tank DEGRADED 0 0 0
mirror DEGRADED 0 0 0
c1t0d0 ONLINE 0 0 0
c1t1d0 OFFLINE 0 0 0
errors: No known data errors
|
READ 列と WRITE 列には、そのデバイスで発生した入出力エラーの数が表示されます。CKSUM 列には、そのデバイスで発生した訂正不可能なチェックサムエラーの数が表示されます。これらのエラー数から、デバイス障害が発生する可能性があることがわかることがあります。その場合には、訂正のための対応がいくつか必要になります。最上位レベルの仮想デバイスでエラー数があると報告された場合、データの一部にアクセスできないことがあります。エラー数から既知のデータエラーがわかることがあります。
前記の出力例では、オフラインのデバイスでデータエラーは発生していません。
エラー状態のプールとデータを診断および修復する方法の詳細については、第 11 章ZFS のトラブルシューティングとデータの回復を参照してください。
ZFS ストレージプールを移行する
ストレージプールをマシン間で移動しなければならないことがあります。この作業を行うには、ストレージデバイスを元のマシンから切断して、移動先のマシンに再接続する必要があります。この作業は、ケーブルをデバイスに物理的に接続し直すか、または複数のポートを持つデバイス (SAN 上のデバイスなど) を使用する方法で、行うことができます。ZFS では、エンディアンの異なるマシン間でも、一方のマシンのプールをエクスポートして移行先のマシンにインポートできます。異なるストレージプール間 (異なるマシン上にある場合を含む) でファイルシステムを複製または移行する方法については、「ZFS データを送信および受信する」を参照してください。
ZFS ストレージプールの移行を準備する
ストレージプールは、移行する準備ができていることを示すために、明示的にエクスポートすることをお勧めします。この操作を行うことで、書き込まれていないデータがすべてディスクにフラッシュされ、データがディスクに書き込まれてエクスポート済みであることが示され、プールに関するすべての情報がシステムから削除されます。
プールを明示的にエクスポートする代わりに、ディスクを手動で取り外した場合でも、そのプールを別のシステムにインポートすることはできます。ただし、最後の数秒間のデータトランザクションが失われる可能性があります。この場合、デバイスが存在しないために、プールが元のマシン上でエラー状態として表示されます。デフォルトでは、明示的にエクスポートしていないプールをインポートしようとすると、インポート先のマシンから拒否されます。アクティブなプールを誤ってインポートしてしまうことを防ぐ (プールを構成するネットワークに接続されたストレージが別のシステムでまだ使用されていることがないようにする) には、この状態が必要になります。
ZFS ストレージプールをエクスポートする
プールをエクスポートするには、zpool export コマンドを使用します。次に例を示します。
このコマンドを実行すると、プール tank はシステムから認識されなくなります。このコマンドは、プールの中にマウントされたファイルシステムがある場合は、すべてのマウントを解除してから、次の処理を実行しようとします。いずれかのファイルシステムのマウント解除に失敗した場合は、-f オプションを使用して強制的にマウントを解除できます。次に例を示します。
# zpool export tank
cannot unmount '/export/home/eschrock': Device busy
# zpool export -f tank
|
エクスポート時にデバイスが使用できない場合は、それらのディスクは明示的にエクスポートすることを指定できません。これらのデバイスのいずれかをあとでシステムに接続した場合には、動作中のデバイスがなくても「潜在的にアクティブ」として表示されます。ZFS ボリュームがプール内で使用中である場合は、-f オプションを使用してもそのプールをエクスポートすることはできません。ZFS ボリュームが含まれているプールをエクスポートするには、最初にそのボリュームのコンシューマがすべてアクティブでなくなっていることを確認してください。
ZFS ボリュームの詳細については、「ZFS ボリューム」を参照してください。
インポートできるストレージプールを判断する
プールをシステムから削除したら (エクスポートするか、デバイスを強制的に取り外す)、それらのデバイスをインポート先のシステムに接続します。ZFS では、一部のデバイスだけが使用できる状況に対応できることもありますが、システム間でプールを移動するときは、必ずすべてのデバイスを移動してください。デバイスは、同じデバイス名で接続されている必要はありません。デバイスを移動した場合またはデバイスの名前を変更した場合には、それらが自動的に検出され、構成がそれに合わせて調整されます。インポートできるプールを確認するには、zpool import コマンドをオプションを指定しないで実行します。次に例を示します。
# zpool import
pool: tank
id: 3778921145927357706
state: ONLINE
action: The pool can be imported using its name or numeric identifier.
config:
tank ONLINE
mirror ONLINE
c1t0d0 ONLINE
c1t1d0 ONLINE
|
この例では、プール tank をターゲットシステムにインポートできます。各プールは、名前および一意の数値識別子を使って識別されます。インポートできるプールが複数あって、それらが同じ名前の場合でも、数値識別子を使ってそれらを識別することができます。
zpool import コマンドは、zpool status コマンドと同様に、Web 上のナレッジ記事を参照して、プールのインポートを妨げている問題の修復手順に関する最新情報を入手します。この場合、ユーザーはプールを強制的にインポートできます。ただし、別のシステムがストレージネットワーク経由で使用しているプールをインポートすると、両方のシステムが同じストレージに書き込もうとするため、データの破壊とパニックが発生する可能性があります。プール内の一部のデバイスが使用できない状態であるのに、代わりに使用できるプールを提供できるだけの冗長性がない場合には、そのプールは DEGRADED 状態であると表示されます。次に例を示します。
# zpool import
pool: tank
id: 3778921145927357706
state: DEGRADED
status: One or more devices are missing from the 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-2Q
config:
tank DEGRADED
mirror DEGRADED
c1t0d0 UNAVAIL cannot open
c1t1d0 ONLINE
|
この例では、最初のディスクが損傷しているか見つかりません。ただし、ミラー化されたデータにまだアクセスできるため、このプールをインポートすることはできます。エラー状態または見つからないデバイスの数が多すぎる場合、そのプールはインポートできません。次に例を示します。
# zpool import
pool: dozer
id: 12090808386336829175
state: FAULTED
action: The pool cannot be imported. Attach the missing
devices and try again.
see: http://www.sun.com/msg/ZFS-8000-6X
config:
raidz FAULTED
c1t0d0 ONLINE
c1t1d0 FAULTED
c1t2d0 ONLINE
c1t3d0 FAULTED
|
この例では、RAID-Z 仮想デバイスのうち、2 つのディスクが見つかりません。つまり、プールの再構築に必要な冗長データを利用できません。場合によっては、完全な構成を判断するために必要なデバイスが存在しないことがあります。この場合、ZFS ではほかにどのようなデバイスがプールを構成していたかを判断できませんが、その状況についてできるだけ多くの情報を報告しようとします。次に例を示します。
# zpool import
pool: dozer
id: 12090808386336829175
state: FAULTED
status: One or more devices are missing from the system.
action: The pool cannot be imported. Attach the missing
devices and try again.
see: http://www.sun.com/msg/ZFS-8000-6X
config:
dozer FAULTED missing device
raidz ONLINE
c1t0d0 ONLINE
c1t1d0 ONLINE
c1t2d0 ONLINE
c1t3d0 ONLINE
Additional devices are known to be part of this pool, though their
exact configuration cannot be determined.
|
ZFS ストレージプールを別のディレクトリから検索する
デフォルトでは、zpool import コマンドは、/dev/dsk ディレクトリに含まれるデバイスだけを検索します。デバイスが別のディレクトリに存在するか、またはファイルに基づくプールを使用している場合は、-d オプションを使用して、別のディレクトリを検索する必要があります。次に例を示します。
# zpool create dozer mirror /file/a /file/b
# zpool export dozer
# zpool import -d /file
pool: dozer
id: 10952414725867935582
state: ONLINE
action: The pool can be imported using its name or numeric identifier.
config:
dozer ONLINE
mirror ONLINE
/file/a ONLINE
/file/b ONLINE
# zpool import -d /file dozer
|
デバイスが複数のディレクトリに存在する場合には、複数の -d オプションを指定できます。
ZFS ストレージプールをインポートする
インポートできるプールを確認したら、zpool import コマンドの引数にプールの名前または数値識別子を指定してインポートできます。次に例を示します。
インポートできるプールが複数存在し、それらが同じ名前を持っている場合でも、数値識別子を使ってインポートするプールを指定できます。次に例を示します。
# zpool import
pool: dozer
id: 2704475622193776801
state: ONLINE
action: The pool can be imported using its name or numeric identifier.
config:
dozer ONLINE
c1t9d0 ONLINE
pool: dozer
id: 6223921996155991199
state: ONLINE
action: The pool can be imported using its name or numeric identifier.
config:
dozer ONLINE
c1t8d0 ONLINE
# zpool import dozer
cannot import 'dozer': more than one matching pool
import by numeric ID instead
# zpool import 6223921996155991199
|
プール名が既存のプール名と重複する場合は、別の名前でインポートできます。次に例を示します。
# zpool import dozer zeepool
|
このコマンドは、エクスポート済みのプール dozer を新しい名前 zeepool を使ってインポートします。プールを明示的にエクスポートしていない場合は、別のシステムでまだ使用されているプールを誤ってインポートすることを防ぐためにインポートできません。-f フラグを使用する必要があります。次に例を示します。
# zpool import dozer
cannot import 'dozer': pool may be in use on another system
use '-f' to import anyway
# zpool import -f dozer
|
-R オプションを使用して、プールを代替ルートでインポートすることもできます。代替ルートプールの詳細については、「ZFS 代替ルートプールを使用する」を参照してください。
破棄された ZFS ストレージプールを回復する
zpool import -D コマンドを使用して、破棄されたストレージプールを回復できます。次に例を示します。
# zpool destroy tank
# zpool import -D
pool: tank
id: 3778921145927357706
state: ONLINE (DESTROYED)
action: The pool can be imported using its name or numeric identifier. The
pool was destroyed, but can be imported using the '-Df' flags.
config:
tank ONLINE
mirror ONLINE
c1t0d0 ONLINE
c1t1d0 ONLINE
|
この zpool import の出力では、次の状態情報からこのプールが破棄されたプールであることがわかります。
state: ONLINE (DESTROYED)
|
破棄されたプールを回復するには、回復するプールに対して zpool import -D コマンドを再度実行します。次に例を示します。
# zpool import -D tank
# zpool status tank
pool: tank
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
mirror ONLINE 0 0 0
c1t0d0 ONLINE 0 0 0
c1t1d0 ONLINE 0 0 0
errors: No known data errors
|
破棄されたプール内のいずれかのデバイスがエラー状態または使用できない場合でも、-f オプションを含めることによって、破棄されたプールを別の方法で回復できることがあります。このような場合には、機能が低下したプールをインポートしてから、デバイスの障害の修正を試みてください。次に例を示します。
# zpool destroy dozer
# zpool import -D
pool: dozer
id:
state: DEGRADED (DESTROYED)
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: resilver completed after 0h0m with 0 errors on Fri Aug 28 09:33:56 2009
config:
NAME STATE READ WRITE CKSUM
dozer DEGRADED 0 0 0
raidz2 DEGRADED 0 0 0
c2t8d0 ONLINE 0 0 0
c2t9d0 ONLINE 0 0 0
c2t10d0 ONLINE 0 0 0
c2t11d0 UNAVAIL 0 35 1 cannot open
c2t12d0 ONLINE 0 0 0
errors: No known data errors
# zpool import -Df dozer
# zpool status -x
pool: dozer
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: resilver completed after 0h0m with 0 errors on Fri Aug 28 09:33:56 2009
config:
NAME STATE READ WRITE CKSUM
dozer DEGRADED 0 0 0
raidz2 DEGRADED 0 0 0
c2t8d0 ONLINE 0 0 0
c2t9d0 ONLINE 0 0 0
c2t10d0 ONLINE 0 0 0
c2t11d0 UNAVAIL 0 37 0 cannot open
c2t12d0 ONLINE 0 0 0
errors: No known data errors
# zpool online dozer c2t11d0
Bringing device c2t11d0 online
# zpool status -x
all pools are healthy
|
ZFS ストレージプールをアップグレードする
Solaris 10 6/06 リリースなど、以前の Solaris リリースの ZFS ストレージプールがある場合には、zpool upgrade コマンドを使ってそのプールをアップグレードすれば、Solaris 10 11/06 リリースのプール機能を利用することができます。また、古いバージョンのプールを実行している場合、zpool status コマンドによって通知されます。次に例を示します。
# zpool status
pool: test
state: ONLINE
status: The pool is formatted using an older on-disk format. The pool can
still be used, but some features are unavailable.
action: Upgrade the pool using 'zpool upgrade'. Once this is done, the
pool will no longer be accessible on older software versions.
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
test ONLINE 0 0 0
c1t27d0 ONLINE 0 0 0
errors: No known data errors
|
次の構文を使って、特定のバージョンやサポートされるリリースに関する追加情報を確認できます。
# zpool upgrade -v
This system is currently running ZFS version 3.
The following versions are supported:
VER DESCRIPTION
--- --------------------------------------------------------
1 Initial ZFS version
2 Ditto blocks (replicated metadata)
3 Hot spares and double parity RAID-Z
For more information on a particular version, including supported releases, see:
http://www.opensolaris.org/os/community/zfs/version/N
Where 'N' is the version number.
|
これで、zpool upgrade コマンドを実行してすべてのプールをアップグレードできます。次に例を示します。
注 –
プールを新しい ZFS バージョンにアップグレードすると、古い ZFS バージョンを実行しているシステムのプールにアクセスできなくなります。