Oracle Solaris ZFS 管理ガイド

第 4 章 Oracle Solaris ZFS ストレージプールの管理

この章では、Oracle Solaris ZFS でストレージプールを作成および管理する方法について説明します。

この章は、次の節で構成されます。

ZFS ストレージプールのコンポーネント

以降の節では、次のストレージプールのコンポーネントについて詳しく説明します。

ZFS ストレージプール内でディスクを使用する

ストレージプールのもっとも基本的な要素は、物理ストレージです。128M バイト以上のサイズであれば、任意のブロック型デバイスを物理ストレージとして利用できます。このデバイスは通常、/dev/dsk ディレクトリとしてシステムから認識されるハードドライブです。

ディスク全体 (c1t0d0) または個別のスライス (c0t0d0s7) をストレージデバイスとして利用できます。推奨される操作モードは、ディスク全体を使用する方法です。この場合、ディスクが特別なフォーマットである必要はありません。ZFS によって、EFI ラベルを使用する 1 つの大きなスライスのディスクとしてフォーマットされます。この方法を使用した場合に、format コマンドで表示されるパーティションテーブルは、次のような内容になります。


Current partition table (original):
Total disk sectors available: 286722878 + 16384 (reserved sectors)

Part      Tag    Flag     First Sector         Size         Last Sector
  0        usr    wm                34      136.72GB          286722911    
  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         286722912        8.00MB          286739295    

ディスク全体を使用するには、/dev/dsk/cNtNdN 命名規則を使用してディスクに名前を付ける必要があります。他社製のドライバの中には、異なる命名規則を使用したり、ディスクを /dev/dsk ディレクトリ以外の場所に配置するものがあります。これらのディスクを使用する場合は、ディスクの名前を手動で付けて、ZFS にスライスを渡す必要があります。

ディスク全体を使ってストレージプールを作成するときは、EFI ラベルが適用されます。EFI ラベルの詳細については、『Solaris のシステム管理 (デバイスとファイルシステム)』「EFI ディスクラベル」を参照してください。

ZFS ルートプールに使用するディスクは、EFI ラベルではなく、SMI ラベルを使用して作成する必要があります。format - e コマンドを使用して、ディスクのラベルを SMI ラベルに変更することができます。

ディスクを指定するときには、フルパス (/dev/dsk/c1t0d0 など) または /dev/dsk ディレクトリ内のデバイス名で構成される短縮名 (c1t0d0 など) を使用できます。有効なディスク名の例を挙げます。

物理ディスクの全体を使用するのが、ZFS ストレージプールを作成するためのもっとも簡単な方法です。ディスクスライス、ハードウェア RAID アレイ内の LUN、またはソフトウェアベースのボリュームマネージャーが提供するボリュームからプールを構築する場合、管理、信頼性、およびパフォーマンスの観点から ZFS 構成が次第により複雑になります。次の点を考慮すれば、ほかのハードウェアまたはソフトウェアストレージ解決策を使って ZFS を構成する方法を決定しやすくなる可能性があります。

ストレージプールの推奨事項に関するその他の情報は、次の ZFS ベストプラクティスのサイトを参照してください。

http://www.solarisinternals.com/wiki/index.php/ZFS_Best_Practices_Guide

ディスクは、パスとデバイス ID の両方で識別されます (利用できる場合)。デバイス ID 情報が利用可能なシステムでは、この識別方式を使うことで、ZFS を更新することなくデバイスを再構成できます。デバイス ID の生成および管理の方式はシステムごとに異なるため、コントローラ間でディスクを移動するなどのデバイス移動の前にまず、プールをエクスポートします。ファームウェアの更新やその他のハードウェア変更などのシステムイベントによって、ZFS ストレージプール内でデバイス 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 では、ストレージプール内の UFS ファイルを仮想デバイスとして使用することもできます。この機能は、本稼働環境で使用するのではなく、主にテストや簡単な実験のために使用します。これは、ファイルをどのように使用する場合でも、整合性を保つために背後のファイルシステムに依存しているためです。ZFS プールを UFS ファイルシステム上のファイルに基づいて作成する場合には、正確さと同期のセマンティクスを保証するために、UFS に暗黙に依存しています。

ただし、ZFS を初めて使用してみる場合や、十分な物理デバイスがない状況で複雑な構成を実験する場合には、これらのファイルが非常に便利なことがあります。すべてのファイルは、完全なパスで指定し、64M バイト以上のサイズにする必要があります。

ZFS ストレージプールの複製機能

ZFS には、ミラー化構成と RAID-Z 構成において、自己修復プロパティーに加えてデータ冗長性も用意されています。

ミラー化されたストレージプール構成

ストレージプール構成をミラー化するには、2 つのディスクが必要です。ディスクごとに個別のコントローラを割り当てることをお勧めします。ミラー化構成では、多数のディスクを使用できます。また、各プール内に複数のミラーを作成することもできます。概念的には、基本的なミラー化構成は次のようになります。


mirror c1t0d0 c2t0d0

概念的により複雑なミラー化構成は、次のようになります。


mirror c1t0d0 c2t0d0 c3t0d0 mirror c4t0d0 c5t0d0 c6t0d0

ミラー化されたストレージプールの作成方法については、「ミラー化されたストレージプールを作成する」を参照してください。

RAID-Z ストレージプール構成

ZFS は、ミラー化ストレージプール構成のほかに、シングルパリティー、ダブルパリティー、またはトリプルパリティーの耐障害性を備えた RAID-Z 構成も提供します。シングルパリティーの RAID-Z (raidz または raidz1) は RAID-5 に似ています。ダブルパリティーの RAID-Z (raidz2) は RAID-6 に似ています。

RAIDZ-3 (raidz3) については、次のブログを参照してください。

http://blogs.sun.com/ahl/entry/triple_parity_raid_z

従来の 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/roch/entry/when_to_and_not_to

RAID-Z ストレージプールの推奨事項に関するその他の情報は、次の ZFS ベストプラクティスのサイトを参照してください。

http://www.solarisinternals.com/wiki/index.php/ZFS_Best_Practices_Guide

ZFS ハイブリッドストレージプール

Oracle の Sun Storage 7000 製品シリーズで利用可能な ZFS ハイブリッドストレージプールは、パフォーマンスの向上および容量の増加と同時に電力消費の削減を実現するために、DRAM、SSD、および HDD を組み合わせた特殊なストレージプールです。この製品の管理インタフェースでは、ストレージプールの ZFS 冗長構成を選択したり、その他の構成オプションを容易に管理したりできます。

この製品の詳細については、『Sun Storage Unified Storage System Administration Guide』を参照してください。

冗長構成の自己修復データ

ZFS のミラー化構成または RAID-Z 構成は、自己修復データを備えています。

不正なデータブロックが検出されると、ZFS は別の冗長コピーから正しいデータを取得するだけでなく、不正なデータを適切なコピーで置き換えて修復も行います。

ストレージプール内の動的なストライプ

ZFS では、すべての最上位レベルの仮想デバイス間でデータが動的にストライプ化されます。データがどこに割り当てられるかは書き込み時に決定されるため、割り当て時には固定幅のストライプは作成されません。

