デバイスに関する基本情報のほとんどは、「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 プールの既存の構成に追加されます。
仮想デバイスがどのように検査されるかの詳細については、「使用中のデバイスを検出する」を参照してください。
次の例では、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 |
同様にディスクを 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 |
次の例は、ミラー化ストレージプールにミラー化ログデバイスを追加する方法を示しています。ストレージプールでログデバイスを使用する方法の詳細については、「別個の 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 |
キャッシュデバイスを 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 ルートプールのディスクを置き換える方法」を参照してください。
この例では、新しいデバイス 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 方向ミラーが作成されます。どのような場合にも、新しいデバイスを接続すると、すぐに再同期化が開始されます。
また、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 |
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 機能を使用する前に、次の考慮事項を確認してください。
RAID-Z 構成または複数のディスクから成る非冗長プールに対しては、この機能を使用できません。
zpool split 操作を試みる前に、データおよびアプリケーションの操作を終了しておいてください。
ディスクのフラッシュ書き込みキャッシュコマンドを無視するのではなく優先するようにディスクを設定しておくことは重要です。
再同期化が進行中の場合、プールを分割できません。
ミラー化プールの分割は、プールが 2 台か 3 台のディスクで構成されているときに行うのが最適です。このとき、元のプール内の最後のディスクが新しく作成されるプールで使用されます。その後、zpool attach コマンドを使用して元のミラー化ストレージプールを再作成するか、または新しく作成したプールをミラー化ストレージプールに変換することができます。この機能を使用して「既存の」ミラー化プールから「新しい」ミラー化プールを作成する方法は現時点で存在しません。
既存のプールが 3 方向ミラーの場合、分割操作後に新しいプールに含まれるディスクは 1 台です。既存のプールが 2 台のディスクから成る 2 方向ミラーの場合の結果は、2 台のディスクから成る 2 つの非冗長プールになります。2 台の追加ディスクを接続して、非冗長プールをミラー化プールに変換することが必要になります。
分割操作中にデータの冗長性を維持するためのよい方法は、3 台のディスクで構成されるミラー化ストレージプールを分割し、分割操作後に元のプールが 2 台のミラー化ディスクで構成されるようにすることです。
次の例では、c1t0d0、c1t2d0、c1t3d0 の 3 台のディスクから成る、trinity という名前のミラー化ストレージプールを分割します。分割後の 2 つのプールは、ディスク c1t0d0 と c1t2d0 から成るミラー化プール 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 |
デバイスをオフラインにするときは、次の点を考慮します。
プールをオフラインにすることはできません。エラーになります。たとえば、raidz1 構成の 2 つのデバイスをオフラインにしたり、最上位レベルの仮想デバイスをオフラインにしたりすることはできません。
# zpool offline tank c1t0d0 cannot offline c1t0d0: no valid replicas |
デフォルトでは、OFFLINE 状態は持続的です。システムを再起動しても、デバイスはオフラインのままです。
デバイスを一時的にオフラインにするには、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 |
ディスクのエラーに関するメッセージがコンソールに表示されるか、/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 ルートプールのディスクを置き換える方法」を参照してください。
ディスクを置き換えるための基本的な手順は次のとおりです。
必要に応じて、zpool offline コマンドでディスクをオフラインにします。
置き換えるディスクを取り外します。
交換用ディスクを挿入します。
zpool replace コマンドを実行します。次に例を示します。
# zpool replace tank c1t1d0 |
zpool online コマンドでディスクをオンラインに戻します。
Sun Fire x4500 などの一部のシステムでは、ディスクをオフラインにする前に構成解除する必要があります。このシステム上の同じスロット位置にあるディスクを置き換えようとしている場合は、この節の最初の例で説明したように zpool replace コマンドを実行するだけで置き換えを実行できます。
Sun Fire X4500 システムでディスクを置き換える例については、例 11–1 を参照してください。
ZFS ストレージプール内のデバイスを置き換えるときは、次のことを考慮します。
プールの autoreplace プロパティーをオンに設定した場合、そのプールに以前属していたデバイスと物理的に同じ位置に新しいデバイスが検出されると、そのデバイスが自動的にフォーマットされて置き換えられます。このプロパティーが有効なときは、zpool replace コマンドを使用する必要はありません。ハードウェアの種類によっては、この機能を使用できない場合があります。
交換用デバイスの容量が、ミラー化構成または RAID-Z 構成内でもっとも容量の小さいディスク以上である必要があります。
置き換える前のデバイスよりもサイズが大きい交換デバイスをプールに追加しても、プールは自動的にその最大サイズにまで拡張されません。プールの autoexpand プロパティーの値は、ディスクをプールに追加したときに、置き換え後の LUN がその最大サイズにまで拡張されるかどうかを決定します。デフォルトでは、autoexpand プロパティーは無効になっています。容量の大きい LUN をプールに追加する前後どちらでも、このプロパティーを有効にすることで LUN のサイズを拡張できます。
次の例では、ミラー化プール内の 16G バイトのディスク 2 台を 72G バイトのディスク 2 台で置き換えます。ディスクの置き換え後に autoexpand プロパティーを有効にして、LUN をその最大サイズにまで拡張します。
# zpool create pool mirror c1t16d0 c1t17d0 # zpool status pool: pool state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM pool ONLINE 0 0 0 mirror ONLINE 0 0 0 c1t16d0 ONLINE 0 0 0 c1t17d0 ONLINE 0 0 0 zpool list pool NAME SIZE ALLOC FREE CAP HEALTH ALTROOT pool 16.8G 76.5K 16.7G 0% ONLINE - # zpool replace pool c1t16d0 c1t1d0 # zpool replace pool c1t17d0 c1t2d0 # zpool list pool NAME SIZE ALLOC FREE CAP HEALTH ALTROOT pool 16.8G 88.5K 16.7G 0% ONLINE - # zpool set autoexpand=on pool # zpool list pool NAME SIZE ALLOC FREE CAP HEALTH ALTROOT pool 68.2G 117K 68.2G 0% ONLINE - |
大規模プール内で多数のディスクを置き換える場合は、新しいディスク上にデータを再同期化するために時間がかかります。また、ディスクの置き換えの合間に zpool scrub コマンドを実行して、置き換えたあとのデバイスが動作可能なこと、およびデータが正しく書き込まれることを確認することもできます。
障害の発生したディスクがホットスペアに自動的に置き換えられた場合は、障害の発生したディスクが置き換えられたあとでスペアの切り離しが必要になることがあります。ホットスペアの切り離しについては、「ストレージプール内のホットスペアをアクティブにする/非アクティブにする」を参照してください。
デバイスの置き換えの詳細については、「見つからないデバイスに関する問題を解決する」および「破損したデバイスを交換または修復する」を参照してください。
ホットスペア機能を使って、1 つ以上のストレージプールで障害が発生したデバイスまたはエラー状態のデバイスを置き換えるために使用するディスクを指定できます。「ホットスペア」として指定したデバイスはプール内ではアクティブデバイスではありませんが、プールのアクティブデバイスで障害が発生した場合には、そのデバイスがホットスペアに自動的に置き換えられます。
次の方法を使って、デバイスをホットスペアとして指定できます。
プール作成時に zpool create コマンドを使用する.
プール作成後に zpool add コマンドを使用する.
次の例は、プールの作成時にデバイスをホットスペアとして指定する方法を示しています。
# 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 remove コマンドはホットスペア、キャッシュデバイス、およびログデバイスを削除するときにのみ使用できます。
ディスクをホットスペアとして追加するには、ホットスペアの容量が、プール内でもっとも容量の大きいディスク以上である必要があります。小さなディスクをスペアとしてプールに追加することも許可されています。ただし、小さなスペアディスクがアクティブになると、自動的または zpool replace コマンドにより、次のようなエラーで操作が失敗します。
cannot replace disk3 with disk4: device is too small |
ホットスペアをアクティブにするには、次のようにします。
手動で置き換える – zpool replace コマンドを使用して、ストレージプール内で障害の発生したデバイスをホットスペアで置き換えます。
自動的に置き換える – FMA エージェントは、エラー状態を検出すると、プールを検査して使用可能なホットスペアがあるかどうかを調べます。ある場合は、障害の発生したデバイスを使用可能なスペアに置き換えます。
現在使用しているホットスペアで障害が発生した場合、FMA エージェントはそのスペアを切り離し、置き換えた状態を取り消します。続いてエージェントは、別のホットスペアが使用可能であれば、そのスペアを使ってデバイスを置き換えようとします。現時点では、デバイスがシステムから見えなくならないと ZFS 診断エンジンがエラー状態を生成しないので、この機能もその事実に制限されます。
障害の発生したデバイスにアクティブなスペアがある場合にデバイスを物理的に交換するときは、zpool detach コマンドを使用して元のデバイスを再度アクティブにして、スペアを切り離すことができます。プールの autoreplace プロパティーをオンに設定した場合は、新しいデバイスが挿入されオンライン処理が完了すると、スペアは自動的に切り離されてスペアプールに戻されます。
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–9 を参照してください。
ホットスペア内で一時的または永続的に交換を行う。例 4–10 を参照してください。
この例では、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 |
次の例では、障害が発生したディスク (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 |
障害が発生したディスクを、そのディスクを現在置き換えようとしているホットスペア内で一時的または永続的に交換することによって置き換えたい場合は、元の (障害が発生した) ディスクを切り離します。障害が発生したディスクが最終的に置き換えられたら、そのディスクをスペアとしてストレージプールに再び追加できます。次に例を示します。
# 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 |