Oracle Solaris ZFS 管理ガイド

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 ストレージプールをインポートする」を参照してください。