新しい仮想デバイスがプールに追加されると、パフォーマンスとディスク領域割り当てポリシーを維持するために、データは新しいデバイスに順次割り当てられます。各仮想デバイスは、ほかのディスクデバイスまたはファイルを含むミラーまたは RAID-Z デバイスでもかまいません。この構成を使用すれば、プールの障害時の特性を柔軟に制御できます。たとえば、4 つのディスクから次の構成を作成できます。

ZFS では異なる種類の仮想デバイスを同じプール内で組み合わせることが可能ですが、そのような組み合わせは避けてください。たとえば、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 ミラー化構成では次の操作がサポートされています。

ログデバイスまたはキャッシュデバイス以外のデバイスは、ミラー化されたストレージプールから完全に削除できません。この機能については、RFE (改善要求) が提出されています。

ZFS ルートプールを作成する

ZFS ルートファイルシステムをインストールしてブートできます。ルートプールの構成に関する次の情報を確認してください。

ZFS ルートファイルシステムのインストールと起動の詳細については、第 5 章Oracle Solaris 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/c5t0d0c5t0d0 はどちらも同じディスクを参照します。

プールの作成時に raidz2 キーワードを使用するとダブルパリティーの、raidz3 キーワードを使用するとトリプルパリティーの RAID-Z 構成を作成できます。次に例を示します。


# zpool create tank raidz2 c1t0d0 c2t0d0 c3t0d0 c4t0d0 c5t0d0
# zpool status -v tank
  pool: tank
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          raidz2-0  ONLINE       0     0     0
            c1t0d0  ONLINE       0     0     0
            c2t0d0  ONLINE       0     0     0
            c3t0d0  ONLINE       0     0     0
            c4t0d0  ONLINE       0     0     0
            c5t0d0  ONLINE       0     0     0

errors: No known data errors

# zpool create tank raidz3 c0t0d0 c1t0d0 c2t0d0 c3t0d0 c4t0d0 c5t0d0 c6t0d0 c7t0d0
# zpool status -v tank
  pool: tank
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          raidz3-0  ONLINE       0     0     0
            c0t0d0  ONLINE       0     0     0
            c1t0d0  ONLINE       0     0     0
            c2t0d0  ONLINE       0     0     0
            c3t0d0  ONLINE       0     0     0
            c4t0d0  ONLINE       0     0     0
            c5t0d0  ONLINE       0     0     0
            c6t0d0  ONLINE       0     0     0
            c7t0d0  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 datap
  pool: datap
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        datap       ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            c1t1d0  ONLINE       0     0     0
            c1t2d0  ONLINE       0     0     0
          mirror-1  ONLINE       0     0     0
            c1t3d0  ONLINE       0     0     0
            c1t4d0  ONLINE       0     0     0
        logs
          mirror-2  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-0  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

キャッシュデバイスを使用して ZFS ストレージプールを作成するかどうか決定する場合は、次の点を考慮してください。

ストレージプールの仮想デバイスの情報を表示する

個々のストレージプールには 1 つ以上の仮想デバイスが含まれます。「仮想デバイス」は、物理ストレージのレイアウトとストレージプールの障害時の特性を定義した、ストレージプールの内部表現です。つまり、仮想デバイスは、ストレージプールの作成に使用されるディスクデバイスまたはファイルを表しています。プールでは、構成の最上位に任意の数の仮想デバイス (「最上位レベル vdev」と呼ばれる) を含めることができます。

最上位の仮想デバイスに 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 c2d1 c3d1 c4d1 c5d1

非冗長プールで使用されるディスク、ディスクスライス、またはファイルは、最上位の仮想デバイスとして機能します。ストレージプールには通常、複数の最上位レベルの仮想デバイスが含まれています。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-0  ONLINE       0     0     0
            c0t1d0  ONLINE       0     0     0
            c1t1d0  ONLINE       0     0     0
          mirror-1  ONLINE       0     0     0
            c0t2d0  ONLINE       0     0     0
            c1t2d0  ONLINE       0     0     0
          mirror-2  ONLINE       0     0     0
            c0t3d0  ONLINE       0     0     0
            c1t3d0  ONLINE       0     0     0

errors: No known data errors

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 オプションを使用して無効にすれば、プールを作成できます。

ファイルシステムを含んでいる

このディスクには既知のファイルシステムが含まれていますが、マウントされていないうえ、使用中のメッセージが表示されません。

ボリュームの一部

ディスクは Solaris Volume Manager ボリュームの一部です。

Live upgrade

このディスクは、Oracle 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 回指定していることがよくあります。このエラーは実際にデータを書き込まないと確実に検出できないため、zpool create -n コマンドでは成功が報告されるにもかかわらず、このオプションを指定せずにコマンドを実行するとプールの作成に失敗する可能性があります。

ストレージプールのデフォルトマウントポイント

プールが作成されるときに、最上位データセットのデフォルトマウントポイントは /pool-name になります。このディレクトリは、存在しないディレクトリか、空のディレクトリにする必要があります。ディレクトリが存在しない場合は、自動的に作成されます。ディレクトリが空の場合は、root データセットが既存のディレクトリの最上位にマウントされます。別のデフォルトマウントポイントを使用してプールを作成する場合は、-zpool create コマンドの m オプションを使用します。次に例を示します。


# 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 コマンドを使用します。このコマンドを実行すると、マウント済みのデータセットがプールに含まれている場合でも、プールが破棄されます。


# zpool destroy tank

注意 – 注意 –

プールを破棄するときは、十分に注意してください。破棄するプールに間違いがないことを確認し、常にデータをコピーしておいてください。ほかのプールを間違って破棄してしまった場合は、そのプールの回復を試みることができます。詳細は、「破棄された 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

このコマンドの構文では、ミラー化されたデバイス c3t1d0c3t2d0zeepool プールの既存の構成に追加されます。

仮想デバイスがどのように検査されるかの詳細については、「使用中のデバイスを検出する」を参照してください。


例 4–1 ZFS ミラー化構成にディスクを追加する

次の例では、Oracle の 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-0  ONLINE       0     0     0
            c0t1d0  ONLINE       0     0     0
            c1t1d0  ONLINE       0     0     0
          mirror-1  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-0  ONLINE       0     0     0
            c0t1d0  ONLINE       0     0     0
            c1t1d0  ONLINE       0     0     0
          mirror-1  ONLINE       0     0     0
            c0t2d0  ONLINE       0     0     0
            c1t2d0  ONLINE       0     0     0
          mirror-2  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 rzpool
  pool: rzpool
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        rzpool      ONLINE       0     0     0
          raidz1-0  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 rzpool raidz c2t2d0 c2t3d0 c2t4d0
# zpool status rzpool
  pool: rzpool
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        rzpool      ONLINE       0     0     0
          raidz1-0  ONLINE       0     0     0
            c1t0d0  ONLINE       0     0     0
            c1t2d0  ONLINE       0     0     0
            c1t3d0  ONLINE       0     0     0
          raidz1-1  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 ログデバイスの設定」を参照してください。


