この章では、Oracle Solaris ZFS ファイルシステムの概要およびその機能と利点について説明します。また、このマニュアルの残りの章で使用されるいくつかの基本的な用語について説明します。
この章は、次の節で構成されます。
この節では、ZFS ファイルシステムの新機能について概説します。
Oracle Solaris 10 9/10 リリース: この Solaris リリースでは、zpool split コマンドを使用して、ミラー化されたストレージプールを分割できます。これにより、元のミラー化プール内の 1 つまたは複数のディスクが切り離され、別の同一のプールが作成されます。
詳細は、「ミラー化 ZFS ストレージプールを分割して新しいプールを作成する」を参照してください。
Oracle Solaris 10 9/10 リリース: この Solaris リリースでは、個々の ZFS ストレージプールに zpool-poolname という名前のプロセスが関連付けられます。このプロセス内のスレッドは、プールと関連付けられた圧縮やチェックサム計算などの入出力タスクを処理するための、プールの入出力処理スレッドです。このプロセスの目的は、各ストレージプールの CPU 使用率を確認できるようにすることです。これらのプロセスについての情報は、ps および prstat コマンドを使用して確認できます。これらのプロセスは大域ゾーンでのみ使用可能です。詳細は、SDC(7)を参照してください。
Oracle Solaris 10 9/10 リリース: この Solaris リリースでは、より詳細な領域割り当て情報を提供するように zpool list の出力が変更されています。次に例を示します。
# zpool list tank NAME SIZE ALLOC FREE CAP HEALTH ALTROOT tank 136G 55.2G 80.8G 40% ONLINE - |
以前の USED および AVAIL フィールドは、ALLOC および FREE に置き換えられました。
ALLOC フィールドは、すべてのデータセットおよび内部メタデータに割り当てられた物理領域の容量を示します。FREE フィールドは、プール内で割り当てられていない領域の容量を示します。
詳細は、「ZFS ストレージプールについての情報を表示する」を参照してください。
Oracle Solaris 10 9/10 リリース: 配下のデバイスが利用不能になった場合、電源障害が発生した場合、または冗長 ZFS 構成でサポートされている数よりも多くのデバイスで障害が発生した場合、ストレージプールが損傷を受ける可能性があります。このリリースでは、損傷したストレージプールを復旧するための新しいコマンド機能が用意されています。ただし、この復旧機能を使用すると、プールが機能停止する前に発生した最後の数回分のトランザクションが失われる場合があります。
zpool clear および zpool import コマンドはどちらも、損傷したプールを復旧する可能性のある -F オプションをサポートします。また、zpool status、zpool clear、または zpool import コマンドを実行すると損傷したプールが自動的に報告され、これらのコマンドはプールの復旧方法を説明します。
詳細は、「ZFS ストレージプール全体の損傷を修復する」を参照してください。
Oracle Solaris 10 9/10 リリース: ログデバイスに関する次の拡張機能が使用できます。
logbias プロパティー – このプロパティーを使用すると、特定のデータセットに対して同時に発生する要求の処理についてのヒントを ZFS に指示できます。logbias が latency に設定されている場合、ZFS はプールに別個のログデバイスが存在すればそれを使用して、短い待ち時間で要求を処理します。logbias が throughput に設定されている場合、ZFS はプールの別個のログデバイスを使用しません。その代わりに、ZFS は大域プールのスループットとリソースの使用効率を優先して同時操作を最適化します。デフォルト値は latency です。ほとんどの構成でデフォルト値が推奨されます。logbias=throughput の値を使用すると、データベースファイルの書き込みパフォーマンスが向上する場合があります。
ログデバイスの削除 – zpool remove コマンドを使用して、ログデバイスを ZFS ストレージプールから削除できるようになりました。単一のログデバイスは、デバイス名を指定することによって削除できます。ミラー化されたログデバイスは、ログの最上位レベルのミラーを指定することによって削除できます。別個のログデバイスがシステムから削除されると、ZIL トランザクションレコードがメインプールに書き込まれます。
最上位レベルの冗長仮想デバイスが数値 ID で識別されるようになりました。たとえば、2 台のディスクで構成されるミラー化ストレージプールで、最上位レベルの仮想デバイスは mirror-0 です。
詳細は、例 4–3 を参照してください。
Oracle Solaris 10 9/10 リリース: この Solaris リリースでは、冗長な RAID-Z 構成でシングルパリティー、ダブルパリティー、またはトリプルパリティーを使用できるようになりました。これはそれぞれ、1 つ、2 つ、または 3 つのデバイスで障害が発生しても、データを失うことなく処理を続行できることを意味します。raidz3 キーワードを指定すれば、トリプルパリティー RAID-Z 構成にすることができます。詳細は、「RAID-Z ストレージプールを作成する」を参照してください。
Oracle Solaris 10 9/10 リリース: 異なる自動スナップショットポリシーを実装しており、送信側にもう存在しないという理由で古いスナップショットが zfs receive によって意図せず破棄されてしまう場合、この Solaris リリースのスナップショット保持機能の使用を検討することができます。
スナップショットを保持すると、そのスナップショットは破棄されなくなります。また、この機能と zfs destroy -d コマンドを使用することにより、最後のクローンの消去を保留しながら、クローンが存在するスナップショットを削除できます。
1 つのスナップショットまたはスナップショットの集合を保持できます。たとえば次の構文は、保持タグ keep を tank/home/cindys/snap@1 に付与します。
# zfs hold keep tank/home/cindys@snap1 |
詳細は、「ZFS スナップショットの保持」を参照してください。
Oracle Solaris 10 9/10 リリース: この Solaris リリースでは、配下のデバイスが拡張されたときのシステムイベント (sysevent) を使用できます。これらのイベントを認識し、autoexpand プロパティーの設定と拡張された LUN の新しいサイズに基づいてプールを調整できるように ZFS の機能が拡張されています。動的な LUN の拡張イベントを受信したときの自動プール拡張を、プールの autoexpand プロパティーを使用して有効または無効にできます。
これらの機能を利用すると、LUN を拡張したあとでプールのエクスポートとインポートまたはシステムの再起動を行わなくても、プールの拡張された領域にアクセスすることができます。
たとえば、tank プールで LUN の自動拡張を有効にします。
# zpool set autoexpand=on tank |
または、autoexpand プロパティーを有効にしてプールを作成できます。
# zpool create -o autoexpand=on tank c1t13d0 |
autoexpand プロパティーはデフォルトで無効なため、LUN を拡張するかどうかは自由に決定できます。
zpool online - e コマンドを使って LUN を拡張することもできます。次に例を示します。
# zpool online -e tank c1t6d0 |
あるいは、zpool replace 機能を使って LUN を接続または使用可能にしたあとで autoexpand プロパティーを再設定できます。たとえば、8G バイトのディスク 1 台 (c0t0d0) で構成される次のプールを作成します。8G バイトのディスクを 16G バイトのディスク (c1t13d0) に置き換えても、autoexpand プロパティーを有効にするまでプールのサイズは拡張されません。
# zpool create pool c0t0d0 # zpool list NAME SIZE ALLOC FREE CAP HEALTH ALTROOT pool 8.44G 76.5K 8.44G 0% ONLINE - # zpool replace pool c0t0d0 c1t13d0 # zpool list NAME SIZE ALLOC FREE CAP HEALTH ALTROOT pool 8.44G 91.5K 8.44G 0% ONLINE - # zpool set autoexpand=on pool # zpool list NAME SIZE ALLOC FREE CAP HEALTH ALTROOT pool 16.8G 91.5K 16.8G 0% ONLINE - |
前の例で autoexpand プロパティーを有効にせずに LUN を拡張する別の方法として、デバイスがすでにオンラインであるにもかかわらず zpool online - e コマンドを使用することができます。次に例を示します。
# zpool create tank c0t0d0 # zpool list tank NAME SIZE ALLOC FREE CAP HEALTH ALTROOT tank 8.44G 76.5K 8.44G 0% ONLINE - # zpool replace tank c0t0d0 c1t13d0 # zpool list tank NAME SIZE ALLOC FREE CAP HEALTH ALTROOT tank 8.44G 91.5K 8.44G 0% ONLINE - # zpool online -e tank c1t13d0 # zpool list tank NAME SIZE ALLOC FREE CAP HEALTH ALTROOT tank 16.8G 90K 16.8G 0% ONLINE - |
デバイスの置き換えに関するこのリリースのその他の拡張機能には、次のものがあります。
以前のリリースの ZFS では、交換用ディスクのサイズが少しでも違っていると、既存のディスクを別のディスクと交換したり、ディスクを接続したりできませんでした。このリリースでは、プールにまだ空きがある場合であれば、既存のディスクをほぼ同じサイズの別のディスクと交換したり、ほぼ同じサイズの新しいディスクを接続したりできます。
このリリースでは、LUN を拡張するためにシステムを再起動したり、プールをエクスポートしてインポートしたりする必要はありません。すでに説明したように、 autoexpand プロパティーを有効にするか、zpool online -e コマンドを使うことによって LUN の全体サイズを拡張できます。
デバイスの置き換えについては、「ストレージプール内のデバイスを置き換える」を参照してください。
Solaris 10 10/09 リリース: この Solaris リリースでは、JumpStart プロファイルを設定して、ZFS ルートプールのフラッシュアーカイブを特定できます。詳細は、「ZFS ルートファイルシステムのインストール (Oracle Solaris フラッシュアーカイブインストール)」を参照してください。
Solaris 10 10/09 リリース: 以前の Solaris リリースでは、割り当て制限と予約を ZFS ファイルシステムに適用して、ディスク領域の管理および予約を行っていました。
Solaris のこのリリースでは、特定のユーザーやグループが所有するファイルによって消費されるディスク容量に割り当て制限を設定できます。例えば、多数のユーザーまたグループが存在する環境でユーザーおよびグループの割り当て制限を設定する場合もあります。
ユーザーの割り当て制限は、zfs userquota プロパティーを使用して設定できます。グループの割り当て制限を設定するには、zfs groupquota プロパティーを使用します。次に例を示します。
# zfs set userquota@user1=5G tank/data # zfs set groupquota@staff=10G tank/staff/admins |
ユーザーまたはグループの現在の割り当て制限の設定を表示するには、次のようにします。
# zfs get userquota@user1 tank/data NAME PROPERTY VALUE SOURCE tank/data userquota@user1 5G local # zfs get groupquota@staff tank/staff/admins NAME PROPERTY VALUE SOURCE tank/staff/admins groupquota@staff 10G local |
割り当て制限に関する一般的な情報を表示するには、次のようにします。
# zfs userspace tank/data TYPE NAME USED QUOTA POSIX User root 3K none POSIX User user1 0 5G |
# zfs groupspace tank/staff/admins TYPE NAME USED QUOTA POSIX Group root 3K none POSIX Group staff 0 10G |
個別ユーザーのディスク容量使用状況は、userused@user プロパティーを使って表示できます。グループのディスク容量使用状況は、groupused@group プロパティーを使って表示できます。次に例を示します。
# zfs get userused@user1 tank/staff NAME PROPERTY VALUE SOURCE tank/staff userused@user1 213M local # zfs get groupused@staff tank/staff NAME PROPERTY VALUE SOURCE tank/staff groupused@staff 213M local |
ユーザーの割り当て制限の設定の詳細については、「ZFS の割り当て制限と予約を設定する」を参照してください。
Solaris 10 10/09 リリース: 以前の Solaris リリースでは、すべてのファイルが 0664 アクセス権または 0666 アクセス権付きで作成されるように、ACL 継承を適用することができました。このリリースでは、ファイル作成モードの実行ビットを継承後の ACL に必要に応じて含める場合、aclinherit モードを設定して、実行権を継承後の ACL に渡すことができます。
ZFS データセットで aclinherit=passthrough-x を有効にすると、cc または gcc コンパイラツールによって生成される出力ファイルに対する実行権を含めることができます。継承された ACL に実行権が含まれていない場合、コンパイラからの実行可能な出力は、chmod コマンドを使用してファイルのアクセス権を変更するまで実行できません。
詳細は、例 8–12 を参照してください。
Solaris 10 10/09 および Oracle Solaris 10 9/10: これらのリリースでは、ZFS ファイルシステムに関する拡張機能として、次のものが用意されています。
スナップショットストリームプロパティーに関する ZFS の拡張機能 – ローカルのプロパティー設定と異なる受信プロパティーを設定できます。たとえば、圧縮プロパティーが無効に設定されたストリームを受信する一方で、受信側ファイルシステムでは圧縮を有効にする場合を考えます。このとき、受信するストリームに関して、圧縮プロパティーの値が受信側ではオフ、ローカルではオンということになります。ローカルの値は受信側の値に優先するため、送信側の設定によって受信側の値が置き換えられることを心配する必要はありません。zfs get コマンドを実行すると、圧縮プロパティーの実効値が VALUE 列の下に表示されます。
送信側とローカルのプロパティー値に関連した、ZFS の新しいコマンドオプションとプロパティーには次のものがあります。
ローカルのプロパティー値を受信値 (存在する場合) に戻すには、zfs inherit -S を使用します。プロパティーに受信値が存在しない場合、zfs inherit - S コマンドの動作は、-S オプションを指定しない zfs inherit コマンドと同じです。プロパティーに受信値が存在する場合、zfs inherit コマンドは、zfs inherit -S コマンドの発行によって継承値が受信値に戻されるまでの間、受信値を継承値でマスクします。
zfs get -o を使用すると、新しい非デフォルトの RECEIVED 列を含めることができます。または、zfs get -o all コマンドを使用すると、RECEIVED を含むすべての列を含めることができます。
zfs send -p オプションを使用すると、-R オプションを使用せずにプロパティーを送信ストリームに含めることができます。
また、zfs send -e オプションを使用すると、送信スナップショットの最後の要素を使用して新しいスナップショット名を決定できます。次の例では、poola/bee/cee@1 スナップショットを poold/eee ファイルシステムに送信し、スナップショット名の最後の要素 (cee@1) のみを使用して、受信側のファイルシステムおよびスナップショットを作成します。
# zfs list -rt all poola NAME USED AVAIL REFER MOUNTPOINT poola 134K 134G 23K /poola poola/bee 44K 134G 23K /poola/bee poola/bee/cee 21K 134G 21K /poola/bee/cee poola/bee/cee@1 0 - 21K - # zfs send -R poola/bee/cee@1 | zfs receive -e poold/eee # zfs list -rt all poold NAME USED AVAIL REFER MOUNTPOINT poold 134K 134G 23K /poold poold/eee 44K 134G 23K /poold/eee poold/eee/cee 21K 134G 21K /poold/eee/cee poold/eee/cee@1 0 - 21K - |
プール作成時の ZFS ファイルシステムプロパティーの設定 - ストレージプールを作成するときに ZFS ファイルシステムプロパティーを設定することができます。次の例では、プールと一緒に作成された ZFS ファイルシステムで圧縮が有効になっています。
# zpool create -O compression=on pool mirror c0t1d0 c0t2d0 |
ZFS ファイルシステムにおけるキャッシュプロパティーの設定 - 2 つの新しい ZFS ファイルシステムプロパティーを使用して、プライマリキャッシュ (ARC) およびセカンダリキャッシュ (L2ARC) にキャッシュされる内容を制御できます。キャッシュのプロパティーは、次のように設定します。
primarycache – ARC にキャッシュされる内容を制御します。
secondarycache – L2ARC にキャッシュされる内容を制御します。
両方のプロパティーに指定できる値 – all、none、metadata。all に設定すると、ユーザーデータとメタデータの両方がキャッシュされます。none に設定すると、ユーザーデータも、メタデータも、キャッシュされません。metadata に設定すると、メタデータのみがキャッシュされます。デフォルトは all です。
これらのプロパティーは、既存のファイルシステムに設定できます。または、ファイルシステムの作成時に設定できます。次に例を示します。
# zfs set primarycache=metadata tank/datab # zfs create -o primarycache=metadata tank/newdatab |
既存のファイルシステムでこれらのプロパティーを設定した場合、これらのプロパティーの値に基づいて、New I/O のみがキャッシュされます。
一部のデータベース環境では、ユーザーデータをキャッシュしないほうが利点が得られることがあります。キャッシュプロパティーの設定が、使用している環境に照らし合わせて適切かどうかを判定する必要があります。
ディスクスペースアカウンティングプロパティーの表示 – 新しい読み取り専用ファイルシステムプロパティーであり、クローン、ファイルシステム、ボリューム、およびスナップショットに関するディスク領域使用状況を確認する場合に役立ちます。属性は次のとおりです。
usedbychildren – このデータセットの子によって使用されるディスク領域の量を特定します。この領域は、データセットのすべての子が破棄されると、解放されます。このプロパティーの省略名は usedchild です。
usedbydataset – このデータセット自体によって使用されるディスク領域の量を特定します。この領域は、最初にあらゆるスナップショットが破棄されてから refreservation がすべて削除された後に、データセットが破棄されると、解放されます。このプロパティーの省略名は usedds です。
usedbyrefreservation – このデータセットに設定されている refreservation によって使用されるディスク領域の量を特定します。この領域は、refreservation が削除されると、解放されます。このプロパティーの省略名は usedrefreserv です。
usedbysnapshots – このデータセットのスナップショットによって消費されるディスク領域の量を特定します。この領域は、このデータセットのすべてのスナップショットが破棄されると、解放されます。これはスナップショットの used プロパティーの値を単純に合計した結果ではないことに注意してください。複数のスナップショットで共有されているディスク容量も存在するためです。このプロパティーの省略名は usedsnap です。
これらの新しいプロパティーは、used プロパティーの値を、ディスク容量を消費する各種の要素に分割します。具体的には、used プロパティーの値は次のように分割されます。
used property = usedbychildren + usedbydataset + usedbyrefreservation + usedbysnapshots |
これらのプロパティーは、zfs list -o space コマンドを使用して表示できます。次に例を示します。
$ zfs list -o space NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD rpool 25.4G 7.79G 0 64K 0 7.79G rpool/ROOT 25.4G 6.29G 0 18K 0 6.29G rpool/ROOT/snv_98 25.4G 6.29G 0 6.29G 0 0 rpool/dump 25.4G 1.00G 0 1.00G 0 0 rpool/export 25.4G 38K 0 20K 0 18K rpool/export/home 25.4G 18K 0 18K 0 0 rpool/swap 25.8G 512M 0 111M 401M 0 |
前述のコマンドは、zfs list - o name,avail,used,usedsnap,usedds,usedrefreserv,usedchild -t filesystem,volume コマンドと同等です。
スナップショットの表示– listsnapshots プールプロパティーは、zfs list コマンドでスナップショット情報が表示されるかどうかを制御します。デフォルト値は on です。つまり、デフォルトでは、スナップショット情報は表示されます。
システムに存在する ZFS スナップショットの数が多い場合に、zfs list コマンドでスナップショット情報の表示を無効にするには、次のようにして listsnapshots プロパティーを無効にします。
# zpool get listsnapshots pool NAME PROPERTY VALUE SOURCE pool listsnapshots on default # zpool set listsnaps=off pool |
listsnapshots プロパティーを無効にした場合、zfs list -t snapshots コマンドを使用してスナップショット情報を一覧表示できます。次に例を示します。
# zfs list -t snapshot NAME USED AVAIL REFER MOUNTPOINT pool/home@today 16K - 22K - pool/home/user1@today 0 - 18K - pool/home/user2@today 0 - 18K - pool/home/user3@today 0 - 18K - |
Solaris 10 10/09 リリース: このリリースでは、zpool status コマンド出力におけるインテントログ障害を ZFS が認識します。これらのエラーは障害管理アーキテクチャー (FMA) によっても報告されます。ZFS と FMA は両方とも、インテントログ障害から回復する方法を説明します。
たとえば、別個のログデバイスを持つプールに対する同期書き込み操作が確定される前にシステムが突然シャットダウンされた場合には、次のようなメッセージが表示されます。
# zpool status -x pool: pool state: FAULTED status: One or more of the intent logs could not be read. Waiting for adminstrator intervention to fix the faulted pool. action: Either restore the affected device(s) and run 'zpool online', or ignore the intent log records by running 'zpool clear'. scrub: none requested config: NAME STATE READ WRITE CKSUM pool FAULTED 0 0 0 bad intent log mirror ONLINE 0 0 0 c0t1d0 ONLINE 0 0 0 c0t4d0 ONLINE 0 0 0 logs FAULTED 0 0 0 bad intent log c0t5d0 UNAVAIL 0 0 0 cannot open |
そのような場合には、次の方法でログデバイスの障害を解決できます。
ログデバイスを交換または回復します(この例の場合、ログデバイスは c0t5d0)。
ログデバイスをオンラインに戻します。
# zpool online pool c0t5d0 |
障害が発生したログデバイスのエラー状況がリセットされます。
# zpool clear pool |
障害が発生したログデバイスを交換せずにこのエラーから回復するために、zpool clear コマンドを使用してエラーを解決することができます。このシナリオでは、プールが縮退モードで実行され、ログレコードは、ログデバイスが交換されるまで、メインプールに書き込まれます。
ログデバイスの障害の発生を回避するため、ミラー化ログデバイスを利用することを検討してください。
Solaris 10 10/09 リリース: このリリースでは、プールを作成するとき、ストレージプールデータをキャッシュするために使用されるキャッシュデバイスを指定することができます。
キャッシュデバイスにより、メインメモリーとディスクの間にキャッシュ層が追加されます。キャッシュデバイスを使用すると、ほぼ静的なコンテンツをランダムに読み込む作業負荷のパフォーマンスが大幅に向上します。
プールの作成時に 1 つ以上のキャッシュデバイスを指定できます。次に例を示します。
# zpool create pool mirror c0t2d0 c0t4d0 cache c0t0d0 # zpool status pool pool: pool state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM pool ONLINE 0 0 0 mirror ONLINE 0 0 0 c0t2d0 ONLINE 0 0 0 c0t4d0 ONLINE 0 0 0 cache c0t0d0 ONLINE 0 0 0 errors: No known data errors |
キャッシュデバイスを追加すると、そのキャッシュデバイスにメインメモリーの内容が徐々に書き込まれていきます。キャッシュデバイスのサイズによっては、デバイスがいっぱいになるまでに 1 時間以上かかる場合もあります。zpool iostat コマンドを次のように使用して、容量と読み込みを監視できます。
# zpool iostat -v pool 5 |
プールの作成後に、プールに対してキャッシュデバイスの追加や削除を行うことができます。
詳細は、「キャッシュデバイスを使用して ZFS ストレージプールを作成する」および例 4–4 を参照してください。
Solaris 10 5/09 リリース: このリリースでは、ZFS 環境で Oracle Solaris Live Upgrade を使用してゾーンを移行するためのサポートが拡張されています。詳細は、「ゾーンが含まれているシステムを Oracle Solaris Live Upgrade で移行またはアップグレードする (Solaris 10 5/09 以降)」を参照してください。
このリリースで認識されている問題のリストについては、『Solaris 10 5/09 ご使用にあたって』を参照してください。
Solaris 10 10/08 リリース: このリリースでは、ZFS ルートファイルシステムをインストールおよび起動できます。初期インストールまたは JumpStart 機能を使用して、ZFS ルートファイルシステムをインストールできます。あるいは、Oracle Solaris Live Upgrade を使用して、UFS ルートファイルシステムを ZFS ルートファイルシステムに移行できます。スワップデバイスとダンプデバイスに関する ZFS のサポートも追加されています。詳細は、第 5 章Oracle Solaris ZFS ルートファイルシステムのインストールと起動を参照してください。
このリリースで認識されている問題のリストについては、次のサイトを参照してください。
http://hub.opensolaris.org/bin/view/Community+Group+zfs/boot
『Solaris 10 10/08 ご使用にあたって』も参照してください。
Solaris 10 10/08 リリース: このリリースでは、事前にマウント解除しなくてもデータセットをロールバックできます。そのため、マウント解除処理を強制的に行う zfs rollback -f オプションは不要になりました。-f オプションは今後はサポートされず、指定しても無視されます。
Solaris 10 10/08 リリース: このリリースでは、zfs send コマンドに次の拡張機能が追加されています。このコマンドを使用して、次の操作を実行できるようになりました。
1 つのスナップショットのすべての増分ストリームを累積スナップショットに送信します。次に例を示します。
# zfs list NAME USED AVAIL REFER MOUNTPOINT pool 428K 16.5G 20K /pool pool/fs 71K 16.5G 21K /pool/fs pool/fs@snapA 16K - 18.5K - pool/fs@snapB 17K - 20K - pool/fs@snapC 17K - 20.5K - pool/fs@snapD 0 - 21K - # zfs send -I pool/fs@snapA pool/fs@snapD > /snaps/fs@combo |
この構文は、fs@snapA から fs@snapD までのすべての増分スナップショットを fs@combo に送信します。
元のスナップショットからの増分ストリームを送信してクローンを作成します。増分ストリームを受け入れるには、元のスナップショットが受信側にすでに存在している必要があります。次に例を示します。
# zfs send -I pool/fs@snap1 pool/clone@snapA > /snaps/fsclonesnap-I . . # zfs receive -F pool/clone < /snaps/fsclonesnap-I |
指定されたスナップショットまでのすべての下位ファイルシステムの複製ストリームを送信します。受信時には、すべてのプロパティー、スナップショット、下位ファイルシステム、およびクローンが維持されます。次に例を示します。
# zfs send -R pool/fs@snap > snaps/fs-R |
詳細な例については、例 7–1 を参照してください。
増分複製ストリームを送信します。次に例を示します。
# zfs send -R -[iI] @snapA pool/fs@snapD |
詳細な例については、例 7–1 を参照してください。
詳細は、「複雑な ZFS スナップショットストリームを送信および受信する」を参照してください。
Solaris 10 10/08 リリース: このリリースでは、ZFS の割り当て制限と予約の既存機能に加え、データセットの割り当て制限と予約が追加されました。この機能では、スナップショットやクローンなどの子孫はディスク容量の計算に含まれません。
refquota プロパティーは、データセットが消費できるディスク容量に対して強い制限値を設定します。この強い制限値には、スナップショットやクローンなどの下位データで使用されるディスク容量は含まれません。
refreservation プロパティーは、1 つのデータセットに対して保証される最小限のディスク容量を設定します。下位データは含まれません。
たとえば、studentA に 10G バイトの refquota 制限を設定すると、「基準」ディスク容量として 10G バイトの強い制限値を設定することができます。柔軟性を高めるために、20G バイトの割り当て制限を設定して、studentA のスナップショットを管理することもできます。
# zfs set refquota=10g tank/studentA # zfs set quota=20g tank/studentA |
詳細は、「ZFS の割り当て制限と予約を設定する」を参照してください。
Solaris 10 10/08 リリース: ZFS ストレージプールのプロパティーは以前のリリースで導入されました。このリリースでは、cachefile および failmode の 2 つのプロパティーが用意されています。
ここでは、このリリースの新しいストレージプールプロパティーについて説明します。
cachefile プロパティー – このプロパティーは、プール構成情報がキャッシュされる場所を制御します。システムの起動時に、キャッシュ内のすべてのプールが自動的にインポートされます。ただし、インストール環境とクラスタ化環境では、プールが自動的にインポートされないようにするために、この情報を別の場所にキャッシュすることが必要になる場合もあります。
プール構成を別の場所にキャッシュするようにこのプロパティーを設定し、あとで zpool import -c コマンドを使用してインポートすることができます。ほとんどの ZFS 構成で、このプロパティーは使用されません。
cachefile プロパティーは持続性を持たず、ディスクには格納されません。このプロパティーは、プール情報をキャッシュしないように指定するために以前の Solaris リリースで使用されていた temporary プロパティーに代わるものです。
failmode プロパティー – このプロパティーは、デバイスの接続が失われたことによる壊滅的なプール障害やプールの全デバイスの障害が発生した場合の動作を決定します。failmode プロパティーの値は、wait、continue、または panic に設定できます。デフォルト値は wait です。これは、デバイスを再接続するか障害の発生したデバイスを交換してから、zpool clear コマンドでエラーを解決する必要があることを意味します。
failmode プロパティーは、ほかの設定可能な ZFS プロパティーと同様に、プールの作成前または作成後に設定することができます。次に例を示します。
# zpool set failmode=continue tank # zpool get failmode tank NAME PROPERTY VALUE SOURCE tank failmode continue local |
# zpool create -o failmode=continue users mirror c0t1d0 c1t1d0 |
プールプロパティーについては、表 4–1 を参照してください。
Solaris 10 10/08 リリース: zpool history コマンドが拡張され、次の新機能が追加されています。
ZFS ファイルシステムのイベント情報が表示されるようになりました。次に例を示します。
# zpool history History for 'rpool': 2010-06-23.09:30:12 zpool create -f -o failmode=continue -R /a -m legacy -o cachefile=/tmp/root/etc/zfs/zpool.cache rpool c1t0d0s0 2010-06-23.09:30:13 zfs set canmount=noauto rpool 2010-06-23.09:30:13 zfs set mountpoint=/rpool rpool 2010-06-23.09:30:13 zfs create -o mountpoint=legacy rpool/ROOT 2010-06-23.09:30:14 zfs create -b 8192 -V 2048m rpool/swap 2010-06-23.09:30:14 zfs create -b 131072 -V 1024m rpool/dump 2010-06-23.09:30:15 zfs create -o canmount=noauto rpool/ROOT/zfsBE 2010-06-23.09:30:16 zpool set bootfs=rpool/ROOT/zfsBE rpool 2010-06-23.09:30:16 zfs set mountpoint=/ rpool/ROOT/zfsBE 2010-06-23.09:30:16 zfs set canmount=on rpool 2010-06-23.09:30:16 zfs create -o mountpoint=/export rpool/export 2010-06-23.09:30:17 zfs create rpool/export/home |
-l オプションを使用して、ユーザー名、ホスト名、および操作が実行されたゾーンを含む長形式を表示できます。次に例を示します。
# zpool history -l rpool History for 'tank': 2010-06-24.13:07:58 zpool create tank mirror c2t2d0 c2t5d0 [user root on neo:global] 2010-06-24.13:08:23 zpool scrub tank [user root on neo:global] 2010-06-24.13:38:42 zpool clear tank [user root on neo:global] 2010-06-29.11:44:18 zfs create tank/home [user root on neo:global] 2010-06-29.13:28:51 zpool clear tank c2t5d0 [user root on neo:global] 2010-06-30.14:07:40 zpool add tank spare c2t1d0 [user root on neo:global |
-i オプションを使用すると、診断目的のために内部イベント情報を表示できます。次に例を示します。
# zpool history -i tank History for 'tank': 2010-06-24.13:07:58 zpool create tank mirror c2t2d0 c2t5d0 2010-06-24.13:08:23 [internal pool scrub txg:6] func=1 mintxg=0 maxtxg=6 2010-06-24.13:08:23 [internal pool create txg:6] pool spa 22; zfs spa 22; zpl 4; uts neo 5.10 Generic_142909-13 sun4u 2010-06-24.13:08:23 [internal pool scrub done txg:6] complete=1 2010-06-24.13:08:23 zpool scrub tank 2010-06-24.13:38:42 zpool clear tank 2010-06-24.13:38:42 [internal pool scrub txg:69] func=1 mintxg=3 maxtxg=8 2010-06-24.13:38:42 [internal pool scrub done txg:69] complete=1 2010-06-29.11:44:18 [internal create txg:14241] dataset = 34 2010-06-29.11:44:18 zfs create tank/home 2010-06-29.13:28:51 zpool clear tank c2t5d0 2010-06-30.14:07:40 zpool add tank spare c2t1d0 |
zpool history コマンドの使用方法の詳細については、「ZFS の問題を解決する」を参照してください。
Solaris 10 10/08 リリース: このリリースでは、今後の ZFS ファイルシステムの拡張機能を既存のファイルシステムに提供する zfs upgrade コマンドが追加されています。ZFS ストレージプールには、プール拡張を既存のストレージプールに提供する同様のアップグレード機能が備わっています。
次に例を示します。
# zfs upgrade This system is currently running ZFS filesystem version 3. All filesystems are formatted with the current version. |
アップグレードされたファイルシステム、およびこれらのアップグレードされたファイルシステムから zfs send コマンドによって作成されたストリームには、古いソフトウェアリリースを実行しているシステムからはアクセスできません。
Solaris 10 10/08 リリース: このリリースでは、詳細なアクセス権を付与して、権限のないユーザーに ZFS 管理タスクの実行を許可することができます。
zfs allow と zfs unallow の各コマンドを使ってアクセス権を委任および削除できます。
プールの delegation プロパティーを使って委任管理を変更できます。次に例を示します。
# zpool get delegation users NAME PROPERTY VALUE SOURCE users delegation on default # zpool set delegation=off users # zpool get delegation users NAME PROPERTY VALUE SOURCE users delegation off local |
デフォルトでは、delegation プロパティーは有効になっています。
詳細は、第 9 章Oracle Solaris ZFS 委任管理および zfs(1M) を参照してください。
Solaris 10 10/08 リリース: 同期トランザクションの POSIX 要件を満たすために、ZFS インテントログ (ZIL) が提供されています。たとえば、多くの場合、データベースがシステムコールから戻るときは、そのトランザクションが安定したストレージデバイス上に置かれている必要があります。NFS やその他のアプリケーションでは、データの安定性を確保するために fsync() も使用できます。デフォルトでは、ZIL はメインストレージプール内のブロックから割り当てられます。この Solaris リリースでは、ZIL ブロックが引き続きメインストレージプールから割り当てられるか、それとも別個のログデバイスから割り当てられるかを指定できます。NVRAM や専用ディスクなどで、別個のインテントログデバイスを ZFS ストレージプール内で使用することにより、パフォーマンスを向上できる可能性があります。
ZFS インテントログ用のログデバイスは、データベースのログファイルとは関連がありません。
ZFS ログデバイスの設定は、ストレージプールの作成時または作成後に行えます。ログデバイスの設定の例については、「ログデバイスを持つ ZFS ストレージプールを作成する」および「ストレージプールにデバイスを追加する」を参照してください。
既存のログデバイスにログデバイスを接続して、ミラー化ログデバイスを作成できます。この操作は、ミラー化されていないストレージプール内にデバイスを接続する操作と同じです。
使用している環境で別個の ZFS ログデバイスを設定することが適切かどうかを判断するには、次の点を考慮してください。
別個のログデバイスを実装することによって得られるパフォーマンスの向上は、デバイスの種類、プールのハードウェア構成、およびアプリケーションの作業負荷によって異なります。パフォーマンスの基礎情報については、次のブログを参照してください。
ログデバイスは複製解除したりミラー化したりできますが、ログデバイスで RAID-Z はサポートされていません。
別個のログデバイスがミラー化されていない場合、ログを格納しているデバイスに障害が発生すると、ログブロックの格納はストレージプールに戻ります。
ログデバイスは、より大規模なストレージプールの一部として、追加、置き換え、接続、切り離し、インポート、およびエクスポートすることができます。ログデバイスの削除は Solaris 10 9/10 リリースから可能になっています。
ログデバイスの最小サイズは、プール内の各デバイスの最小サイズと同じで、64M バイトです。ログデバイスに格納される可能性のある処理中のデータは比較的少量です。ログのトランザクション (システムコール) がコミットされると、ログブロックは解放されます。
ログデバイスの最大サイズは物理メモリーのサイズの約 1/2 になるようにしてください。これは、格納される可能性のある処理中のデータの最大量です。たとえば、16G バイトの物理メモリーを備えたシステムの場合、ログデバイスの最大サイズとして 8G バイトを検討してください。
Solaris 10 10/08 リリース: -zfs create、zfs clone、および zfs rename コマンドで p オプションを使用すると、中間データセットがまだ存在しない場合にそれをすばやく作成することができます。
次の例では、ZFS データセット (users/area51) が datab ストレージプールに作成されます。
# zfs list NAME USED AVAIL REFER MOUNTPOINT datab 106K 16.5G 18K /datab # zfs create -p -o compression=on datab/users/area51 |
作成処理中に中間データセットがすでに存在していれば、この処理は正常に完了します。
指定したプロパティーは、中間データセットではなく、ターゲットデータセットに適用されます。次に例を示します。
# zfs get mountpoint,compression datab/users/area51 NAME PROPERTY VALUE SOURCE datab/users/area51 mountpoint /datab/users/area51 default datab/users/area51 compression on local |
中間データセットは、デフォルトのマウントポイントで作成されます。中間データセットに対する追加のプロパティーはすべて無効になります。次に例を示します。
# zfs get mountpoint,compression datab/users NAME PROPERTY VALUE SOURCE datab/users mountpoint /datab/users default datab/users compression off default |
詳細は、zfs(1M) のマニュアルページを参照してください。
Solaris 10 10/08 リリース: このリリースの ZFS では、削除されたデバイスへの応答がより効果的になり、挿入されたデバイスを自動的に識別できるようになっています。
zpool replace コマンドを使用しなくても、既存のデバイスを同等のデバイスに置き換えることができます。
autoreplace プロパティーは、自動デバイス交換を制御します。オフに設定されている場合、管理者が zpool replace コマンドを使ってデバイス交換を開始する必要があります。オンに設定されている場合、そのプールに以前属していたデバイスと物理的に同じ位置にある新しいデバイスは、いずれも自動的にフォーマットされ、置き換えられます。デフォルトの動作は「オフ」です。
システムの実行中にデバイスまたはホットスペアが物理的に取り外されると、ストレージプールの状態は REMOVED になります。可能であれば、取り外されたデバイスはホットスペアデバイスで置き換えられます。
デバイスをいったん取り外してから挿入し直すと、デバイスはオンラインになります。デバイスを挿入し直したときにホットスペアがアクティブになっていた場合は、オンライン処理が完了すると、そのホットスペアが取り外されます。
デバイスの着脱時の自動検出はハードウェアに依存しているため、すべてのプラットフォームには対応していない可能性があります。たとえば、USB デバイスは挿入時に自動的に構成されます。ただし、cfgadm -c configure コマンドを使用して SATA ドライブを構成する必要がある場合もあります。
ホットスペアは、オンラインおよび使用可能かどうか定期的に確認されます。
詳細は、zpool(1M) のマニュアルページを参照してください。
Solaris 10 10/08 リリース: zfs rename -r コマンドを使用して、すべての ZFS 子孫スナップショットの名前を再帰的に変更することができます。次に例を示します。
まず、一連の ZFS ファイルシステムのスナップショットが作成されます。
# zfs snapshot -r users/home@today # zfs list NAME USED AVAIL REFER MOUNTPOINT users 216K 16.5G 20K /users users/home 76K 16.5G 22K /users/home users/home@today 0 - 22K - users/home/markm 18K 16.5G 18K /users/home/markm users/home/markm@today 0 - 18K - users/home/marks 18K 16.5G 18K /users/home/marks users/home/marks@today 0 - 18K - users/home/neil 18K 16.5G 18K /users/home/neil users/home/neil@today 0 - 18K - |
その翌日にスナップショットの名前が変更されます。
# zfs rename -r users/home@today @yesterday # zfs list NAME USED AVAIL REFER MOUNTPOINT users 216K 16.5G 20K /users users/home 76K 16.5G 22K /users/home users/home@yesterday 0 - 22K - users/home/markm 18K 16.5G 18K /users/home/markm users/home/markm@yesterday 0 - 18K - users/home/marks 18K 16.5G 18K /users/home/marks users/home/marks@yesterday 0 - 18K - users/home/neil 18K 16.5G 18K /users/home/neil users/home/neil@yesterday 0 - 18K - |
スナップショットは、再帰的な名前変更が可能な唯一の種類のデータセットです。
スナップショットの詳細については、「ZFS スナップショットの概要」と、周期的スナップショットの作成方法を記述した次のブログエントリを参照してください。
http://blogs.sun.com/mmusante/entry/rolling_snapshots_made_easy
Solaris 10 10/08 リリース: この Solaris リリースでは、ZFS ファイルシステムに対して lzjb 圧縮だけでなく gzip 圧縮も設定できます。圧縮は、gzip と指定することも、gzip-N (N は 1 ~ 9) と指定することもできます。次に例を示します。
# zfs create -o compression=gzip users/home/snapshots # zfs get compression users/home/snapshots NAME PROPERTY VALUE SOURCE users/home/snapshots compression gzip local # zfs create -o compression=gzip-9 users/home/oldfiles # zfs get compression users/home/oldfiles NAME PROPERTY VALUE SOURCE users/home/oldfiles compression gzip-9 local |
ZFS のプロパティーの設定方法の詳細については、「ZFS プロパティーを設定する」を参照してください。
Solaris 10 10/08 リリース: 信頼性を高める機能として、可能であれば、ZFS ファイルシステムのメタデータが異なるディスクにまたがって何度か自動的に保存されます。この機能は、「ditto ブロック」として知られています。
この Solaris リリースでは、zfs set copies コマンドを使用して、ファイルシステムごとにユーザーデータの複数のコピーを保存することもできます。次に例を示します。
# zfs set copies=2 users/home # zfs get copies users/home NAME PROPERTY VALUE SOURCE users/home copies 2 local |
使用できる値は 1、2、または 3 です。デフォルト値は 1。これらのコピーは、ミラー化構成または RAID-Z 構成などのプールレベルの冗長性を補うものです。
ZFS ユーザーデータの複数のコピーを保存する利点は次のとおりです。
すべての ZFS 構成について、メディア障害 (一般に「ビット腐敗」と呼ばれる) などの回復不能なブロックの読み取り障害から回復できるようにすることで、データ保持機能を向上させます。
使用できるディスクが 1 台だけの場合でもデータ保護が提供されます。
ストレージプールの機能を超えて、ファイルシステムごとにデータ保護ポリシーを選択できます。
ストレージプールでの ditto ブロックの割り当てによっては、複数のコピーが単一のディスクに保存される場合もあります。そのあとでディスク全体の障害が発生すると、すべての ditto ブロックが使用不可になる可能性があります。
誤って非冗長プールを作成した場合や、データ保持ポリシーを設定する必要がある場合は、ditto ブロックの使用を検討することもできます。
単一ディスクのプールまたは複数ディスクのプールを備えたシステムで複数のコピーを保存することにより、全体的なデータ保護がどのように影響を受けるかについて詳しくは、次のブログを参照してください。
http://blogs.sun.com/relling/entry/zfs_copies_and_data_protection
ZFS のプロパティーの設定方法の詳細については、「ZFS プロパティーを設定する」を参照してください。
Solaris 10 8/07 リリース: zpool status -v コマンドを使用すると、永続的なエラーが発生しているファイルの一覧を表示できます。以前は、find -inum コマンドを使用して、表示された i ノードの一覧からファイル名を特定する必要がありました。
永続的なエラーが発生しているファイル一覧の表示に関する詳細は、「破壊されたファイルまたはディレクトリを修復する」を参照してください。
Solaris 10 8/07 リリース: この Solaris リリースでは、ZFS ボリュームに shareiscsi プロパティーを設定することで、ZFS ボリュームを Solaris iSCSI ターゲットデバイスとして作成できます。この方法は、Solaris iSCSI ターゲットをすばやく設定するのに便利です。次に例を示します。
# zfs create -V 2g tank/volumes/v2 # zfs set shareiscsi=on tank/volumes/v2 # iscsitadm list target Target: tank/volumes/v2 iSCSI Name: iqn.1986-03.com.sun:02:984fe301-c412-ccc1-cc80-cf9a72aa062a Connections: 0 |
iSCSI ターゲットが作成されたら、iSCSI イニシエータを設定できます。Solaris iSCSI イニシエータの設定方法については、『Solaris のシステム管理 (デバイスとファイルシステム)』の第 14 章「Oracle Solaris iSCSI ターゲットおよびイニシエータの構成 (手順)」を参照してください。
ZFS ボリュームを iSCSI ターゲットとして管理するための詳細については、「ZFS ボリュームを Solaris iSCSI ターゲットとして使用する」を参照してください。
Solaris 10 8/07 リリース: この Solaris リリースでは、正常に実行された zfs および zpool コマンドが ZFS によって自動的に記録され、プールの状態の情報が更新されます。次に例を示します。
# zpool history History for 'newpool': 2007-04-25.11:37:31 zpool create newpool mirror c0t8d0 c0t10d0 2007-04-25.11:37:46 zpool replace newpool c0t10d0 c0t9d0 2007-04-25.11:38:04 zpool attach newpool c0t9d0 c0t11d0 2007-04-25.11:38:09 zfs create newpool/user1 2007-04-25.11:38:15 zfs destroy newpool/user1 History for 'tank': 2007-04-25.11:46:28 zpool create tank mirror c1t0d0 c2t0d0 mirror c3t0d0 c4t0d0 |
この機能によって、ユーザーや Oracle のサポート担当者は実行された「正確な」ZFS コマンドを特定し、エラーシナリオのトラブルシューティングを行うことができます。
zpool history コマンドでは、特定のストレージプールを指定できます。次に例を示します。
# zpool history newpool History for 'newpool': 2007-04-25.11:37:31 zpool create newpool mirror c0t8d0 c0t10d0 2007-04-25.11:37:46 zpool replace newpool c0t10d0 c0t9d0 2007-04-25.11:38:04 zpool attach newpool c0t9d0 c0t11d0 2007-04-25.11:38:09 zfs create newpool/user1 2007-04-25.11:38:15 zfs destroy newpool/user1 |
この Solaris リリースでは、zpool history コマンドで、ユーザー ID (user-ID)、ホスト名 (hostname)、またはゾーン名 (zone-name) は記録されません。ただし、この情報が記録されるのは Solaris 10 10/08 リリースからです。詳細は、「ZFS コマンドの履歴の拡張機能 (zpool history)」を参照してください。
ZFS に関する問題のトラブルシューティングの詳細については、「ZFS の問題を解決する」を参照してください。
Solaris 10 8/07 リリース: xattr プロパティーを使用すると、特定の ZFS ファイルシステムの拡張属性を無効または有効にできます。デフォルト値は on です。ZFS プロパティーについては、「ZFS のプロパティーの紹介」を参照してください。
Solaris 10 8/07 リリース: 新しいプロパティーである canmount を使用すると、zfs mount コマンドを使ってデータセットをマウントできるかどうかを指定できます。詳細については、「canmount プロパティー」を参照してください。
Solaris 10 8/07 リリース: ZFS では、内部統計情報のエクスポートや ZFS ファイルシステムの動作の制御に使用できる標準のネイティブプロパティーのほかに、ユーザープロパティーも用意されています。ユーザープロパティーは ZFS の動作には影響しませんが、これらを使用すると、使用環境内で意味のある情報をデータセットに注釈として付けることができます。
詳細については、「ZFS ユーザープロパティー」を参照してください。
Solaris 10 8/07 リリース: この Solaris リリースでは、ファイルシステムの作成後だけでなく作成時にプロパティーを設定できます。
次の 2 つの例は、同等の構文を示しています。
# zfs create tank/home # zfs set mountpoint=/export/zfs tank/home # zfs set sharenfs=on tank/home # zfs set compression=on tank/home |
# zfs create -o mountpoint=/export/zfs -o sharenfs=on -o compression=on tank/home |
Solaris 10 8/07 リリース: この Solaris リリースでは、データセットを指定しないかまたは all を指定する場合、さまざまな形式の zfs get コマンドを使用してすべてのデータセットに関する情報を表示できます。以前のリリースでは、zfs get コマンドですべてのデータセットに関する情報を取得することはできませんでした。
次に例を示します。
# zfs get -s local all tank/home atime off local tank/home/bonwick atime off local tank/home/marks quota 50G local |
Solaris 10 8/07 リリース: この Solaris リリースでは、-zfs receive コマンドに新しい F オプションを指定することで、受信が開始する前に、最新のスナップショットへのファイルシステムのロールバックを強制することができます。このオプションの使用は、ロールバックが発生してから受信が開始するまでの間にファイルシステムが変更されるときに必要となる場合があります。
詳細は、「ZFS スナップショットを受信する」を参照してください。
Solaris 10 11/06 リリース: zfs snapshot コマンドを使ってファイルシステムのスナップショットを作成する場合、-r オプションを使用すると、すべての子孫ファイルシステムのスナップショットを再帰的に作成できます。また、-r オプションを使用すると、スナップショットが破棄されたときにすべての子孫スナップショットを再帰的に破棄できます。
再帰的な ZFS スナップショットは、1 つの原子動作としてすばやく作成されます。スナップショットは、まとめて (一度にすべて) 作成されるか、まったく作成されないかのどちらかです。そのような操作の利点は、子孫ファイルシステムにまたがる場合でも、常にある一貫した時間のスナップショットデータが取得されることです。
詳細は、「ZFS スナップショットを作成および破棄する」を参照してください。
Solaris 10 11/06 リリース: 冗長な RAID-Z 構成でシングルパリティー構成またはダブルパリティー構成を使用できるようになりました。これはそれぞれ、1 つまたは 2 つのデバイスで障害が発生しても、データを失うことなく処理を続行できることを意味します。raidz2 キーワードを指定すれば、ダブルパリティー RAID-Z 構成にすることができます。あるいは、raidz または raidz1 キーワードを指定すれば、シングルパリティー RAID-Z 構成にすることができます。
詳細は、「RAID-Z ストレージプールを作成する」または zpool(1M) のマニュアルページを参照してください。
Solaris 10 11/06 リリース: ZFS ホットスペア機能を使用すると、1 つ以上のストレージプールで障害が発生したデバイスまたはエラー状態のデバイスの置き換えに使用可能なディスクを特定できます。デバイスを「ホットスペア」として指定しておくと、プールのアクティブデバイスで障害が発生した場合に、そのデバイスがホットスペアに自動的に置き換えられます。ストレージプールのデバイスを手動でホットスペアに置き換えることもできます。
詳細は、「ストレージプールにホットスペアを指定する」および zpool(1M) のマニュアルページを参照してください。
Solaris 10 11/06 リリース: zfs promote コマンドを使用すると、ある既存の ZFS ファイルシステムをそのファイルシステムのクローンで置き換えることができます。この機能は、ファイルシステムの代替バージョンでテストを実行してから、その代替バージョンをアクティブファイルシステムに置き換えるときに利用できます。
詳細は、「ZFS ファイルシステムを ZFS クローンで置き換える」および zfs(1M) のマニュアルページを参照してください。
Solaris 10 6/06 リリース: zpool upgrade コマンドを使用すると、ストレージプールを新しいバージョンの ZFS にアップグレードして、その最新機能を利用できるようになります。また、古いバージョンの ZFS を実行している場合、zpool status コマンドによって通知されます。
詳細は、「ZFS ストレージプールをアップグレードする」および zpool(1M) のマニュアルページを参照してください。
以前の Solaris リリースのプールを持つシステムで ZFS 管理コンソールを使用する場合は、必ずプールをアップグレードしてからコンソールを使用するようにしてください。プールのアップグレードが必要かどうかを調べるには、zpool status コマンドを使用します。ZFS 管理コンソールについては、「Web ベースの ZFS 管理」を参照してください。
Solaris 10 6/06 リリース: この Solaris リリースでは、zfs backup および zfs restore コマンドの名前が、それらの機能をより正確に表すように、zfs send および zfs receive にそれぞれ変更されています。これらのコマンドは ZFS データストリーム表現を送受信します。
これらのコマンドの詳細については、「ZFS データを送信および受信する」を参照してください。
Solaris 10 6/06 リリース: このリリースには、zpool import -D コマンドが含まれています。このコマンドを使用すると、以前に zpool destroy コマンドで破棄されたプールを回復できます。
詳細は、「破棄された ZFS ストレージプールを回復する」を参照してください。
Solaris 10 6/06 リリース: このリリースには、プールの障害やデバイスの障害を診断および報告できる ZFS 診断エンジンが含まれています。プールまたはデバイスの障害に関連するチェックサム、入出力、デバイス、およびプールのエラーも報告されます。
この診断エンジンでは、チェックサムと入出力のエラーを予測分析する機能や、障害分析に基づいて予防処理を行う機能はありません。
ZFS で障害が発生した場合、次のようなメッセージが表示されることがあります。
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 status コマンドの指示に従って再調査することにより、障害をすばやく特定して解決することができます。
報告された ZFS の問題から回復する例については、「見つからないデバイスに関する問題を解決する」を参照してください。
Solaris 10 6/06 リリース: このリリースには、デバイスやプールに関連するエラーカウントをクリアーするための zpool clear コマンドが含まれています。以前は、zpool online コマンドを使ってプール内のデバイスがオンラインになったときに、エラー数がクリアーされていました。詳細は、「ストレージプールデバイスのエラーをクリアーする」および zpool(1M) のマニュアルページを参照してください。
Solaris 10 6/06 リリース: このリリースでは、冗長およびコンパクトの 2 とおりの形式で NFSv4 ACL を設定および表示できます。どちらの ACL 形式も chmod コマンドを使って設定できます。コンパクト形式の ACL は、ls -V コマンドを使って表示できます。冗長形式の ACL は、ls -v コマンドを使って表示できます。
詳細は、「ZFS ファイルの ACL をコンパクト形式で設定および表示する」、および chmod(1) と ls(1) のマニュアルページを参照してください。
Solaris 10 6/06 リリース: 新しいファイルシステム監視ツール fsstat はファイルシステムの動作を報告します。アクティビティーは、マウントポイント単位またはファイルシステムタイプ単位で報告できます。一般的な ZFS ファイルシステムアクティビティーの例を示します。
$ fsstat zfs new name name attr attr lookup rddir read read write write file remov chng get set ops ops ops bytes ops bytes 7.82M 5.92M 2.76M 1.02G 3.32M 5.60G 87.0M 363M 1.86T 20.9M 251G zfs |
詳細は、fsstat(1M) のマニュアルページを参照してください。
Solaris 10 6/06 リリース: Web ベースの ZFS 管理ツールである ZFS 管理コンソールを使用して、次の管理タスクを実行できます。
新規ストレージプールを作成する。
既存のプールに容量を追加する。
既存のプールを別のシステムに移動 (エクスポート) する。
以前にエクスポートしたストレージプールを別のシステムで使用できるようにインポートする。
ストレージプールに関する情報を表示する。
ファイルシステムを作成する。
ボリュームを作成する。
ファイルシステムまたはボリュームのスナップショットを作成する。
ファイルシステムを以前のスナップショットにロールバックする。
セキュリティー保護された Web ブラウザから次の URL の ZFS 管理コンソールにアクセスできます。
https://system-name:6789/zfs |
正しい URL を入力しても ZFS 管理コンソールにアクセスできない場合は、サーバーが起動していない可能性があります。サーバーを起動するには、次のコマンドを実行します。
# /usr/sbin/smcwebserver start |
システムをブートするときにサーバーを自動的に実行するには、次のコマンドを実行します。
# /usr/sbin/smcwebserver enable |
Solaris 管理コンソール (smc) を使って ZFS ストレージプールまたは ZFS ファイルシステムを管理することはできません。
ZFS ファイルシステムは、ファイルシステムの管理方法を根底から変える革命的な新しいファイルシステムであり、現在利用できるほかのファイルシステムにはない機能と特長を備えています。ZFS は堅牢で、スケーラブルで、管理が容易です。
ZFS では、物理ストレージを管理するために、「ストレージプール」という概念を使用します。従来のファイルシステムは、1 つの物理デバイス上に構築されていました。複数のデバイスへの対応とデータの冗長性を実現するために、「ボリュームマネージャー」の概念が導入されました。ファイルシステムを変更しなくても複数のデバイスが利用できるように、1 つのデバイスの表現を使用しています。このファイルシステムの設計は、仮想化したボリューム上の物理的なデータの配置を制御する手段を用意していないため、ファイルシステムをより複雑にし、ある面でのファイルシステムの進化を阻んできました。
ZFS では、ボリューム管理は一切不要です。ZFS では、仮想化されたボリュームを作成する代わりに、デバイスをストレージプールに集約します。ストレージプールは、ストレージの物理特性 (デバイスのレイアウト、データの冗長性など) を記述したもので、ファイルシステムを作成できる任意のデータストアとして機能します。ファイルシステムが個々のデバイスに制約されなくなり、デバイスのディスク領域をプール内のすべてのファイルシステムで共有することができます。ファイルシステムのサイズを事前に決定する必要はなくなりました。ファイルシステムのサイズは、ストレージプールに割り当てられたディスク領域内で自動的に拡張します。新しいストレージを追加すると、何も操作しなくても、プール内のすべてのファイルシステムで追加したディスク領域をすぐに使用できます。ストレージプールは多くの点で、仮想メモリーシステムと同様に機能します。DIMM メモリーをシステムに追加するとき、メモリーを構成するコマンドを実行したり、個別のプロセスにメモリーを割り当てたりすることをオペレーティングシステムによって強制されるわけではありません。追加したメモリーは、システムのすべてのプロセスによって自動的に使用されます。
ZFS はトランザクションファイルシステムです。つまり、ファイルシステムの状態がディスク上で常に一定であることを意味します。従来のファイルシステムは、データをその場所で上書きします。このため、たとえば、データブロックが割り当てられてからディレクトリにリンクされるまでの間にシステムの電源が切断された場合、ファイルシステムは不整合な状態のままになります。従来、この問題は fsck コマンドを使用して解決されていました。このコマンドの機能は、ファイルシステムの状態を確認および検証し、処理中に不整合が見つかった場合はその修復を試みることでした。このようなファイルシステムの不整合の問題は管理者を大いに苦労させ、fsck コマンドを使ってもすべての問題が修正されるとは限りませんでした。最近では、ファイルシステムに「ジャーナリング」の概念が導入されました。ジャーナリングプロセスでは各処理がそれぞれのジャーナルに記録されるため、システムのクラッシュが発生したときに処理を安全に「再現」できます。このプロセスでは、不必要な負荷が発生します。これはデータを 2 回書き込む必要があるためで、多くの場合、ジャーナルを正しく再現できないなどの新しい問題が発生します。
トランザクションファイルシステムでは、データは「コピーオンライト」セマンティクスを使用して管理されます。データが上書きされることはなく、一覧の処理が完全に確定されるか、完全に無視されます。そのため、電源が突然切断されたりシステムがクラッシュしても、ファイルシステムが破壊されることはありません。直近に書き込まれたデータが失われることがあっても、ファイルシステム自体の整合性は常に保持されます。また、O_DSYNC フラグを使用して書き込まれる同期データは、書き込まれてから戻ることが常に保証されているため、失われることがありません。
ZFS では、すべてのデータおよびメタデータが、ユーザーが選択したチェックサムアルゴリズムを使って検証されます。チェックサム検証の機能を持つ従来のファイルシステムでは、ボリューム管理層および従来のファイルシステムの設計のために、強制的にブロック単位でチェックサムが計算されていました。従来の設計では、完全なブロックを誤った位置に書き込むといった特定の障害の結果として、データは不正だがチェックサムエラーにならないという状況が生じる可能性があります。ZFS のチェックサムはそのような障害を検出し、障害モードから正常に回復できるような方法で格納されます。すべてのチェックサム検証とデータの回復は、ファイルシステム層でアプリケーションに透過的に実行されます。
また、ZFS は自己修復データも備えています。ZFS は、さまざまなレベルのデータ冗長性を備えたストレージプールをサポートします。不正なデータブロックが検出されると、ZFS は別の冗長コピーから正しいデータを取得し、不正なデータを正しいデータで置き換えて修復します。
ZFS ファイルシステムの重要な設計要素はスケーラビリティーです。ファイルシステム自体は 128 ビットで、25 京 6000 兆 (256 クアデリリオン) ゼタバイトの記憶域に対応しています。すべてのメタデータは動的に割り当てられるため、i ノードを事前に割り当てたり、初回作成時にファイルシステムのスケーラビリティーを制限する必要はありません。すべてのアルゴリズムは、スケーラビリティーを考慮して記述されています。ディレクトリには、248 (256 兆) のエントリを格納することができ、ファイルシステムの数およびファイルシステムに格納できるファイル数の制限はありません。
「スナップショット」とは、ファイルシステムまたはボリュームの読み取り専用コピーのことです。スナップショットは、短時間で簡単に作成できます。最初のスナップショットのために、プール内のディスク領域が余分に消費されることはありません。
有効なデータセット内のデータが変更されると、スナップショットは古いデータを参照し続けるためのディスク領域を消費します。その場合、スナップショットのため、古いデータの領域は解放されずプールに戻されません。
ZFS の重要な特長として、管理モデルが大幅に簡素化されていることが挙げられます。ZFS では、階層構造のファイルシステムレイアウト、プロパティーの継承、およびマウントポイントと NFS 共有セマンティクスの自動管理により、複数のコマンドを使用したり、構成ファイルを編集したりしなくても、ファイルシステムを簡単に作成できます。割り当て制限や予約を設定したり、圧縮の有効/無効を切り替えたり、大量のファイルシステムのマウントポイントを管理したりする操作を、1 つのコマンドだけで簡単に実行することができます。デバイスの検査や交換のために、一連のボリュームマネージャーコマンドを別途学習する必要はありません。ファイルシステムスナップショットのストリームを送受信できます。
ZFS では、ファイルシステムを階層構造で管理するので、割り当て制限、予約、圧縮、マウントポイントなどのプロパティーを簡単に管理できます。この管理モデルでは、ファイルシステムが重要な役割を果たします。ファイルシステム自体は新しいディレクトリの作成と同じようにとても簡単に操作できるので、ユーザー、プロジェクト、ワークスペースなどのために個別のファイルシステムを作成することをお勧めします。この設計を利用して、きめの細かい管理ポイントを定義できます。
ここでは、このマニュアルで使用される基本的な用語について説明します。
lucreate コマンドによって作成され、場合によっては luupgrade コマンドで更新されているが、アクティブなブート環境または主ブート環境ではないブート環境。luactivate コマンドを実行することにより、代替ブート環境を主ブート環境にすることができます。
ファイルシステムブロック内の 256 ビットのハッシュデータ。チェックサム機能には、単純で高速な fletcher4 (デフォルト) から SHA256 などの暗号強度の高いハッシュまで、さまざまなものがあります。
初期コンテンツがスナップショットの内容と同じであるファイルシステム。
クローンの詳細については、「ZFS クローンの概要」を参照してください。
次の ZFS コンポーネントの総称名。クローン、ファイルシステム、スナップショット、およびボリューム。
各データセットは、ZFS 名前空間内で一意の名前で識別されます。データセットは、次の形式を使用して識別されます。
pool/path[ @snapshot]
データセットを格納するストレージプールの名前
データセットコンポーネントのスラッシュ区切りのパス名
データセットのスナップショットを識別するオプションコンポーネント
データセットの詳細については、第 6 章Oracle Solaris ZFS ファイルシステムの管理を参照してください。
標準のシステム名前空間内にマウントされ、別のファイルシステムのように動作する、filesystem タイプの ZFS データセット。
ファイルシステムの詳細については、第 6 章Oracle Solaris ZFS ファイルシステムの管理を参照してください。
複数のディスク上にデータの同一コピーを格納する仮想デバイス。ミラー上のいずれかのディスクで障害が発生した場合には、ミラー上の別のディスクにある同じデータを利用できます。
デバイスの論理グループ。使用可能なストレージのレイアウトおよび物理特性を記述します。データセットのディスク領域は、プールから割り当てられます。
ストレージプールの詳細については、第 4 章Oracle Solaris ZFS ストレージプールの管理を参照してください。
lucreate コマンドによって代替ブート環境の構築に使用されるブート環境。デフォルトでは、主ブート環境は現在のブート環境です。このデフォルトは、lucreate -s オプションを使用して無効にすることができます。
データとパリティーを複数のディスクに格納する仮想デバイス。RAID-Z の詳細については、「RAID-Z ストレージプール構成」を参照してください。
あるデバイスのデータを別のデバイスにコピーする処理のことを「再同期化」と言います。たとえば、ミラーデバイスが置き換えられてオフラインになっている場合には、最新のミラーデバイスのデータが新しく復元されたミラーデバイスにコピーされます。この処理は、従来のボリューム管理製品では「ミラー再同期化」と呼ばれています。
ZFS の再同期化の詳細については、「再同期化の状態を表示する」を参照してください。
特定の時点における ファイルシステムまたはボリュームの読み取り専用コピー。
スナップショットの詳細については、「ZFS スナップショットの概要」を参照してください。
プール内の論理デバイス。物理デバイス、ファイル、または一連のデバイスを仮想デバイスに設定できます。
仮想デバイスの詳細については、「ストレージプールの仮想デバイスの情報を表示する」を参照してください。
ブロックデバイスを表すデータセット。たとえば、スワップデバイスとして ZFS ボリュームを作成できます。
ZFS ボリュームの詳細については、「ZFS ボリューム」を参照してください。
データセットやプールなどの各 ZFS コンポーネントには、次の規則に従って名前を付ける必要があります。
各コンポーネントに使用できる文字は、英数字および次の 4 つの特殊文字だけです。
下線 (_)
ハイフン (-)
コロン (:)
ピリオド (.)
プール名の先頭は英字にする必要があります。ただし、次の制限事項があります。
c[0-9] の順序で始まる名前は許可されません。
log という名前は予約されています。
mirror、raidz、raidz1、raidz2、raidz3、または spare で始まる名前は許可されていません。これらの名前は予約されています。
プール名にはパーセント記号 (%) を含めないでください。
データセット名の先頭は英数字にする必要があります。
データセット名にはパーセント記号 (%) を含めないでください。
また、コンポーネント名を空にすることはできません。