InnerhalbNach weiteren Dokumenten suchenSupport-Ressourcen | Dieses Buch im PDF-Format herunterladen (2012 KB)
第 6 章 ZFS ファイルシステムの管理この章では、ZFS ファイルシステムの管理について詳しく説明します。この章では、ファイルシステムの階層レイアウト、プロパティーが継承されること、およびマウントポイント管理および共有が自動的に行われることなどについて、それらの概念を説明しています。 ZFS ファイルシステムは、ストレージプールの最上位に構築されます。ファイルシステムは動的に作成および破棄することができ、基礎となる領域を割り当てたりフォーマットしたりする必要はありません。ファイルシステムが非常に軽量であることと、ZFS はファイルシステムに基づいて管理することから、作成されるファイルシステムの数は多くなる傾向があります。 ZFS ファイルシステムの管理には、zfs コマンドを使用します。zfs コマンドには、ファイルシステムに特定の操作を実行するために一連のサブコマンドが用意されています。この章では、これらのサブコマンドについて詳細に説明します。スナップショット、ボリューム、およびクローンもこのコマンドを使って管理しますが、これらの機能についてはこの章では簡単に取り上げるだけにとどめます。スナップショットおよびクローンの詳細については、第 7 章ZFS のスナップショットとクローンの操作を参照してください。ZFS ボリュームの詳細については、「ZFS ボリューム」を参照してください。 注 – 「データセット」という用語は、この章ではファイルシステム、スナップショット、クローン、またはボリュームの総称として使用します。 この章は、次の節で構成されます。 ZFS ファイルシステムを作成および破棄するZFS ファイルシステムは、zfs create および zfs destroy コマンドを使って作成および破棄できます。 ZFS ファイルシステムを作成するZFS ファイルシステムの作成には、zfs create コマンドを使用します。create サブコマンドの引数は 1 つだけです。 作成するファイルシステムの名前です。ファイルシステム名は、プール名から始まるパス名として指定します。 pool-name/[filesystem-name/]filesystem-name パスのプール名と最初のファイルシステム名は、新規ファイルシステムを階層内のどこに作成するかを示しています。中間にあるすべてのファイルシステム名は、プール内にあらかじめ存在している必要があります。パスの最後にある名前は、作成するファイルシステムの名前です。ファイルシステム名は、「ZFS コンポーネントに名前を付けるときの規則」に定義されている規則に従って付ける必要があります。 次の例では、bonwick という名前のファイルシステムが tank/home ファイルシステムに作成されます。
新しく作成するファイルシステムが正常に作成されると、自動的にマウントされます。ファイルシステムは、デフォルトでは create サブコマンドのファイルシステム名に指定したパスを使って、 /dataset としてマウントされます。この例では、新しく作成した bonwick ファイルシステムは /tank/home/bonwick にマウントされます。自動的に管理されるマウントポイントの詳細については、「ZFS マウントポイントを管理する」を参照してください。 zfs create コマンドの詳細については、zfs(1M) を参照してください。 ファイルシステムの作成時にファイルシステムのプロパティーを設定できます。 次の例では、tank/home ファイルシステム用に /export/zfs というマウントポイントが指定され、作成されます。
ファイルシステムのプロパティーの詳細については、「ZFS のプロパティーの紹介」を参照してください。 ZFS ファイルシステムを破棄するZFS ファイルシステムを破棄するには、zfs destroy コマンドを使用します。破棄されたファイルシステムは、マウントおよび共有が自動的に解除されます。自動的に管理されるマウントおよび共有の詳細については、「自動マウントポイント」を参照してください。 次の例では、tabriz ファイルシステムが破棄されます。
destroy サブコマンドでは、確認を求めるプロンプトは表示されません。慎重に使用してください。 破棄するファイルシステムがビジー状態であるためにマウントを解除できない場合、zfs destroy コマンドは失敗します。アクティブなファイルシステムを破棄する場合は、-f オプションを使用します。このオプションは慎重に使用してください。アクティブなファイルシステムのマウント解除、共有解除、および破棄も実行することができ、その場合はアプリケーションが予期しない動作をすることがあります。
zfs destroy コマンドは、ファイルシステムに子が存在する場合にも失敗します。ファイルシステムとそのすべての子孫を再帰的に破棄するときは、-r オプションを使用します。再帰的な破棄を実行すると、スナップショットも破棄されるので、このオプションは慎重に使用してください。
破棄するファイルシステムに間接的な依存関係が存在する場合は、前述の再帰的な破棄コマンドでも失敗します。破棄する階層の外部に複製されたファイルシステムなど、すべての依存関係を強制的に破棄する場合は、-R オプションを使用する必要があります。このオプションは、慎重に使用してください。
-f、-r、または -R オプションでは、確認を求めるプロンプトは表示されないので、これらのオプションは慎重に使用してください。 スナップショットおよびクローンの詳細については、第 7 章ZFS のスナップショットとクローンの操作を参照してください。 ZFS ファイルシステムの名前を変更するzfs rename コマンドを使用して、ファイルシステムの名前を変更できます。rename サブコマンドを使用して、次の操作を実行できます。
次の例では、rename サブコマンドを使用して、ファイルシステムの名前変更だけを行なっています。
この例では、kustarz ファイルシステムの名前が kustarz_old に変更されます。 次の例では、zfs rename を使用してファイルシステムの場所を移動する方法を示しています。
この例では、maybee ファイルシステムの場所が tank/home から tank/ws に移動します。名前の変更を使ってファイルの場所を移動するときは、新しい場所は同じプールの中にする必要があり、新しいファイルシステムを格納するために十分な領域が存在している必要があります。割り当て制限が不足していることなどが原因で、新しい場所に必要な領域がない場合には、名前の変更は失敗します。 割り当て制限の詳細については、「ZFS の割り当て制限と予約を設定する」を参照してください。 名前の変更を実行すると、ファイルシステムおよび子孫のファイルシステム (存在する場合) をマウント解除して再マウントしようとする処理が行われます。アクティブなファイルシステムのマウントを解除できない場合、名前の変更は失敗します。この問題が発生した場合は、ファイルシステムを強制的にマウント解除する必要があります。 スナップショットの名前を変更する方法については、「ZFS スナップショットの名前を変更する」を参照してください。 ZFS のプロパティーの紹介ファイルシステム、ボリューム、スナップショット、およびクローンの動作を制御するときには、主にプロパティーという機構を使用します。この節で定義しているプロパティーは、特に説明している場合を除いて、すべての種類のデータセットに適用されます。 プロパティーは、ネイティブプロパティーとユーザー定義プロパティーの 2 種類に分けられます。ネイティブプロパティーは、内部の統計情報をエクスポートするか、ZFS ファイルシステムの動作を制御します。また、ネイティブプロパティーは設定可能なプロパティーまたは読み取り専用のプロパティーのどちらかです。ユーザープロパティーは ZFS ファイルシステムの動作には影響しませんが、これらを使用すると、使用環境内で意味を持つようにデータセットに注釈を付けることができます。ユーザープロパティーの詳細については、「ZFS ユーザープロパティー」を参照してください。 設定可能なプロパティーのほとんどは、継承可能なプロパティーでもあります。継承可能なプロパティーとは、親に設定したプロパティーがそのすべての子孫に伝達されるプロパティーのことです。 すべての継承可能プロパティーには、ソースが関連付けられています。ソースには、プロパティーがどのように取得されたかが記述されます。プロパティーのソースには、次の値が記述される可能性があります。
次の表には、ZFS ファイルシステムの読み取り専用のネイティブプロパティーと設定可能なネイティブプロパティーの両方を示しています。読み取り専用のネイティブプロパティーには、そのことを記載しています。この表に示すそれ以外のプロパティーは、すべて設定可能なプロパティーです。ユーザープロパティーについては、「ZFS ユーザープロパティー」を参照してください。 表 6–1 ZFS のネイティブプロパティーの説明
ZFS の読み取り専用のネイティブプロパティー読み取り専用のネイティブプロパティーとは、情報の取得はできるが設定はできないプロパティーのことです。読み取り専用のネイティブプロパティーは継承されません。一部のネイティブプロパティーは、特定の種類のデータセットに固有です。このような場合は、特定の種類のデータセットについて、表 6–1 の説明の中で記載しています。 読み取り専用のネイティブプロパティーをここに示します。説明は、表 6–1 を参照してください。
used、 referenced、および available プロパティーなど、領域の計上の詳細については、「ZFS の領域の計上」を参照してください。 used プロパティーこのデータセットおよびそのすべての子孫が消費する容量を調べます。この値は、データの割り当て制限および予約を対象にして確認されます。使用される領域にデータセットの予約は含まれませんが、子孫のデータセットがある場合はそれらの予約も考慮されます。データセットがその親から継承して消費する容量、およびデータセットが再帰的に破棄されるときに解放される容量は、使用済み領域および予約の中で大きな割合を占めます。 スナップショットを作成したときは、それらの領域は最初はスナップショットとファイルシステムの間で共有されます。それまでに作成したスナップショットと領域が共有されることもあります。ファイルシステムが変化していくにつれて、それまで共有されていた領域がスナップショット固有になり、スナップショットが使用する領域に計上されます。スナップショットが使用する領域には、その固有データが計上されます。また、スナップショットを削除すると、ほかのスナップショットに固有の (および使用される) 容量を増やすことができます。スナップショットと領域の詳細については、「領域が不足した場合の動作」を参照してください。 使用している容量、使用できる容量、または参照する容量では、保留状態の変更は考慮されません。保留状態の変更は通常、数秒以内に計上されます。fsync(3c) や O_SYNC を使用してディスクへの変更をコミットしても、領域の使用状況の情報がすぐに更新されることが保証されているわけではありません。 usedbychildren、usedbydataset、usedbyrefreservation、および usedbysnapshots プロパティーの情報は、zfs list - o space コマンドを使用して表示することができます。これらのプロパティーを使用して、used プロパティーを、子孫によって消費される領域に分解することができます。詳細は、表 6–1 を参照してください。 設定可能な ZFS ネイティブプロパティー設定可能なネイティブプロパティーとは、値の取得および設定ができるプロパティーのことです。設定可能なネイティブプロパティーは、zfs set コマンド (説明は 「ZFS プロパティーを設定する」を参照) または zfs create コマンド (説明は 「ZFS ファイルシステムを作成する」を参照) を使って設定します。設定可能なネイティブプロパティーは、割り当て制限と予約を除いて継承されます。割り当て制限と予約の詳細については、「ZFS の割り当て制限と予約を設定する」を参照してください。 一部の設定可能なネイティブプロパティーは、特定の種類のデータセットに固有です。このような場合は、特定の種類のデータセットについて、表 6–1 の説明の中で記載しています。特に記載している場合を除いて、プロパティーはすべての種類のデータセットに適用されます。 つまり、ファイルシステム、ボリューム、クローン、およびスナップショットに適用されます。 次のプロパティーは設定可能です。説明は、表 6–1 を参照してください。
canmount プロパティーこのプロパティーを off に設定した場合は、zfs mount または zfs mount -a コマンドを使ってファイルシステムをマウントすることはできません。このプロパティーを設定することは、mountpoint プロパティーを none に設定することと似ていますが、データセットが継承可能な通常の mountpoint プロパティーを持ち続ける点が異なります。たとえば、このプロパティーを off に設定して、子孫のファイルシステム用に継承可能なプロパティーを確立できますが、ファイルシステム自体がマウントされることもなければ、ユーザーがそれにアクセスすることもできません。この場合、このプロパティーが off に設定されている親のファイルシステムは「コンテナ」の役目を果たしているため、そのコンテナに属性を設定することはできますが、コンテナ自体にはアクセスできません。 次の例では、userpool が作成され、canmount プロパティーが off に設定されます。子孫のユーザーファイルシステムのマウントポイントは、 1 つの共通したマウントポイント /export/home に設定されます。親のファイルシステムに設定されたプロパティーは子孫のファイルシステムに継承されますが、親のファイルシステム自体がマウントされることはありません。
canmount プロパティーを noauto に設定した場合、データセットは明示的にマウントする必要があり、自動的にはマウントできません。この設定は Solaris アップグレードソフトウェアで使用され、アクティブなブート環境 (BE) に属するデータセットだけが起動時にマウントされるようにします。 recordsize プロパティーファイルシステムに格納するファイルの推奨ブロックサイズを指定します。 このプロパティーは、レコードサイズが固定されているファイルにアクセスするデータベースワークロードだけで使用するように設計されています。ZFS では、標準的なアクセスパターンに最適化された内部アルゴリズムに従って、ブロックサイズが自動的に調整されます。作成されるファイルのサイズが大きく、それらのファイルにさまざまなパターンの小さなブロック単位でアクセスするデータベースの場合には、このようなアルゴリズムが最適でないことがあります。recordsize にデータベースのレコードサイズ以上の値を設定すると、パフォーマンスが大きく向上することがあります。このプロパティーを汎用目的のファイルシステムに使用することは、パフォーマンスが低下する可能性があるため、できるだけ避けてください。指定するサイズは、512 バイト - 128K バイトの 2 の累乗にしてください。ファイルシステムの recordsize を変更した場合、そのあとに作成されたファイルだけに適用されます。既存のファイルには適用されません。 このプロパティーは、列の短縮名 recsize を使用して参照することもできます。 volsize プロパティーボリュームの論理サイズを指定します。デフォルトでは、ボリュームを作成するときに、同じ容量の予約が設定されます。volsize への変更があった場合には、予約にも同様の変更が反映されます。これらのチェックは、予期しない動作が起きないようにするために使用されます。ボリュームで使用できる容量が指定した容量より少ない場合には、ボリュームがどのように使用されるかによって異なりますが、定義されていない動作が実行されたりデータが破損したりする可能性があります。このような影響は、ボリュームの使用中にボリュームサイズを変更した場合にも発生することがあります。特に、サイズを縮小した場合にはその可能性が高くなります。 ボリュームサイズを調整するときは、特に注意するようにしてください。 推奨される方法ではありませんが、zfs create -V に -s フラグを指定するか、またはボリュームの作成後に予約を変更すると、疎ボリュームを作成できます。「疎ボリューム」とは、予約がボリュームサイズと等しくないボリュームのことです。疎ボリュームの場合、volsize を変更しても予約には反映されません。 ボリュームの使用方法の詳細については、「ZFS ボリューム」を参照してください。 ZFS ユーザープロパティー標準のネイティブプロパティーのほかに、ZFS では任意のユーザープロパティーをサポートします。ユーザープロパティーは ZFS の動作には影響しませんが、これらを使用すると、使用環境内で意味のある情報をデータセットに注釈として付けることができます。 ユーザープロパティーの名前は、次の特性に適合している必要があります。
想定されている規則では、プロパティー名は次の 2 つの部分に分割しますが、この名前空間は ZFS によって強制されているものではありません。
ユーザープロパティーをプログラムで使用する場合、プロパティー名の module 要素には、逆順にした DNS ドメイン名を使用してください。これは、それぞれ単独で開発された 2 つのパッケージが、異なる目的で同じプロパティー名を使用する可能性を減らすためです。「com.sun.」で始まるプロパティー名は、Sun Microsystems が使用するために予約されています。 ユーザープロパティーの値には、次の特性があります。
次に例を示します。
プロパティーを処理するコマンド (zfs list、zfs get、zfs set など) はすべて、ネイティブプロパティーとユーザープロパティーの両方の操作に使用できます。 次に例を示します。
ユーザープロパティーを消去するには、zfs inherit コマンドを使用します。次に例を示します。
プロパティーがどの親のデータセットにも定義されていない場合は、完全に削除されます。 ZFS ファイルシステムの情報のクエリー検索を行うzfs list コマンドを使って、データセット情報を表示してクエリー検索を行うことができます。さらに、必要に応じてその操作を拡張することができます。この節では、基本的なクエリーと複雑なクエリーについて説明します。 基本的な ZFS 情報を表示するzfs list コマンドをオプションなしで使用すると、基本的なデータセット情報を表示できます。このコマンドでは、システム上のすべてのデータセットの名前と、used、available、 referenced、および mountpoint プロパティーが表示されます。これらのプロパティーの詳細については、「ZFS のプロパティーの紹介」を参照してください。 次に例を示します。
このコマンドを使用するときに、コマンド行にデータセット名を指定すれば、特定のデータセットを表示することもできます。また、-r オプションを使って、そのデータセットのすべての子孫を再帰的に表示することもできます。次に例を示します。
データセット、スナップショット、およびボリュームの絶対パス名を指定して zfs list コマンドを使用します。次に例を示します。
次の例は、tank/home/chua およびそのすべての子孫データセットを表示する方法を示しています。
zfs list コマンドの追加情報については、zfs(1M) を参照してください。 複雑な ZFS クエリーを作成する-o、-f、および -H オプションを使用して、zfs list の出力をカスタマイズすることができます。 -o オプションと必要なプロパティーのコンマ区切りのリストを使用すれば、プロパティー値の出力をカスタマイズできます。任意のデータセットプロパティーを有効な値として指定できます。サポートされているすべてのデータセットプロパティーのリストは、「ZFS のプロパティーの紹介」を参照してください。また、そこに定義されているプロパティー以外に、-o オプションのリストにリテラル name を指定すれば、出力にデータセットの名前が表示されるはずです。 次の例では、zfs list と一緒に sharenfs と mountpoint プロパティーを使用して、データセット名を表示しています。
-t オプションを使用すれば、表示するデータセットの種類を指定できます。次の表は、有効な種類について説明しています。 表 6–2 ZFS データセットの種類
-t オプションには、表示するデータセットの種類をコンマ区切りのリストとして指定します。次の例では、-t オプションと - o オプションを同時に使用して、すべてのファイルシステムの名前と used プロパティーを表示しています。
-H オプションを使用すると、生成される出力から zfs list ヘッダーを省略できます。-H オプションでは、空白がすべてタブで出力されます。このオプションは、スクリプトで使えるようにする場合など、解析しやすい出力を必要とするときに利用できます。次の例では、zfs list コマンドと -H オプションを使用して生成される出力を示しています。
ZFS プロパティーを管理するデータセットプロパティーの管理には、zfs コマンドの set、inherit、および get サブコマンドを使用します。 ZFS プロパティーを設定するzfs set コマンドを使用して、任意の設定可能なデータセットプロパティーを変更できます。あるいは、zfs create コマンドを使用して、データセットの作成時にプロパティーを設定できます。設定可能なデータセットプロパティーのリストは、「設定可能な ZFS ネイティブプロパティー」を参照してください。zfs set コマンドには、property=value の形式のプロパティー/値のシーケンスとデータセット名を指定します。 次の例では、tank/home の atime プロパティーを off に設定しています。zfs set の 1 回の呼び出しで設定または変更できるプロパティーは 1 つだけです。
また、どのファイルシステムプロパティーもファイルシステムの作成時に設定できます。次に例を示します。
数値プロパティーを指定するときに、わかりやすくなるように次の接尾辞 (大きさの順に並んでいる) を使用することができます。 BKMGTPEZ です。これらのすべての接尾辞のあとに、オプションの b (バイト) を続けて指定することができます。ただし、B 接尾辞のあとには指定できません。もともとバイトを表しているためです。次の例にある 4 つのzfs set 呼び出しは、すべて同じ数値を表現しています。つまり、tank/home/marks ファイルシステムの quota プロパティーに 50G バイトの値を設定しています。
数値でないプロパティーの値では、大文字と小文字が区別されるので、小文字を使用する必要があります。ただし、mountpoint および sharenfs は例外です。これらのプロパティーの値には、大文字と小文字を混在させることができます。 zfs set コマンドの詳細については、zfs(1M) を参照してください。 ZFS プロパティーを継承する割り当て制限と予約を除いて、すべての設定可能なプロパティーは、親から値を継承します。ただし、子に対して割り当て制限または予約が明示的に設定されている場合は継承されません。継承するプロパティーについて、明示的な値が祖先に設定されていない場合は、プロパティーのデフォルト値が使用されます。zfs inherit コマンドを使用して、プロパティー設定を消去することができます。その場合は、親の設定を継承することになります。 次の例では、zfs set コマンドを使用して tank/home/bonwick ファイルシステムの圧縮を有効にしています。次に、zfs inherit を使用して、compression プロパティーの設定を解除しています。この結果、このプロパティーはデフォルト設定の off をを継承します。home と tank の compression プロパティーはローカルに設定されていないため、デフォルト値が使用されます。圧縮が両方とも有効になっていた場合は、すぐ上の祖先 (この例では home) に設定されている値が使用されます。
-r オプションを指定すると、inherit サブコマンドが再帰的に適用されます。次の例では、このコマンドによって、compression プロパティーの値が tank/home およびそのすべての子孫に継承されます。
注 – -r オプションを使用すると、すべての子孫のデータセットに割り当てられている現在のプロパティー設定が消去されることに注意してください。 zfs コマンドの詳細については、zfs(1M) を参照してください。 ZFS プロパティーのクエリー検索を行うプロパティー値のクエリー検索を行うもっとも簡単な方法は、zfs list コマンドを使用することです。詳細については、「基本的な ZFS 情報を表示する」を参照してください。ただし、複雑なクエリーを使用する場合およびスクリプトで使用する場合は、より詳細な情報をカスタマイズした書式で渡すために zfs get コマンドを使用します。 zfs get コマンドを使用して、任意のデータセットプロパティーを取得できます。次の例は、データセット上の 1 つのプロパティーを取得する方法を示しています。
4 番目の列 SOURCE は、このプロパティー値がどこに設定されているかを示します。次の表で、出力される可能性のあるソース値の意味について説明します。 表 6–3 出力される可能性のある SOURCE 値 (zfs get)
特殊キーワード all を使って、すべてのデータセットプロパティーを取得できます。次の例では、all キーワードを使用して、すべての既存のデータセットプロパティーを取得しています。
注 – casesensitivity、nbmand、normalization、sharemgr、utf8only、および vscan プロパティーは固定値に設定されます。これらは Solaris 10 リリースではサポートされていません。 zfs get に -s オプションを使用すると、表示するプロパティーをソースの種類ごとに指定できます。このオプションには、必要なソースの種類をコンマ区切りのリストとして指定します。指定したソースの種類のプロパティーだけが表示されます。有効なソースの種類は、local、default、inherited、temporary、および none です。次の例では、pool 上にローカルに設定されているすべてのプロパティーを表示しています。
前述のどのオプションの場合にも、-r オプションを使用して、指定したデータセットのすべての子に設定されている特定のプロパティーを再帰的に表示することができます。次の例では、tank に含まれるすべてのデータセットに設定されている、すべての一時的なプロパティーが再帰的に表示されます。
新しい機能を使用すると、zfs get コマンドに対象となるファイルシステムを指定しないでクエリー検索を行うことができます。この場合、すべてのプールまたはファイルシステム上で動作します。次に例を示します。
zfs get コマンドの詳細については、zfs(1M) を参照してください。 スクリプトで使用できるように ZFS プロパティーのクエリー検索を行うzfs get コマンドでは、スクリプトで使用できるように設計された -H および - o オプションを利用できます。-H オプションを指定すると、すべてのヘッダー情報が省略され、空白はタブで置換されます。空白が揃うことで、データが見やすくなります。-o オプションを使用すれば、出力をカスタマイズできます。このオプションには、出力する値をコンマ区切りのリストとして指定します。「ZFS のプロパティーの紹介」で示したすべてのプロパティーは、リテラル name、value、property、および source とともに、-o リストに指定できます。 次の例では、zfs get の -H および -o オプションを使用して、1 つの値を取得する方法を示しています。
-p オプションを指定すると、数値が正確な値として出力されます。たとえば、1M バイトは 1000000 として出力されます。このオプションは、次のように使用できます。
前述のどのオプションの場合にも、-r オプションを使用して、要求した値をすべての子孫について再帰的に取得できます。次の例では、-r、-o、および -H オプションを使用して、export/home およびその子孫のデータセット名と used プロパティーの値を取得しています。すべてのヘッダー出力が省略されています。
ZFS ファイルシステムをマウントおよび共有するこの節では、ZFS でマウントポイントと共有ファイルシステムをどのように管理するかについて説明します。 ZFS マウントポイントを管理するデフォルトでは、すべての ZFS ファイルシステムは、ZFS の起動時にサービス管理機能 (SMF) の svc://system/filesystem/local サービスを使用してマウントされます。ファイルシステムは、/path にマウントされます。path はファイルシステムの名前です。 zfs set コマンドを使用して mountpoint プロパティーを特定のパスに設定することで、デフォルトのマウントポイントを上書きできます。ZFS では、zfs mount -a コマンドが呼び出されるときに、このマウントポイントが必要に応じて自動的に作成され、このファイルシステムが自動的にマウントされます。 /etc/vfstab ファイルを編集する必要はありません。 mountpoint プロパティーは継承されます。たとえば、pool/home の mountpoint が /export/stuff に設定されている場合、pool/home/user は mountpoint プロパティーの /export/stuff/user を継承します。 mountpoint プロパティーを none に設定すると、ファイルシステムのマウントを抑止できます。また、canmount プロパティーを使用して、ファイルシステムをマウントできるかどうかを指定できます。canmount プロパティーの詳細については、「canmount プロパティー」を参照してください。 ファイルシステムは、必要に応じてレガシーマウントインタフェースを使って明示的に管理できます。そのためには、zfs set を使用して mountpoint プロパティーを legacy に設定します。このようにすると、このファイルシステムが自動的にマウントおよび管理されなくなります。代わりに、mount や umount コマンドなどのレガシーツールと、/etc/vfstab ファイルを使用する必要があります。レガシーマウントの詳細については、「レガシーマウントポイント」を参照してください。 マウントポイントの管理方法を変更すると、次の動作が適用されます。
自動マウントポイント
zpool create の -m オプションを使用すれば、プールを作成するときにルートデータセットのデフォルトマウントポイントを設定することもできます。プールの作成の詳細については、「ZFS ストレージプールを作成する」を参照してください。 mountpoint プロパティーが legacy に設定されていないデータセットは、すべて ZFS によって管理されます。次の例では、作成されたデータセットのマウントポイントが ZFS によって自動的に管理されます。
次の例に示すように、mountpoint プロパティーを明示的に設定することもできます。
mountpoint プロパティーを変更すると、ファイルシステムが古いマウントポイントから自動的にマウント解除されて、新しいマウントポイントに再マウントされます。マウントポイントのディレクトリは、必要に応じて作成されます。ファイルシステムがアクティブであるためにマウント解除できない場合は、エラーが報告され、手動で強制的にマウント解除する必要があります。 レガシーマウントポイントmountpoint プロパティーを legacy に設定することで、ZFS ファイルシステムをレガシーツールを使って管理することができます。レガシーファイルシステムは、mount と umount コマンド、および /etc/vfstab ファイルを使用して管理する必要があります。レガシーファイルシステムは、ZFS が起動するときに自動的にマウントされません。ZFS の mount および umount コマンドは、この種類のデータセットでは使用できません。次の例では、ZFS データセットをレガシーモードで設定および管理する方法を示しています。
起動時にレガシーファイルシステムを自動的にマウントするには、/etc/vfstab ファイルにエントリを追加する必要があります。次に、/etc/vfstab ファイル内のエントリの例を示します。
device to fsck および fsck pass エントリが - に設定されています。fsck コマンドが ZFS ファイルシステムに適用されていないために、このような構文になっています。データの完全性および ZFS で fsck が必要がないことについては、「トランザクションのセマンティクス」を参照してください。 ZFS ファイルシステムをマウントするZFS では、ファイルシステムが作成されるときまたはシステムが起動するときに、ファイルシステムが自動的にマウントされます。zfs mount コマンドを使用する必要があるのは、マウントオプションを変更するとき、またはファイルシステムのマウントまたはマウント解除を明示的に行うときだけです。 zfs mount コマンドを引数なしで実行すると、現在マウントされているファイルシステムのうち、ZFS が管理しているファイルシステムがすべて表示されます。レガシー管理されているマウントポイントは表示されません。次に例を示します。
-a オプションを使用すると、ZFS が管理しているファイルシステムをすべてマウントできます。レガシー管理されているファイルシステムはマウントされません。次に例を示します。
デフォルトでは、空でないディレクトリの最上位にマウントすることは許可されません。空でないディレクトリの最上位に強制的にマウントする場合は、-O オプションを使用する必要があります。次に例を示します。
レガシーマウントポイントは、レガシーツールを使って管理する必要があります。ZFS ツールを使用しようとすると、エラーになります。次に例を示します。
ファイルシステムがマウントされるときに使用されるマウントオプションは、データセットに関連付けられたプロパティー値に基づいて決まります。プロパティーとマウントオプションは、次のような関係になっています。
マウントオプション nosuid は、nodevices,nosetuid の別名です。 一時的なマウントプロパティーを使用する前述のどのオプションの場合にも、zfs mount コマンドと -o オプションを使って明示的に設定されている場合には、関連するプロパティー値が一時的に上書きされます。これらのプロパティー値は zfs get コマンドを実行すると temporary として報告されますが、ファイルシステムがマウント解除されるときに元の設定に戻ります。データセットがマウントされるときにプロパティー値を変更した場合は、変更がすぐに有効になり、一時的な設定がすべて上書きされます。 次の例では、tank/home/perrin ファイルシステムに読み取り専用マウントオプションが一時的に設定されます。
この例では、ファイルシステムがマウント解除されていることを前提としています。現在マウントされているファイルシステムのプロパティーを一時的に変更するときは、特別な remount オプションを使用する必要があります。次の例では、現在マウントされているファイルシステムの atime プロパティーを一時的に off に変更しています。
zfs mount コマンドの詳細については、zfs(1M) を参照してください。 ZFS ファイルシステムをマウント解除するzfs unmount サブコマンドを使用して、ファイルシステムをマウント解除できます。unmount コマンドの引数として、マウントポイントまたはファイルシステム名のいずれかを指定できます。 次の例では、ファイルシステム名を使ってファイルシステムをマウント解除しています。
次の例では、マウントポイントを使ってファイルシステムをマウント解除しています。
ファイルシステムがアクティブまたはビジー状態の場合には、unmount コマンドは失敗します。ファイルシステムを強制的にマウント解除する場合は、-f オプションを使用できます。アクティブに使用されているファイルシステムを強制的にマウント解除する場合は、十分に注意してください。アプリケーションが予期しない動作を行うことがあります。
下位互換性を提供するために、従来の umount コマンドを使用して ZFS ファイルシステムをマウント解除することもできます。次に例を示します。
zfs umount コマンドの詳細については、zfs(1M) を参照してください。 ZFS ファイルシステムを共有および共有解除するマウントポイントの場合と同様に、ZFS では sharenfs プロパティーを使って自動的にファイルシステムを共有できます。この方法を使用すれば、新規ファイルシステムを追加するときに /etc/dfs/dfstab ファイルを変更する必要はありません。sharenfs プロパティーは、コンマ区切りのオプションリストとして、share コマンドに渡されます。特殊な値 on は、デフォルトの共有オプションの別名で、すべてのユーザーに read/write アクセス権を許可するオプションです。特殊な値 off を指定すると、ファイルシステムが ZFS によって管理されなくなり、従来の方法 (/etc/dfs/dfstab ファイルなど) で共有できるようになります。sharenfs プロパティーが off でないすべてのファイルシステムは、起動時に共有されます。 共有セマンティクスを制御するデフォルトでは、すべてのファイルシステムは共有されていません。新規ファイルシステムを共有する場合は、次のような zfs set 構文を使用します。
このプロパティーは継承されます。継承したプロパティーが off でないファイルシステムは、作成時に自動的に共有されます。次に例を示します。
tank/home/bricker と tank/home/tabriz は、tank/home から sharenfs プロパティーを継承するため、最初は書き込み可能として共有されます。このプロパティーが ro (readonly) に設定されている場合は、tank/home に設定されている sharenfs プロパティーに関係なく、 tank/home/tabriz は読み取り専用として共有されます。 ZFS ファイルシステムの共有を解除するほとんどのファイルシステムは、起動、作成、および破棄されるときに自動的に共有および共有解除されますが、場合によってはファイルシステムの共有を明示的に解除しなければならないことがあります。このような場合は、zfs unshare コマンドを使用します。次に例を示します。
このコマンドを実行すると、tank/home/tabriz ファイルシステムの共有が解除されます。システムの上のすべての ZFS ファイルシステムを共有解除する場合は、-a オプションを使用する必要があります。
ZFS ファイルシステムを共有するほとんどの通常の操作では、起動および作成されるときに自動的に共有されるという動作で十分です。なんらかの理由でファイルシステムの共有を解除する場合でも、zfs share コマンドを使用すれば再度共有できます。次に例を示します。
- a オプションを使用すれば、システム上のすべての ZFS ファイルシステムを共有できます。
従来の共有の動作sharenfs プロパティーが off の場合は、ZFS はどのような場合にもファイルシステムを共有または共有解除することがありません。この設定を利用して、/etc/dfs/dfstab ファイルなどを従来の方法で管理することができます。 従来の mount コマンドと異なり、従来の share および unshare コマンドは ZFS ファイルシステムでも使用できます。このため、sharenfs プロパティーの設定とは異なるオプションを使って、ファイルシステムを手動で共有することもできます。この管理モデルは推奨されていません。ZFS を使用して NFS 共有を完全に管理するか、または /etc/dfs/dfstab ファイルを使用して完全に管理する方法を選択してください。ZFS 管理モデルは、従来のモデルより少ない操作で簡単に管理できるように設計されています。ただし、従来のモデルを使ってファイルシステムの共有動作を制御する必要がある場合には、そのような操作も利用できます。 ZFS の割り当て制限と予約を設定するquota プロパティーを使用して、ファイルシステムが使用できる容量を制限できます。また、reservation プロパティーを使用して、ファイルシステムが使用できる容量を保証することもできます。これらのプロパティーは、設定したデータセットとそのデータセットのすべての子孫に適用されます。 つまり、割り当て制限を tank/home データセットに設定した場合は、tank/home およびそのすべての子孫が使用する容量の合計がその割り当て制限を超えることができなくなります。同様に、tank/home に予約を設定した場合は、tank/home およびそのすべての子孫がその予約を利用することになります。データセットとそのすべての子孫が使用する容量は、used プロパティーによって報告されます。 refquota プロパティーと refreservation プロパティーを使用して、スナップショットやクローンなどの子孫で消費される容量を計上せずに、ファイルシステムの容量を管理できます。 この Solaris リリースでは、特定のユーザーまたはグループが所有するファイルによって消費される領域の量に割り当て制限を設定することができます。ファイルシステムバージョン 4 より古いファイルシステム上のボリューム、またはバージョン 15 より古いプール上のボリュームには、ユーザーおよびグループの割り当て制限プロパティーを設定できません。 ファイルシステムを管理するために、割り当て制限と予約の機能としてどれが適しているかを判断するには、次の点を考慮してください。
割り当て制限と予約の設定方法の詳細については、「ZFS ファイルシステムに割り当て制限を設定する」および「ZFS ファイルシステムに予約を設定する」を参照してください。 ZFS ファイルシステムに割り当て制限を設定するZFS の割り当て制限は、zfs set および zfs get コマンドを使用して設定および表示できます。次の例では、10G バイトの割り当て制限が tank/home/bonwick に設定されます。
ZFS の割り当て制限を設定すると、zfs list および df コマンドの出力も変化します。次に例を示します。
tank/home は 33.5G バイトの容量を使用できますが、tank/home/bonwick と tank/home/bonwick/ws は 10G バイトしか使用できません。これは、 tank/home/bonwick に割り当て制限が設定されているためです。 割り当て制限には、データセットが現在使用している容量より少ない容量を設定することはできません。次に例を示します。
データセットに refquota を設定して、データセットが消費できる容量を制限できます。この強い制限値には、スナップショットとクローンで消費される容量は含まれません。次に例を示します。
利便性を高めるために、データセットに別の割り当て制限を設定して、スナップショットで消費される容量を管理することもできます。次に例を示します。
このシナリオでは、studentA が refquota (10G バイト) の強い制限に到達する可能性がありますが、スナップショットが存在している場合でも回復のためにファイルを削除することができます。 上の例では、2 つの割り当て制限 (10G バイトと 20G バイト) のうち小さい方が zfs list の出力に表示されています。両方の割り当て制限を表示するには、zfs get コマンドを使用します。次に例を示します。
ZFS ファイルシステムでユーザーまたはグループの割り当て制限を設定するユーザーまたはグループの割り当て制限を設定するには、zfs userquota コマンドおよび zfs groupquota コマンドを次のように使用します。
現在のユーザーまたはグループの割り当て制限が次のように表示されます。
次のプロパティーのクエリーによって、ユーザーおよびグループの全般的な領域使用状況を表示することができます。
個々のユーザーまたはグループの領域使用状況を特定する場合は、次のプロパティーのクエリーを実行します。
すべてのファイルシステムプロパティーを一覧表示する場合に使用する zfs get all dataset コマンドを使用しても、ユーザーおよびグループの割り当て制限プロパティーは表示されません。 ユーザーまたはグループの割り当て制限は次のようにして解除することができます。
ZFS のユーザーおよびグループの割り当て制限には次のような機能があります。
ユーザーまたはグループの割り当て制限の拡張機能が表示されるまでに数秒かかることがあります。そのような遅延が発生する場合は、割り当て制限を超えているのでこれ以上は書き込みが許可されないことが EDQUOT エラーメッセージによって通知される前にユーザーが自身の割り当て制限を超えている可能性があります。 従来の quota コマンドを使用して、NFS 環境 (例えば、ZFS ファイルシステムがマウントされているものなど) におけるユーザーの割り当て制限を確認することができます。ユーザーが割り当て制限を超えてる場合は、何もオプションを指定しなくても、quota コマンドだけで、出力情報が表示されます。次に例を示します。
割り当て制限をリセットして制限を超えることがないようにする場合は、quota -v コマンドを使用してユーザーの割り当てを確認する必要があります。次に例を示します。
ZFS ファイルシステムに予約を設定するZFS の「予約」とは、データセットが使用できることを保証された、プールから割り当てられた領域のことです。つまり、プールで現在使用できない容量をデータセットの容量として予約することはできません。未処理の使用されていない予約の合計容量が、プールで消費されていない容量を超えることはできません。ZFS の予約は、zfs set および zfs get コマンドを使用して設定および表示できます。次に例を示します。
ZFS の予約を設定すると、zfs list コマンドの出力が変化する可能性があります。次に例を示します。
tank/home は 5G バイトの容量を使用していますが、tank/home とそのすべての子孫が参照している容量の合計は 5G バイト未満です。使用されている容量には、tank/home/moore に予約されている容量が反映されます。予約は、親データセットが使用している容量に計上されるので、親データセットの割り当て制限または予約、あるいはその両方を減らすことになります。
データセットは、予約より多くの容量を使用できます。ただし、プールの中で予約されていない領域があり、データセットが現在使用している容量が割り当て制限に達していないことが条件です。データセットは、別のデータセットに予約されている容量を消費することはできません。 予約は加算されません。つまり、zfs set をもう一度呼び出して予約を設定しても、既存の予約に新しい予約が追加されることはありません。代わりに、既存の予約が 2 番目の予約で置き換えられます。
refreservation を設定すると、スナップショットとクローンで消費される容量は含めずに、データセットの容量を保証することができます。refreservation 予約は、親データセットが使用する容量に計上されるので、親データセットの割り当て制限と予約を減らすことになります。次に例を示します。
同じデータセットに予約を設定して、データセットの容量とスナップショットの容量を確保することもできます。次に例を示します。
通常の予約は、親が使用する容量に計上されます。 上の例では、2 つの割り当て制限 (10G バイトと 20G バイト) のうち小さい方が zfs list の出力に表示されています。両方の割り当て制限を表示するには、zfs get コマンドを使用します。次に例を示します。
refreservation を設定すると、スナップショットを作成できるのは、データセットの referenced の現在のバイト数を格納できる十分な空きプール領域が、この予約容量のほかに存在する場合だけになります。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||