# zpool status newpool
  pool: newpool
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        newpool     ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            c0t4d0  ONLINE       0     0     0
            c0t5d0  ONLINE       0     0     0

errors: No known data errors
# zpool add newpool log mirror c0t6d0 c0t7d0
# zpool status newpool
  pool: newpool
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        newpool     ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            c0t4d0  ONLINE       0     0     0
            c0t5d0  ONLINE       0     0     0
        logs
          mirror-1  ONLINE       0     0     0
            c0t6d0  ONLINE       0     0     0
            c0t7d0  ONLINE       0     0     0

errors: No known data errors

既存のログデバイスにログデバイスを接続して、ミラー化ログデバイスを作成できます。この操作は、ミラー化されていないストレージプール内にデバイスを接続する操作と同じです。

ログデバイスを削除するには、zpool remove コマンドを使用します。前の例のミラー化ログデバイスは、mirror-1 引数を指定することによって削除できます。次に例を示します。


# zpool remove newpool mirror-1
# zpool status newpool
  pool: newpool
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        newpool     ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            c0t4d0  ONLINE       0     0     0
            c0t5d0  ONLINE       0     0     0

errors: No known data errors

プールの構成に含まれるログデバイスが 1 つだけの場合、デバイス名を指定することによってログデバイスを削除します。次に例を示します。


# zpool status pool
  pool: pool
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        pool        ONLINE       0     0     0
          raidz1-0  ONLINE       0     0     0
            c0t8d0  ONLINE       0     0     0
            c0t9d0  ONLINE       0     0     0
        logs
          c0t10d0   ONLINE       0     0     0

errors: No known data errors
# zpool remove pool c0t10d0


例 4–4 キャッシュデバイスを追加および削除する

キャッシュデバイスを 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-0  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-0  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 zeepool
  pool: zeepool
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        zeepool     ONLINE       0     0     0
          mirror-0  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 zeepool
  pool: zeepool
 state: ONLINE
 scrub: resilver completed after 0h0m with 0 errors on Fri Jan  8 12:59:20 2010
config:

        NAME        STATE     READ WRITE CKSUM
        zeepool     ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            c0t1d0  ONLINE       0     0     0
            c1t1d0  ONLINE       0     0     0
            c2t1d0  ONLINE       0     0     0  592K resilvered

errors: No known data errors

たとえば、既存のデバイスが 3 方向ミラーの一部である場合は、新規デバイスを接続すると 4 方向ミラーが作成されます。どのような場合にも、新しいデバイスを接続すると、すぐに再同期化が開始されます。



例 4–6 非冗長な ZFS ストレージプールをミラー化された ZFS ストレージプールに変換する

また、zpool attach コマンドを使用して、非冗長なストレージプールを冗長なストレージプールに変換できます。次に例を示します。


# zpool create tank c0t1d0
# zpool status tank
  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 tank
  pool: tank
 state: ONLINE
 scrub: resilver completed after 0h0m with 0 errors on Fri Jan  8 14:28:23 2010
config:

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            c0t1d0  ONLINE       0     0     0
            c1t1d0  ONLINE       0     0     0  73.5K resilvered

errors: No known data errors

zpool detach コマンドを使用して、ミラー化されたストレージプールからデバイスを切り離すことができます。次に例を示します。


# zpool detach zeepool c2t1d0

ただし、データの有効な複製がほかに存在しない場合、この操作は失敗します。次に例を示します。


# zpool detach newpool c1t2d0
cannot detach c1t2d0: only applicable to mirror and replacing vdevs

ミラー化 ZFS ストレージプールを分割して新しいプールを作成する

zpool split コマンドを使用すると、ミラー化された ZFS ストレージプールをバックアッププールとしてすばやく複製できます。

現時点では、この機能を使用してミラー化ルートプールを分割することはできません。

zpool split コマンドを使用してミラー化 ZFS ストレージプールからディスクを切り離し、切り離されたディスクのうちの 1 つを含む新しいプールを作成することができます。新しいプールの内容は、元のミラー化 ZFS ストレージプールと同じになります。

デフォルトでは、ミラー化プールに対して zpool split 操作を実行すると、最後のディスクが切り離され、新しく作成されるプールで使用されます。分割操作のあとで、新しいプールをインポートします。次に例を示します。


# zpool status tank
  pool: tank
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            c1t0d0  ONLINE       0     0     0
            c1t2d0  ONLINE       0     0     0

errors: No known data errors
# zpool split tank tank2
# zpool import tank2
# zpool status tank tank2
  pool: tank
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          c1t0d0    ONLINE       0     0     0

errors: No known data errors

  pool: tank2
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        tank2       ONLINE       0     0     0
          c1t2d0    ONLINE       0     0     0

errors: No known data errors

新しく作成されるプールでどのディスクを使用するかは、zpool split コマンドで指定できます。次に例を示します。


# zpool split tank tank2 c1t0d0

実際の分割操作が行われる前に、メモリー上のデータがミラー化ディスクに書き出されます。データが書き出されたあとで、ディスクがプールから切り離されて新しいプール GUID を付与されます。新しいプール GUID が生成され、プールが分割されたのと同じシステム上でプールをインポートできるようになります。

分割されるプールのデータセットマウントポイントがデフォルトと異なっている場合に、新しいプールを同じシステム上に作成するには、zpool split -R オプションを使用して新しいプール用の代替ルートディレクトリを特定し、既存のマウントポイントと競合しないようにする必要があります。次に例を示します。


# zpool split -R /tank2 tank tank2

zpool split -R オプションを使用せずに新しいプールのインポートを試みたときにマウントポイントの競合を確認した場合は、-R オプションを使用して新しいプールをインポートしてください。新しいプールを別のシステムに作成する場合は、マウントポイントの競合が発生しないかぎり、代替ルートディレクトリの指定は不要です。

zpool split 機能を使用する前に、次の考慮事項を確認してください。


例 4–7 ミラー化された ZFS プールを分割する

次の例では、c1t0d0c1t2d0c1t3d0 の 3 台のディスクから成る、trinity という名前のミラー化ストレージプールを分割します。分割後の 2 つのプールは、ディスク c1t0d0c1t2d0 から成るミラー化プール trinity と、ディスク c1t3d0 から成る新しいプール neo になります。各プールの内容は同じです。


# zpool status trinity
  pool: trinity
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        trinity     ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            c1t0d0  ONLINE       0     0     0
            c1t2d0  ONLINE       0     0     0
            c1t3d0  ONLINE       0     0     0

errors: No known data errors
# zpool split trinity neo
# zpool import neo
# zpool status trinity neo
  pool: neo
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        neo         ONLINE       0     0     0
          c1t3d0    ONLINE       0     0     0

errors: No known data errors

  pool: trinity
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        trinity     ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            c1t0d0  ONLINE       0     0     0
            c1t2d0  ONLINE       0     0     0

errors: No known data errors

ストレージプール内のデバイスをオンラインまたはオフラインにする

ZFS では、デバイスを個別にオフラインまたはオンラインにできます。ハードウェアが信頼できない場合または正しく機能しない場合でも、ZFS ではその状態を一時的な状態と見なして、デバイスからのデータの読み取りまたはデバイスへのデータの書き込みを続行します。一時的な状態でない場合には、デバイスをオフラインにして無視されるように設定できます。オフラインのデバイスには、要求はまったく送信されません。


注 –

デバイスを置き換えるときに、オフラインにする必要はありません。


一時的にストレージを切断する必要がある場合は、zpool offline コマンドを使用できます。たとえば、ファイバチャネルスイッチのセットからアレイを物理的に切断し、そのアレイを別のセットに接続する必要がある場合は、ZFS ストレージプールで使用されているアレイから LUN をオフラインにできます。新しいスイッチのセットでアレイが再接続されて使用できるようになると、続いて同じ LUN をオンラインにできます。LUN がオフラインの間にストレージプールに追加されたデータは、オンラインに戻されたあとの LUN と再同期化されます。

このシナリオが可能になるのは、新しいスイッチにストレージが接続されたあとに、該当のシステムが場合によっては以前と異なるコントローラを介してそのストレージを検出でき、使用しているプールが RAID-Z 構成またはミラー構成として設定されている場合です。

デバイスをオフラインにする

zpool offline コマンドを使用して、デバイスをオフラインにできます。デバイスがディスクの場合は、パスまたは短縮名を使って指定できます。次に例を示します。


# zpool offline tank c1t0d0
bringing device c1t0d0 offline

デバイスをオフラインにするときは、次の点を考慮します。

オフラインのデバイスは、プール状態のクエリー検索を行うと、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

ディスクのエラーに関するメッセージがコンソールに表示されるか、/var/adm/messages ファイルに書き込まれる場合もあります。次に例を示します。


SUNW-MSG-ID: ZFS-8000-D3, TYPE: Fault, VER: 1, SEVERITY: Major
EVENT-TIME: Wed Jun 30 14:53:39 MDT 2010
PLATFORM: SUNW,Sun-Fire-880, CSN: -, HOSTNAME: neo
SOURCE: zfs-diagnosis, REV: 1.0
EVENT-ID: 504a1188-b270-4ab0-af4e-8a77680576b8
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 online -e コマンドを使用して LUN を拡張できます。デフォルトでは、プールに追加された LUN は、プールの autoexpand プロパティーが有効でない場合はその最大サイズにまで拡張されません。zpool online -e コマンドを使用すると、LUN がその時点でオンラインかオフラインかに関係なく、LUN を自動的に拡張できます。次に例を示します。


# zpool online -e tank c1t13d0

ストレージプールデバイスのエラーをクリアーする

障害のためにデバイスがオフラインになり、エラーが zpool status の出力に表示される場合は、zpool clear コマンドを使ってエラー数をクリアーできます。

引数を指定しないでこのコマンドを実行した場合は、プールに含まれるすべてのデバイスのエラーがクリアーされます。次に例を示します。


# zpool clear tank

1 つ以上のデバイスを指定してこのコマンドを実行した場合は、指定したデバイスに関連付けられたエラーだけがクリアーされます。次に例を示します。


# zpool clear tank c1t0d0

zpool エラーのクリアーについては、「一時的なエラーを解消する」を参照してください。

ストレージプール内のデバイスを置き換える

zpool replace コマンドを使用して、ストレージプール内のデバイスを置き換えることができます。

冗長プール内の同じ場所にある別のデバイスでデバイスを物理的に置き換える場合は、置き換えられるデバイスを特定するだけで済むことがあります。ZFS はそのデバイスを、同じハードウェア上の同じ場所にある別のディスクであると認識します。たとえば、障害の発生したディスク (c1t1d0) を置き換える場合、そのディスクを取り除き、同じ場所でそれを置き換えるには、次の構文を使用します。


# zpool replace tank c1t1d0

ストレージプール内のデバイスを、物理的に異なる場所にあるディスクに置き換えようとしている場合は、両方のデバイスを指定する必要があります。次に例を示します。


# zpool replace tank c1t1d0 c1t2d0

ZFS ルートプールのディスクを置き換える場合は、「ZFS ルートプールのディスクを置き換える方法」を参照してください。

ディスクを置き換えるための基本的な手順は次のとおりです。

Sun Fire x4500 などの一部のシステムでは、ディスクをオフラインにする前に構成解除する必要があります。このシステム上の同じスロット位置にあるディスクを置き換えようとしている場合は、この節の最初の例で説明したように zpool replace コマンドを実行するだけで置き換えを実行できます。

Sun Fire X4500 システムでディスクを置き換える例については、例 11–1 を参照してください。

ZFS ストレージプール内のデバイスを置き換えるときは、次のことを考慮します。

デバイスの置き換えの詳細については、「見つからないデバイスに関する問題を解決する」および「破損したデバイスを交換または修復する」を参照してください。

ストレージプールにホットスペアを指定する

ホットスペア機能を使って、1 つ以上のストレージプールで障害が発生したデバイスまたはエラー状態のデバイスを置き換えるために使用するディスクを指定できます。「ホットスペア」として指定したデバイスはプール内ではアクティブデバイスではありませんが、プールのアクティブデバイスで障害が発生した場合には、そのデバイスがホットスペアに自動的に置き換えられます。

次の方法を使って、デバイスをホットスペアとして指定できます。

次の例は、プールの作成時にデバイスをホットスペアとして指定する方法を示しています。


# zpool create trinity mirror c1t1d0 c2t1d0 spare c1t2d0 c2t2d0
# zpool status trinity
  pool: trinity
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        trinity     ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            c1t1d0  ONLINE       0     0     0
            c2t1d0  ONLINE       0     0     0
        spares
          c1t2d0    AVAIL   
          c2t2d0    AVAIL   

errors: No known data errors

次の例は、プールの作成後にプールに追加することによってホットスペアを指定する方法を示しています。


# zpool add neo spare c5t3d0 c6t3d0
# zpool status neo
  pool: neo
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        neo         ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            c3t3d0  ONLINE       0     0     0
            c4t3d0  ONLINE       0     0     0
        spares
          c5t3d0    AVAIL   
          c6t3d0    AVAIL   

errors: No known data errors

ホットスペアをストレージプールから削除するときは、zpool remove コマンドを使用します。次に例を示します。


# zpool remove zeepool c2t3d0
# zpool status zeepool
  pool: zeepool
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        zeepool     ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            c1t1d0  ONLINE       0     0     0
            c2t1d0  ONLINE       0     0     0
        spares
          c1t3d0    AVAIL   

errors: No known data errors

ストレージプールが現在使用しているホットスペアは、削除できません。

ZFS ホットスペアを使用するときは、次の点を考慮してください。

ストレージプール内のホットスペアをアクティブにする/非アクティブにする

ホットスペアをアクティブにするには、次のようにします。

zpool replace コマンドを使用して、デバイスをホットスペアに手動で置き換えることができます。例 4–8 を参照してください。

ホットスペアが使用可能な場合、エラー状態のデバイスは自動的に置き換えられます。次に例を示します。


# 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-2Q
 scrub: resilver completed after 0h0m with 0 errors on Mon Jan 11 10:20:35 2010
config:

        NAME          STATE     READ WRITE CKSUM
        zeepool       DEGRADED     0     0     0
          mirror-0    DEGRADED     0     0     0
            c1t2d0    ONLINE       0     0     0
            spare-1   DEGRADED     0     0     0
              c2t1d0  UNAVAIL      0     0     0  cannot open
              c2t3d0  ONLINE       0     0     0  88.5K resilvered
        spares
          c2t3d0      INUSE     currently in use

errors: No known data errors

現時点では、次の方法でホットスペアを非アクティブにできます。


例 4–8 ディスクを手動でホットスペアと置き換える

この例では、zpool replace コマンドを使用して、ディスク c2t1d0 をホットスペア c2t3d0 と置き換えます。


# zpool replace zeepool c2t1d0 c2t3d0
# zpool status zeepool
  pool: zeepool
 state: ONLINE
 scrub: resilver completed after 0h0m with 0 errors on Wed Jan 20 10:00:50 2010
config:

        NAME          STATE     READ WRITE CKSUM
        zeepool       ONLINE       0     0     0
          mirror-0    ONLINE       0     0     0
            c1t2d0    ONLINE       0     0     0
            spare-1   ONLINE       0     0     0
              c2t1d0  ONLINE       0     0     0
              c2t3d0  ONLINE       0     0     0  90K resilvered
        spares
          c2t3d0      INUSE     currently in use

errors: No known data errors

その後、ディスク c2t1d0 を切り離します。


# zpool detach zeepool c2t1d0
# zpool status zeepool
  pool: zeepool
 state: ONLINE
 scrub: resilver completed after 0h0m with 0 errors on Wed Jan 20 10:00:50 2010
config:

        NAME        STATE     READ WRITE CKSUM
        zeepool     ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            c1t2d0  ONLINE       0     0     0
            c2t3d0  ONLINE       0     0     0  90K resilvered

errors: No known data errors


例 4–9 障害が発生したディスクの置き換え後にホットスペアを切り離す

次の例では、障害が発生したディスク (c2t1d0) を物理的に置き換えて、zpool replace コマンドを使って ZFS に通知します。


# zpool replace zeepool c2t1d0
# zpool status zeepool
  pool: zeepool
 state: ONLINE
 scrub: resilver completed after 0h0m with 0 errors on Wed Jan 20 10:08:44 2010
config:

        NAME          STATE     READ WRITE CKSUM
        zeepool       ONLINE       0     0     0
          mirror-0    ONLINE       0     0     0
            c1t2d0    ONLINE       0     0     0
            spare-1   ONLINE       0     0     0
              c2t3d0  ONLINE       0     0     0  90K resilvered
              c2t1d0  ONLINE       0     0     0
        spares
          c2t3d0      INUSE     currently in use

errors: No known data errors

その後、zpool detach コマンドを使ってホットスペアをスペアプールに戻すことができます。次に例を示します。


# zpool detach zeepool c2t3d0
# zpool status zeepool
  pool: zeepool
 state: ONLINE
 scrub: resilver completed with 0 errors on Wed Jan 20 10:08:44 2010
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


例 4–10 障害が発生したディスクを切り離してホットスペアを使用する

障害が発生したディスクを、そのディスクを現在置き換えようとしているホットスペア内で一時的または永続的に交換することによって置き換えたい場合は、元の (障害が発生した) ディスクを切り離します。障害が発生したディスクが最終的に置き換えられたら、そのディスクをスペアとしてストレージプールに再び追加できます。次に例を示します。


# zpool status zeepool
  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-2Q
 scrub: resilver in progress for 0h0m, 70.47% done, 0h0m to go
config:

        NAME          STATE     READ WRITE CKSUM
        zeepool       DEGRADED     0     0     0
          mirror-0    DEGRADED     0     0     0
            c1t2d0    ONLINE       0     0     0
            spare-1   DEGRADED     0     0     0
              c2t1d0  UNAVAIL      0     0     0  cannot open
              c2t3d0  ONLINE       0     0     0  70.5M resilvered
        spares
          c2t3d0      INUSE     currently in use

errors: No known data errors
# zpool detach zeepool c2t1d0
# zpool status zeepool
  pool: zeepool
 state: ONLINE
 scrub: resilver completed after 0h0m with 0 errors on Wed Jan 20 13:46:46 2010
config:

        NAME        STATE     READ WRITE CKSUM
        zeepool     ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            c1t2d0  ONLINE       0     0     0
            c2t3d0  ONLINE       0     0     0  70.5M resilvered

errors: No known data errors
(Original failed disk c2t1d0 is physically replaced)
# zpool add zeepool spare c2t1d0
# zpool status zeepool
  pool: zeepool
 state: ONLINE
 scrub: resilver completed after 0h0m with 0 errors on Wed Jan 20 13:48:46 2010
config:

        NAME        STATE     READ WRITE CKSUM
        zeepool     ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            c1t2d0  ONLINE       0     0     0
            c2t3d0  ONLINE       0     0     0  70.5M resilvered
        spares
          c2t1d0    AVAIL   

errors: No known data errors

ZFS ストレージプールのプロパティーの管理

zpool get コマンドを使用して、プールのプロパティーの情報を表示できます。次に例を示します。


# zpool get all mpool
NAME  PROPERTY       VALUE       SOURCE
pool  size           68G         -
pool  capacity       0%          -
pool  altroot        -           default
pool  health         ONLINE      -
pool  guid           601891032394735745  default
pool  version        22          default
pool  bootfs         -           default
pool  delegation     on          default
pool  autoreplace    off         default
pool  cachefile      -           default
pool  failmode       wait        default
pool  listsnapshots  on          default
pool  autoexpand     off         default
pool  free           68.0G       -
pool  allocated      76.5K       -

ストレージプールのプロパティーは zpool set コマンドで設定できます。次に例を示します。


# zpool set autoreplace=on mpool
# zpool get autoreplace mpool
NAME  PROPERTY     VALUE    SOURCE
mpool autoreplace  on       default
表 4–1 ZFS プールのプロパティーの説明

プロパティー名 

種類 

デフォルト値 

説明 

allocated

文字列 

なし 

読み取り専用の値。物理的に割り当て済みであるプール内のストレージ領域の容量を示します。

altroot

文字列 

off

代替ルートディレクトリを示します。設定されている場合、プール内のすべてのマウントポイントの先頭にこのディレクトリが付加されます。このプロパティーは、不明なプールを調べるときやマウントポイントが信頼できない場合、または通常のパスが有効でない代替ブート環境で使用できます。

autoreplace

ブール型 

off

自動デバイス交換を制御します。オフに設定されている場合、zpool replace コマンドを使ってデバイス交換を開始する必要があります。オンに設定されている場合、そのプールに以前属していたデバイスと物理的に同じ位置にある新しいデバイスは、いずれも自動的にフォーマットされ、置き換えられます。このプロパティーの省略名は replace です。

bootfs

ブール型 

なし 

ルートプールのデフォルトのブート可能データセットを示します。このプロパティーは通常、インストールプログラムとアップグレードプログラムによって設定されます。

cachefile

文字列 

なし 

プール構成情報がキャッシュされる場所を制御します。システムの起動時に、キャッシュ内のすべてのプールが自動的にインポートされます。ただし、インストール環境とクラスタ化環境では、プールが自動的にインポートされないようにするために、この情報を別の場所にキャッシュすることが必要になる場合もあります。プール構成情報を別の場所にキャッシュするようにこのプロパティーを設定できます。この情報は、あとから zpool import - c コマンドを使ってインポートできます。ほとんどの ZFS 構成では、このプロパティーは使用されません。

capacity

数値 

なし 

読み取り専用の値。使用されているプール領域の割合を示します。

このプロパティーの省略名は cap です。

委託

ブール型 

on

データセットに定義されているアクセス権を非特権ユーザーに付与できるかどうかを制御します。詳細は、第 9 章Oracle Solaris ZFS 委任管理を参照してください。

failmode

文字列 

wait

プールに壊滅的な障害が発生した場合のシステムの動作を制御します。通常は、配下の 1 台以上のストレージデバイスへの接続が失われた場合や、プール内のすべてのデバイスに障害が発生した場合に、このような状況になります。そのような状況での動作は、次のいずれかの値によって決定されます。

  • wait – デバイスへの接続を復元し、zpool clear コマンドでエラーをクリアーするまで、プールに対するすべての入出力要求をブロックします。この状態では、プールに対する入出力操作はブロックされますが、読み取り操作は成功する場合があります。デバイスの問題が解決されるまで、プールの状態は wait のままです。

  • continue – 新しい書き込み入出力要求には EIO エラーを返しますが、正常な残りのデバイスに対する読み取りは許可します。まだディスクにコミットされていない書き込み要求はブロックされます。デバイスを再接続するか交換したあと、zpool clear コマンドでエラーを解決する必要があります。

  • panic – コンソールにメッセージを出力し、システムクラッシュダンプを生成します。

free

文字列 

なし 

読み取り専用の値。まだ割り当てられていないプール内のブロック数を示します。

guid

文字列 

なし 

読み取り専用プロパティー。プールの一意の識別子を示します。

health

文字列 

なし 

読み取り専用プロパティー。プールの現在の健全性を ONLINE、DEGRADED、FAULTED、OFFLINE、REMOVED、または UNAVAIL のいずれかで示します。

listsnapshots

文字列 

on

このプールに関連付けられているスナップショット情報が zfs list コマンドによって表示されるようにするかどうかを制御します。このプロパティーが無効な場合、zfs list -t snapshot コマンドを使用すればスナップショット情報を表示できます。

size

数値 

なし 

読み取り専用プロパティー。ストレージプールの合計サイズを示します。

version

数値 

なし 

プールの現在のディスク上バージョンを示します。プールを更新する方法としては zpool upgrade コマンドをお勧めしますが、下位互換性のために特定のバージョンが必要な場合には、このプロパティーを使用できます。このプロパティーには、1 から zpool upgrade -v コマンドで報告される現在のバージョンまでの任意の数値を設定できます。

ZFS ストレージプールの状態のクエリー検索を行う

zpool list コマンドでは、いくつかの方法でプール状態に関する情報を要求できます。主に 3 つのカテゴリの情報を要求できます。 基本的な使用状況の情報、入出力統計、および健全性状態です。ここでは、3 種類のストレージプール情報のすべてについて説明します。

ZFS ストレージプールについての情報を表示する

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     -

このコマンド出力には、次の情報が表示されます。

NAME

プールの名前。

SIZE

プールの合計サイズ。最上位レベルにあるすべての仮想デバイスの合計サイズになります。

ALLOC

すべてのデータセットおよび内部メタデータに割り当てられた物理的容量。この容量は、ファイルシステムレベルで報告されるディスク容量とは異なります。

使用可能なファイルシステムの容量を確認する方法については、「ZFS のディスク領域の計上」を参照してください。

FREE

プール内で割り当てられていない容量。

CAP (CAPACITY)

使用されているディスク容量。総ディスク容量に対するパーセントで表現されます。

HEALTH

プールの現在の健全性状態。

プールの健全性の詳細については、「ZFS ストレージプールの健全性状態を調べる」を参照してください。

ALTROOT

プールの代替ルート (存在する場合)。

代替ルートプールの詳細については、「ZFS 代替ルートプールを使用する」を参照してください。

プール名を指定して、特定のプールの統計を収集することもできます。次に例を示します。


# zpool list tank
NAME                    SIZE    ALLOC   FREE    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':
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 コマンドセットを特定することができます。

履歴ログの特徴を次に示します。

特定のストレージプールのコマンド履歴を確認するには、次のような構文を使用します。


# zpool history tank
History for 'tank':
2010-05-13.14:13:15 zpool create tank mirror c1t2d0 c1t3d0
2010-05-13.14:21:19 zfs create tank/snaps
2010-05-14.08:10:29 zfs create tank/ws01
2010-05-14.08:10:54 zfs snapshot tank/ws01@now
2010-05-14.08:11:05 zfs clone tank/ws01@now tank/ws01bugfix

-l オプションを使用して、ユーザー名、ホスト名、および操作が実行されたゾーンを含む長形式を表示します。次に例を示します。


# zpool history -l tank
History for 'tank':
2010-05-13.14:13:15 zpool create tank mirror c1t2d0 c1t3d0 [user root on neo]
2010-05-13.14:21:19 zfs create tank/snaps [user root on neo]
2010-05-14.08:10:29 zfs create tank/ws01 [user root on neo]
2010-05-14.08:10:54 zfs snapshot tank/ws01@now [user root on neo]
2010-05-14.08:11:05 zfs clone tank/ws01@now tank/ws01bugfix [user root on neo]

-i オプションを使用して、診断に利用できる内部イベント情報を表示します。次に例を示します。


# zpool history -i tank
2010-05-13.14:13:15 zpool create -f tank mirror c1t2d0 c1t23d0
2010-05-13.14:13:45 [internal pool create txg:6] pool spa 19; zfs spa 19; zpl 4;...
2010-05-13.14:21:19 zfs create tank/snaps
2010-05-13.14:22:02 [internal replay_inc_sync txg:20451] dataset = 41
2010-05-13.14:25:25 [internal snapshot txg:20480] dataset = 52
2010-05-13.14:25:25 [internal destroy_begin_sync txg:20481] dataset = 41
2010-05-13.14:25:26 [internal destroy txg:20488] dataset = 41
2010-05-13.14:25:26 [internal reservation set txg:20488] 0 dataset = 0
2010-05-14.08:10:29 zfs create tank/ws01
2010-05-14.08:10:54 [internal snapshot txg:53992] dataset = 42
2010-05-14.08:10:54 zfs snapshot tank/ws01@now
2010-05-14.08:11:04 [internal create txg:53994] dataset = 58
2010-05-14.08:11:05 zfs clone tank/ws01@now tank/ws01bugfix

ZFS ストレージプールの入出力統計を表示する

プールまたは特定の仮想デバイスの入出力統計を要求する場合は、zpool iostat コマンドを使用します。iostat コマンドと同様に、このコマンドでは、発生したすべての入出力アクティビティーの静的なスナップショットと、指定した間隔ごとに更新される統計を表示できます。次の統計が報告されます。

alloc capacity

プールまたはデバイスに現在格納されているデータの量。この容量は、実装の内部的な詳細のために、実際のファイルシステムで利用できるディスク容量とわずかに異なります。

プール領域とデータセット領域の相違点の詳細については、「ZFS のディスク領域の計上」を参照してください。

free capacity

プールまたはデバイスで使用できるディスク容量。used 統計と同様に、この容量はデータセットで使用できるディスク容量と多少異なります。

read operations

プールまたはデバイスに送信された入出力読み取り操作の数 (メタデータ要求を含む)。

write operations

プールまたはデバイスに送信された入出力書き込み操作の数。

read bandwidth

すべての読み取り操作 (メタデータを含む) の帯域幅。単位/秒として表現されます。

write bandwidth

すべての書き込み操作の帯域幅。単位/秒として表現されます。

プール全体の入出力統計を一覧表示する

オプションを指定しないで 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 つの重要な点に注意してください。

仮想デバイスの統計を検査するときにも、同じオプション (間隔とカウント) を使用できます。

ZFS ストレージプールの健全性状態を調べる

ZFS では、プールとデバイスの健全性を検査する方法が統合されています。プールの健全性は、そのすべてのデバイスの状態から判断されます。この状態情報は、zpool status コマンドを使って表示されます。また、発生する可能性のあるプールとデバイスの障害も fmd によって報告され、システムコンソールに表示されるとともに /var/adm/messages ファイルに記録されます。

この節では、プールとデバイスの健全性を確認する方法について説明します。この章では、健全でないプールを修復または回復する方法については説明しません。障害追跡およびデータの回復については、第 11 章Oracle Solaris ZFS のトラブルシューティングとプールの回復を参照してください。

各デバイスは、次のいずれかの状態になることができます。

ONLINE

デバイスまたは仮想デバイスは正常に動作しています。一時的なエラーがいくつか発生している可能性はありますが、それらを除けば正常に動作しています。

DEGRADED

仮想デバイスで障害が発生しましたが、デバイスはまだ動作しています。この状態は、ミラーデバイスまたは RAID-Z デバイスを構成するデバイスのうち、1 つ以上のデバイスが失われたときによく発生します。プールの耐障害性が損なわれる可能性があります。別のデバイスで続けて障害が発生した場合には、回復できない状態になることがあります。

FAULTED

デバイスまたは仮想デバイスへのアクセスが完全にできない状態です。この状態は通常、このデバイスで大きな障害が発生していて、デバイスとの間でデータの送受信ができないことを示しています。最上位レベルの仮想デバイスがこの状態の場合には、そのプールへのアクセスはまったくできません。

OFFLINE

管理者がデバイスを明示的にオフラインにしています。

UNAVAIL

デバイスまたは仮想デバイスを開くことができません。場合によっては、デバイスが UNAVAIL であるプールが DEGRADED モードで表示されることがあります。最上位レベルの仮想デバイスが UNAVAIL の場合は、そのプールのデバイスには一切アクセスできません。

REMOVED

システムの稼働中にデバイスが物理的に取り外されました。デバイスの取り外しの検出はハードウェアに依存しており、一部のプラットフォームではサポートされていない場合があります。

プールの健全性は、最上位レベルのすべての仮想デバイスから判断されます。すべての仮想デバイスが 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: フィールドは既知のデータエラーを示します。

前の出力例では、オフラインのデバイスでデータエラーは発生していません。

エラー状態のプールとデータを診断および修復する方法については、第 11 章Oracle Solaris ZFS のトラブルシューティングとプールの回復を参照してください。

ZFS ストレージプールを移行する

ストレージプールをシステム間で移動しなければならないことがあります。この作業を行うには、ストレージデバイスを元のシステムから切断して、移動先のシステムに再接続する必要があります。この作業は、ケーブルをデバイスに物理的に接続し直すか、または複数のポートを持つデバイス (SAN 上のデバイスなど) を使用する方法で、行うことができます。ZFS では、アーキテクチャーエンディアンの異なるシステム間でも、一方のマシンのプールをエクスポートして移行先のシステムにインポートできます。異なるストレージプール間 (異なるマシン上にある場合を含む) でファイルシステムを複製または移行する方法については、「ZFS データを送信および受信する」を参照してください。

ZFS ストレージプールの移行を準備する

ストレージプールは、移行する準備ができていることを示すために、明示的にエクスポートすることをお勧めします。この操作を行うことで、書き込まれていないデータがすべてディスクにフラッシュされ、データがディスクに書き込まれてエクスポート済みであることが示され、プールに関するすべての情報がシステムから削除されます。

プールを明示的にエクスポートする代わりに、ディスクを手動で取り外した場合でも、そのプールを別のシステムにインポートすることはできます。ただし、最後の数秒間のデータトランザクションが失われる可能性があります。この場合、デバイスが存在しないために、プールが元のシステム上でエラー状態として表示されます。デフォルトでは、明示的にエクスポートしていないプールはインポート先のシステムでインポートできません。アクティブなプールを誤ってインポートしてしまうことを防ぐ (プールを構成するネットワークに接続されたストレージが別のシステムでまだ使用されていることがないようにする) には、この状態が必要になります。

ZFS ストレージプールをエクスポートする

プールをエクスポートするには、zpool export コマンドを使用します。次に例を示します。


# zpool export tank

このコマンドは、プールの中にマウントされたファイルシステムがある場合は、すべてのマウントを解除してから、次の処理を実行しようとします。いずれかのファイルシステムのマウント解除に失敗した場合は、-f オプションを使用して強制的にマウントを解除できます。次に例を示します。


# zpool export tank
cannot unmount '/export/home/eschrock': Device busy
# zpool export -f tank

このコマンドを実行したあとは、プール tank はシステムから認識されなくなります。

エクスポート時にデバイスが使用できない場合、それらのデバイスは明示的にエクスポートされたものとして識別できません。これらのデバイスのいずれかをあとでシステムに接続した場合には、動作中のデバイスがなくても「潜在的にアクティブ」として表示されます。

ZFS ボリュームがプール内で使用中である場合は、-f オプションを使用してもそのプールをエクスポートすることはできません。ZFS ボリュームが含まれているプールをエクスポートするには、最初にそのボリュームのコンシューマがすべてアクティブでなくなっていることを確認してください。

ZFS ボリュームの詳細については、「ZFS ボリューム」を参照してください。

インポートできるストレージプールを判断する

プールをシステムから削除 (明示的にエクスポートするか、デバイスを強制的に取り外す) したあとで、それらのデバイスをインポート先のシステムに接続できます。ZFS では、一部のデバイスだけが利用可能である特定の状況を処理できますが、プールの移行が成功するかどうかはデバイスの全体的な健全性に依存します。また、デバイスは同じデバイス名で接続されている必要はありません。デバイスを移動した場合またはデバイスの名前を変更した場合には、それらが自動的に検出され、構成がそれに合わせて調整されます。インポートできるプールを確認するには、zpool import コマンドをオプションを指定しないで実行します。次に例を示します。


# zpool import
 pool: tank
    id: 11809215114195894163
 state: ONLINE
action: The pool can be imported using its name or numeric identifier.
config:

        tank        ONLINE
          mirror-0  ONLINE
            c1t0d0  ONLINE
            c1t1d0  ONLINE

この例では、プール tank をターゲットシステムにインポートできます。各プールは、名前および一意の数値識別子を使って識別されます。同じ名前の複数のプールがインポート可能な場合、数値識別子を使ってプールを区別することができます。

zpool status コマンドの出力と同様に、zpool import の出力にはナレッジ記事へのリンクが含まれています。この記事を参照して、プールのインポートを妨げている問題の修復手順に関する最新情報を入手します。この場合、ユーザーはプールを強制的にインポートできます。ただし、別のシステムがストレージネットワーク経由で使用しているプールをインポートすると、両方のシステムが同じストレージに書き込もうとするため、データの破壊とパニックが発生する可能性があります。プール内の一部のデバイスが使用できないが、使用可能なプールを提供するために十分な冗長データが存在する場合、そのプールは DEGRADED 状態であると表示されます。次に例を示します。


# zpool import
  pool: tank
    id: 11809215114195894163
 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:

        NAME        STATE     READ WRITE CKSUM
        tank        DEGRADED     0     0     0
          mirror-0  DEGRADED     0     0     0
            c1t0d0  UNAVAIL      0     0     0  cannot open
            c1t3d0  ONLINE       0     0     0

この例では、最初のディスクが損傷しているか見つかりません。ただし、ミラー化されたデータにまだアクセスできるため、このプールをインポートすることはできます。エラー状態または見つからないデバイスの数が多すぎる場合、そのプールはインポートできません。次に例を示します。


# zpool import
  pool: dozer
    id: 9784486589352144634
 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:
        raidz1-0       FAULTED
          c1t0d0       ONLINE
          c1t1d0       FAULTED
          c1t2d0       ONLINE
          c1t3d0       FAULTED

この例では、RAID-Z 仮想デバイスのうち、2 つのディスクが見つかりません。つまり、プールの再構築に必要な冗長データを利用できません。場合によっては、完全な構成を判断するために必要なデバイスが存在しないことがあります。この場合、ZFS ではほかにどのようなデバイスがプールを構成していたかを特定できませんが、その状況についてできるだけ多くの情報を報告しようとします。次に例を示します。


# zpool import
pool: dozer
    id: 9784486589352144634
 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
          raidz1-0     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: 7318163511366751416
 state: ONLINE
action: The pool can be imported using its name or numeric identifier.
config:

        dozer        ONLINE
          mirror-0   ONLINE
            /file/a  ONLINE
            /file/b  ONLINE
# zpool import -d /file dozer

デバイスが複数のディレクトリに存在する場合には、複数の -d オプションを指定できます。

ZFS ストレージプールをインポートする

インポートできるプールを確認したあとで、zpool import コマンドの引数にプールの名前または数値識別子を指定してインポートできます。次に例を示します。


# zpool import tank

インポートできるプールが複数存在し、それらが同じ名前を持っている場合でも、数値識別子を使ってインポートするプールを指定する必要があります。次に例を示します。


# 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

注 –

あるシステムでアクティブになっているプールを別のシステムにインポートしようとしないでください。ZFS はネイティブのクラスタファイルシステム、分散ファイルシステム、または並列ファイルシステムではないため、異なる複数のホストからの同時アクセスには対応できません。


-R オプションを使用して、プールを代替ルートでインポートすることもできます。代替ルートプールの詳細については、「ZFS 代替ルートプールを使用する」を参照してください。

破棄された ZFS ストレージプールを回復する

zpool import -D コマンドを使用して、破棄されたストレージプールを回復できます。次に例を示します。


# zpool destroy tank
# zpool import -D
  pool: tank
    id: 5154272182900538157
 state: ONLINE (DESTROYED)
action: The pool can be imported using its name or numeric identifier.
config:

        tank        ONLINE
          mirror-0  ONLINE
            c1t0d0  ONLINE
            c1t1d0  ONLINE

この zpool import の出力では、次の状態情報により、tank プールが破棄されたプールであることがわかります。


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
          mirror-0  ONLINE
            c1t0d0  ONLINE
            c1t1d0  ONLINE

errors: No known data errors

破棄されたプール内のいずれかのデバイスがエラー状態または使用できない場合でも、-f オプションを含めることによって、破棄されたプールを別の方法で回復できることがあります。このような場合には、機能が低下したプールをインポートしてから、デバイスの障害の修正を試みます。次に例を示します。


# zpool destroy dozer
# zpool import -D
pool: dozer
    id: 13643595538644303788
 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
config:

        NAME         STATE     READ WRITE CKSUM
        dozer        DEGRADED     0     0     0
          raidz2-0   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: scrub completed after 0h0m with 0 errors on Thu Jan 21 15:38:48 2010
config:

        NAME         STATE     READ WRITE CKSUM
        dozer        DEGRADED     0     0     0
          raidz2-0   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 10/09 リリースなど、以前の Solaris リリースの ZFS ストレージプールがある場合には、zpool upgrade コマンドを使ってそのプールをアップグレードすれば、現行リリースのプール機能を利用することができます。また、古いバージョンのプールを実行している場合、zpool status コマンドによって通知されます。次に例を示します。


# zpool status
  pool: tank
 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
        tank        ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            c1t0d0  ONLINE       0     0     0
            c1t1d0  ONLINE       0     0     0
errors: No known data errors

次の構文を使って、特定のバージョンやサポートされるリリースに関する追加情報を確認できます。


# zpool upgrade -v
This system is currently running ZFS pool version 22.

The following versions are supported:

VER  DESCRIPTION
---  --------------------------------------------------------
 1   Initial ZFS version
 2   Ditto blocks (replicated metadata)
 3   Hot spares and double parity RAID-Z
 4   zpool history
 5   Compression using the gzip algorithm
 6   bootfs pool property
 7   Separate intent log devices
 8   Delegated administration
 9   refquota and refreservation properties
 10  Cache devices
 11  Improved scrub performance
 12  Snapshot properties
 13  snapused property
 14  passthrough-x aclinherit
 15  user/group space accounting
 16  stmf property support
 17  Triple-parity RAID-Z
 18  Snapshot user holds
 19  Log device removal
 20  Compression using zle (zero-length encoding)
 21  Reserved
 22  Received properties

For more information on a particular version, including supported releases,
see the ZFS Administration Guide.

これで、zpool upgrade コマンドを実行してすべてのプールをアップグレードできます。次に例を示します。


# zpool upgrade -a

注 –

プールを新しい ZFS バージョンにアップグレードすると、古い ZFS バージョンを実行しているシステムのプールにアクセスできなくなります。