Solaris ZFS 管理ガイド
  Suchtext Nur in diesem Buch
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 ファイルシステムに作成されます。


# zfs create tank/home/bonwick

新しく作成するファイルシステムが正常に作成されると、自動的にマウントされます。ファイルシステムは、デフォルトでは create サブコマンドのファイルシステム名に指定したパスを使って、 /dataset としてマウントされます。この例では、新しく作成した bonwick ファイルシステムは /tank/home/bonwick にマウントされます。自動的に管理されるマウントポイントの詳細については、「ZFS マウントポイントを管理する」を参照してください。

zfs create コマンドの詳細については、zfs(1M) を参照してください。

ファイルシステムの作成時にファイルシステムのプロパティーを設定できます。

次の例では、tank/home ファイルシステム用に /export/zfs というマウントポイントが指定され、作成されます。


# zfs create -o mountpoint=/export/zfs tank/home

ファイルシステムのプロパティーの詳細については、「ZFS のプロパティーの紹介」を参照してください。

ZFS ファイルシステムを破棄する

ZFS ファイルシステムを破棄するには、zfs destroy コマンドを使用します。破棄されたファイルシステムは、マウントおよび共有が自動的に解除されます。自動的に管理されるマウントおよび共有の詳細については、「自動マウントポイント」を参照してください。

次の例では、tabriz ファイルシステムが破棄されます。


# zfs destroy tank/home/tabriz

注意 – 注意 –

destroy サブコマンドでは、確認を求めるプロンプトは表示されません。慎重に使用してください。


破棄するファイルシステムがビジー状態であるためにマウントを解除できない場合、zfs destroy コマンドは失敗します。アクティブなファイルシステムを破棄する場合は、-f オプションを使用します。このオプションは慎重に使用してください。アクティブなファイルシステムのマウント解除、共有解除、および破棄も実行することができ、その場合はアプリケーションが予期しない動作をすることがあります。


# zfs destroy tank/home/ahrens
cannot unmount 'tank/home/ahrens': Device busy

# zfs destroy -f tank/home/ahrens

zfs destroy コマンドは、ファイルシステムに子が存在する場合にも失敗します。ファイルシステムとそのすべての子孫を再帰的に破棄するときは、-r オプションを使用します。再帰的な破棄を実行すると、スナップショットも破棄されるので、このオプションは慎重に使用してください。


# zfs destroy tank/ws
cannot destroy 'tank/ws': filesystem has children
use '-r' to destroy the following datasets:
tank/ws/billm
tank/ws/bonwick
tank/ws/maybee

# zfs destroy -r tank/ws

破棄するファイルシステムに間接的な依存関係が存在する場合は、前述の再帰的な破棄コマンドでも失敗します。破棄する階層の外部に複製されたファイルシステムなど、すべての依存関係を強制的に破棄する場合は、-R オプションを使用する必要があります。このオプションは、慎重に使用してください。


# zfs destroy -r tank/home/schrock
cannot destroy 'tank/home/schrock': filesystem has dependent clones
use '-R' to destroy the following datasets:
tank/clones/schrock-clone

# zfs destroy -R tank/home/schrock

注意 – 注意 –

-f-r、または -R オプションでは、確認を求めるプロンプトは表示されないので、これらのオプションは慎重に使用してください。


スナップショットおよびクローンの詳細については、第 7 章ZFS のスナップショットとクローンの操作を参照してください。

ZFS ファイルシステムの名前を変更する

zfs rename コマンドを使用して、ファイルシステムの名前を変更できます。rename サブコマンドを使用して、次の操作を実行できます。

  • ファイルシステムの名前を変更する

  • ファイルシステムの場所を ZFS 階層内の新しい場所に移動する

  • ファイルシステムの名前を変更して、ZFS 階層内で場所を移動する

次の例では、rename サブコマンドを使用して、ファイルシステムの名前変更だけを行なっています。


# zfs rename tank/home/kustarz tank/home/kustarz_old

この例では、kustarz ファイルシステムの名前が kustarz_old に変更されます。

次の例では、zfs rename を使用してファイルシステムの場所を移動する方法を示しています。


# zfs rename tank/home/maybee tank/ws/maybee

この例では、maybee ファイルシステムの場所が tank/home から tank/ws に移動します。名前の変更を使ってファイルの場所を移動するときは、新しい場所は同じプールの中にする必要があり、新しいファイルシステムを格納するために十分な領域が存在している必要があります。割り当て制限が不足していることなどが原因で、新しい場所に必要な領域がない場合には、名前の変更は失敗します。

割り当て制限の詳細については、「ZFS の割り当て制限と予約を設定する」を参照してください。

名前の変更を実行すると、ファイルシステムおよび子孫のファイルシステム (存在する場合) をマウント解除して再マウントしようとする処理が行われます。アクティブなファイルシステムのマウントを解除できない場合、名前の変更は失敗します。この問題が発生した場合は、ファイルシステムを強制的にマウント解除する必要があります。

スナップショットの名前を変更する方法については、「ZFS スナップショットの名前を変更する」を参照してください。

ZFS のプロパティーの紹介

ファイルシステム、ボリューム、スナップショット、およびクローンの動作を制御するときには、主にプロパティーという機構を使用します。この節で定義しているプロパティーは、特に説明している場合を除いて、すべての種類のデータセットに適用されます。

プロパティーは、ネイティブプロパティーとユーザー定義プロパティーの 2 種類に分けられます。ネイティブプロパティーは、内部の統計情報をエクスポートするか、ZFS ファイルシステムの動作を制御します。また、ネイティブプロパティーは設定可能なプロパティーまたは読み取り専用のプロパティーのどちらかです。ユーザープロパティーは ZFS ファイルシステムの動作には影響しませんが、これらを使用すると、使用環境内で意味を持つようにデータセットに注釈を付けることができます。ユーザープロパティーの詳細については、「ZFS ユーザープロパティー」を参照してください。

設定可能なプロパティーのほとんどは、継承可能なプロパティーでもあります。継承可能なプロパティーとは、親に設定したプロパティーがそのすべての子孫に伝達されるプロパティーのことです。

すべての継承可能プロパティーには、ソースが関連付けられています。ソースには、プロパティーがどのように取得されたかが記述されます。プロパティーのソースには、次の値が記述される可能性があります。

ローカル (local)

local ソースは、そのプロパティーが zfs set コマンドを使用して明示的にデータセットに設定されたことを示しています。「ZFS プロパティーを設定する」を参照してください。

inherited from dataset-name

inherited from dataset-name は、そのプロパティーが名前付きの祖先から継承されたことを示しています。

default

default は、そのプロパティー設定が継承されなかったこと、またはローカルに設定されなかったことを示しています。このソースは、プロパティーをソース local として持つ祖先が存在しないことを示しています。

次の表には、ZFS ファイルシステムの読み取り専用のネイティブプロパティーと設定可能なネイティブプロパティーの両方を示しています。読み取り専用のネイティブプロパティーには、そのことを記載しています。この表に示すそれ以外のプロパティーは、すべて設定可能なプロパティーです。ユーザープロパティーについては、「ZFS ユーザープロパティー」を参照してください。

表 6–1 ZFS のネイティブプロパティーの説明

プロパティー名 

種類 

デフォルト値 

説明 

aclinherit

文字列 

secure

ファイルとディレクトリが作成されるときに ACL エントリをどのように継承するかを制御します。値は、discardnoallowsecure、および passthrough です。これらの値については、「ACL プロパティーモード」を参照してください。

aclmode

文字列 

groupmask

chmod を実行するときに ACL エントリをどのように変更するかを制御します。値は、discardgroupmask、および passthrough です。これらの値については、「ACL プロパティーモード」を参照してください。

atime

ブール型 

on

ファイルを読み取るときにファイルのアクセス時刻を更新するかどうかを制御します。このプロパティーをオフに設定すると、ファイルを読み取るときに書き込みトラフィックが生成されなくなるため、パフォーマンスが大幅に向上する可能性があります。ただし、メールプログラムなどのユーティリティーが予期しない動作をすることがあります。

available

数値 

なし 

読み取り専用プロパティー。データセットおよびそのすべての子が利用できる容量を調べます。プール内でほかのアクティビティーが実行されていないことを前提とします。容量はプール内で共有されるため、プールの物理サイズ、割り当て制限、予約、プール内のほかのデータセットなどのさまざまな要因によって、利用できる容量が制限されることがあります。

このプロパティーは、列の短縮名 avail を使用して参照することもできます。

領域の計上の詳細については、「ZFS の領域の計上」を参照してください。

canmount

ブール型 

on

指定のファイルシステムが zfs mount コマンドを使ってマウントできるかどうかを制御します。このプロパティーはどのファイルシステムにも設定可能で、プロパティー自体は継承可能ではありません。ただし、このプロパティーを off に設定するとマウントポイントを子孫のファイルシステムに継承できますが、ファイルシステム自体がマウントされることはありません。

noauto オプションを設定すると、データセットのマウントおよびマウント解除は明示的に実行することが必要になります。データセットの作成時やインポート時に、データセットが自動的にマウントされることはありません。また、zfs mount-a コマンドでマウントされることや、zfs unmount-a コマンドでマウント解除されることもありません。

詳細は、canmount プロパティー」を参照してください。

チェックサム

文字列 

on

データの完全性を検証するために使用するチェックサムを制御します。デフォルト値は on で、適切なアルゴリズム (現在は fletcher2) が自動的に選択されます。値は、on、off、fletcher2fletcher4、および sha256 です。値を off にすると、ユーザーデータの完全性チェックが無効になります。値を off にすることは推奨されていません。

compression

文字列 

off

このデータセットに対する圧縮を有効または無効にします。値は onofflzjbgzip、または gzip-N です。現時点では、このプロパティーを lzjbgzip、または gzip-N に設定することは、このプロパティーを on に設定することと同じ効果を持ちます。デフォルト値は off です。既存のデータを持つファイルシステムで compression を有効にした場合は、新しいデータのみが圧縮されます。既存のデータは圧縮されないまま残されます。

このプロパティーは、列の短縮名 compress を使用して参照することもできます。

compressratio

数値 

なし 

読み取り専用プロパティー。このデータセットに適用された圧縮率を調べます。乗数で表現されます。 zfs set compression=on dataset を実行すると、圧縮を有効にできます。

すべてのファイルの論理サイズおよび参照する物理データの量から計算されます。compression プロパティーを使用して明示的に圧縮されたデータセットも含まれます。

copies

数値 

1

ファイルシステムごとのユーザーデータのコピー数を設定します。使用できる値は 1、2、または 3 です。これらのコピーは、プールレベルの冗長性を補うものです。ユーザーデータの複数のコピーで使用される領域は、対応するファイルとデータセットから取られるため、割り当て制限と予約にとって不利に働きます。また、複数のコピーを有効にすると、used プロパティーが更新されます。既存のファイルシステムでこのプロパティーを変更しても、新たに書き出されるデータが影響を受けるだけなので、ファイルシステムの作成時にこのプロパティーの設定を検討してください。

creation

文字列 

なし 

読み取り専用プロパティー。このデータセットが作成された日時を調べます。

devices

ブール型 

on

ファイルシステム内のデバイスファイルを開くことができるかどうかを制御します。

exec

ブール型 

on

このファイルシステムに含まれるプログラムの実行を許可するかどうかを制御します。off に設定した場合は、PROT_EXEC による mmap(2) 呼び出しも許可されません。

mounted

boolean 

なし 

読み取り専用のプロパティー。このファイルシステム、クローン、またはスナップショットが現在マウントされているかどうかを調べます。このプロパティーは、ボリュームには適用されません。値には yes または no を指定できます。

mountpoint

文字列 

なし 

このファイルシステムで使用されるマウントポイントを制御します。ファイルシステムの mountpoint プロパティーを変更すると、そのマウントポイントを継承するファイルシステムおよびそのすべての子がマウント解除されます。新しい値が legacy の場合は、マウントが解除されたままになります。それ以外のときは、プロパティーの古い値が legacy または none だった場合、またはプロパティーが変更される前にマウントされていた場合は、自動的に再マウントされます。また、共有されていたすべてのファイルシステムは、共有が解除されてから新しい場所で共有されます。

このプロパティーの使用方法の詳細については、「ZFS マウントポイントを管理する」を参照してください。

primarycache

文字列 

off

ARC にキャッシュされる内容を制御します。設定できる値は、allnone、および metadata です。all に設定すると、ユーザーデータとメタデータの両方がキャッシュされます。none に設定すると、ユーザーデータも、メタデータも、キャッシュされません。metadata に設定すると、メタデータのみがキャッシュされます。デフォルトは all です。

origin

文字列 

なし 

複製されたファイルシステムまたはボリュームのための読み取り専用プロパティー。どのスナップショットからクローンが作成されたかを調べます。クローンが存在する場合には、-r-f オプションを使用しても、作成元は破棄できません。

複製されていないファイルシステムには、作成元は存在しません。

quota

数値 (または none)

none

データセットおよびその子孫が消費できる容量を制限します。このプロパティーは、使用される容量に強い制限値を適用します。容量には、子孫 (ファイルシステムやスナップショットを含む) が消費するすべての容量も含まれます。割り当て制限がすでに設定されているデータセットの子孫に割り当て制限を設定した場合は、祖先の割り当て制限は上書きされずに、制限が追加されます。ボリュームには割り当て制限を設定できません。volsize プロパティーが暗黙的な割り当て制限として機能します。

割り当て制限の設定については、「ZFS ファイルシステムに割り当て制限を設定する」を参照してください。

readonly

ブール型 

off

このデータを変更できるかどうかを制御します。on に設定すると、そのデータセットを変更できなくなります。

このプロパティーは、列の短縮名 rdonly を使用して参照することもできます。

recordsize

数値 

128K

ファイルシステムに格納するファイルの推奨ブロックサイズを指定します。

このプロパティーは、列の短縮名 recsize を使用して参照することもできます。詳細については、recordsize プロパティー」を参照してください。

referenced

数値 

なし 

読み取り専用プロパティー。このデータセットからアクセスできるデータの量を調べます。プール内のほかのデータセットで共有されるデータも含まれることがあります。

スナップショットまたはクローンを作成したときには、それらの作成元のファイルシステムまたはスナップショットと同じ領域を最初は参照しています。内容が同じであるためです。 

このプロパティーは、列の短縮名 refer を使用して参照することもできます。

refquota

数値 (または none) 

none

1 つのデータセットが消費できる容量を設定します。このプロパティーにより、使用される容量に対して強い制限値が設定されます。この強い制限値には、スナップショットやクローンなどの子孫で使用される容量は含まれません。

refreservation

数値 (または none) 

none

データセットに保証される最小容量を設定します。この容量には、スナップショットやクローンなどの子孫は含まれません。使用している容量がこの値を下回っているデータセットは、refreservation に指定された容量を使用していると見なされます。refreservation 予約は、親データセットが使用する容量に計上されるので、親データセットの割り当て制限と予約を減らすことになります。

refreservation を設定すると、スナップショットを作成できるのは、データセットの referenced の現在のバイト数を格納できる十分な空きプール領域が、この予約容量のほかに存在する場合だけになります。

このプロパティーは、列の短縮名 refreserv を使用して参照することもできます。

reservation

数値 (または none) 

none

データセットおよびその子孫に保証される最小容量。使用している容量がこの値を下回っているデータセットは、予約に指定された容量を使用していると見なされます。予約は、親データセットが使用する容量に計上されるので、親データセットの割り当て制限と予約を減らすことになります。

このプロパティーは、列の短縮名 reserv を使用して参照することもできます。

詳細については、「ZFS ファイルシステムに予約を設定する」を参照してください。

secondarycache

文字列 

off

L2ARC にキャッシュされる内容を制御します。設定できる値は、allnone、および metadata です。all に設定すると、ユーザーデータとメタデータの両方がキャッシュされます。none に設定すると、ユーザーデータも、メタデータも、キャッシュされません。metadata に設定すると、メタデータのみがキャッシュされます。デフォルトは all です。

setuid

ブール型 

on

そのファイルシステムで setuid ビットを考慮するかどうかを制御します。

sharenfs

文字列 

off

ファイルシステムを NFS 経由で使用できるかどうか、およびどのオプションを使用するかを制御します。on に設定した場合は、zfs share コマンドがオプションなしで呼び出されます。または、このプロパティーの内容に対応するオプションを使って、zfs share コマンドが呼び出されます。off に設定した場合は、従来の shareunshare コマンド、および dfstab ファイルを使用してファイルシステムが管理されます。

ZFS ファイルシステムの共有の詳細については、「ZFS ファイルシステムを共有および共有解除する」を参照してください。

snapdir

文字列 

hidden

ファイルシステムのルートから .zfs ディレクトリを見えるようにするかどうかを制御します。スナップショットの使用方法の詳細については、「ZFS スナップショットの概要」を参照してください。

type

文字列 

なし 

読み取り専用プロパティー。データセットの種類を調べます。filesystem (ファイルシステムまたはクローン)、volume、または snapshot のいずれかになります。

used

数値 

なし 

読み取り専用プロパティー。データセットおよびそのすべての子孫が消費する容量を調べます。

詳細については、used プロパティー」を参照してください。

usedbychildren

数値 

off 

このデータセットの子によって使用される領域の量を特定する読み取り専用プロパティー。この領域は、データセットのすべての子が破棄されると、解放されます。プロパティーの省略名は usedchild です。

usedbydataset

数値 

off 

このデータセット自体によって使用される領域の量を特定する読み取り専用プロパティー。この領域は、最初にあらゆるスナップショットが破棄されてから refreservation がすべて削除された後に、データセットが破棄されると、解放されます。プロパティーの省略名は usedds です。

usedbyrefreservation

数値 

off 

このデータセットに設定されている refreservation によって使用される領域の量を特定する読み取り専用プロパティー。この領域は、refreservation が削除されると、解放されます。プロパティーの省略名は usedrefreserv です。

usedbysnapshots

数値 

off 

このデータセットのスナップショットによって消費される領域の量を特定する読み取り専用プロパティー。特に、この領域は、このデータセットのすべてのスナップショットが破棄されると、解放されます。ただし、これは、スナップショットの used プロパティーの単なる合計ではありません。なぜならば、領域は、複数のスナップショットによって共有されることがあるからです。プロパティーの省略名は usedsnap です。

volsize

数値 

なし 

ボリュームの場合に、ボリュームの論理サイズを指定します。

詳細については、volsize プロパティー」を参照してください

volblocksize

数値 

8K バイト

ボリュームの場合に、ボリュームのブロックサイズを指定します。ボリュームが書き込まれたあとに、ブロックサイズを変更することはできません。ブロックサイズはボリュームを作成するときに設定してください。ボリュームのデフォルトブロックサイズは、8K バイトです。512 バイト から 128K バイトの範囲で、任意の 2 の累乗を指定できます。

このプロパティーは、列の短縮名 volblock を使用して参照することもできます。

zoned

ブール型 

なし 

このデータセットが非大域ゾーンに追加されているかどうかを指定します。このプロパティーが設定されている場合、そのマウントポイントは大域ゾーンで考慮されません。ZFS では、このようなファイルシステムを要求されても、マウントすることはできません。ゾーンを最初にインストールしたときには、追加されたすべてのファイルシステムにこのプロパティーが設定されます。

ゾーンがインストールされている環境で ZFS を使用する方法の詳細については、「ゾーンがインストールされている Solaris システムで ZFS を使用する」を参照してください。

xattr

ブール型 

on

このファイルシステムで拡張属性を有効にするか無効にするかを指定します。デフォルト値は on です。

ZFS の読み取り専用のネイティブプロパティー

読み取り専用のネイティブプロパティーとは、情報の取得はできるが設定はできないプロパティーのことです。読み取り専用のネイティブプロパティーは継承されません。一部のネイティブプロパティーは、特定の種類のデータセットに固有です。このような場合は、特定の種類のデータセットについて、表 6–1 の説明の中で記載しています。

読み取り専用のネイティブプロパティーをここに示します。説明は、表 6–1 を参照してください。

  • available

  • creation

  • mounted

  • origin

  • compressratio

  • referenced

  • type

  • used

    詳細については、used プロパティー」を参照してください。

  • usedbychildren

  • usedbydataset

  • usedbyrefreservation

  • usedbysnapshots

used referenced、および available プロパティーなど、領域の計上の詳細については、「ZFS の領域の計上」を参照してください。

used プロパティー

このデータセットおよびそのすべての子孫が消費する容量を調べます。この値は、データの割り当て制限および予約を対象にして確認されます。使用される領域にデータセットの予約は含まれませんが、子孫のデータセットがある場合はそれらの予約も考慮されます。データセットがその親から継承して消費する容量、およびデータセットが再帰的に破棄されるときに解放される容量は、使用済み領域および予約の中で大きな割合を占めます。

スナップショットを作成したときは、それらの領域は最初はスナップショットとファイルシステムの間で共有されます。それまでに作成したスナップショットと領域が共有されることもあります。ファイルシステムが変化していくにつれて、それまで共有されていた領域がスナップショット固有になり、スナップショットが使用する領域に計上されます。スナップショットが使用する領域には、その固有データが計上されます。また、スナップショットを削除すると、ほかのスナップショットに固有の (および使用される) 容量を増やすことができます。スナップショットと領域の詳細については、「領域が不足した場合の動作」を参照してください。

使用している容量、使用できる容量、または参照する容量では、保留状態の変更は考慮されません。保留状態の変更は通常、数秒以内に計上されます。fsync(3c)O_SYNC を使用してディスクへの変更をコミットしても、領域の使用状況の情報がすぐに更新されることが保証されているわけではありません。

usedbychildrenusedbydatasetusedbyrefreservation、および 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 に設定されます。親のファイルシステムに設定されたプロパティーは子孫のファイルシステムに継承されますが、親のファイルシステム自体がマウントされることはありません。


# zpool create userpool mirror c0t5d0 c1t6d0
# zfs set canmount=off userpool
# zfs set mountpoint=/export/home userpool
# zfs set compression=on userpool
# zfs create userpool/user1
# zfs create userpool/user2
# zfs list -r userpool
NAME             USED  AVAIL  REFER  MOUNTPOINT
userpool         140K  8.24G  24.5K  /export/home
userpool/user1  24.5K  8.24G  24.5K  /export/home/user1
userpool/user2  24.5K  8.24G  24.5K  /export/home/user2

canmount プロパティーを noauto に設定した場合、データセットは明示的にマウントする必要があり、自動的にはマウントできません。この設定は Solaris アップグレードソフトウェアで使用され、アクティブなブート環境 (BE) に属するデータセットだけが起動時にマウントされるようにします。

recordsize プロパティー

ファイルシステムに格納するファイルの推奨ブロックサイズを指定します。

このプロパティーは、レコードサイズが固定されているファイルにアクセスするデータベースワークロードだけで使用するように設計されています。ZFS では、標準的なアクセスパターンに最適化された内部アルゴリズムに従って、ブロックサイズが自動的に調整されます。作成されるファイルのサイズが大きく、それらのファイルにさまざまなパターンの小さなブロック単位でアクセスするデータベースの場合には、このようなアルゴリズムが最適でないことがあります。recordsize にデータベースのレコードサイズ以上の値を設定すると、パフォーマンスが大きく向上することがあります。このプロパティーを汎用目的のファイルシステムに使用することは、パフォーマンスが低下する可能性があるため、できるだけ避けてください。指定するサイズは、512 バイト - 128K バイトの 2 の累乗にしてください。ファイルシステムの recordsize を変更した場合、そのあとに作成されたファイルだけに適用されます。既存のファイルには適用されません。

このプロパティーは、列の短縮名 recsize を使用して参照することもできます。

volsize プロパティー

ボリュームの論理サイズを指定します。デフォルトでは、ボリュームを作成するときに、同じ容量の予約が設定されます。volsize への変更があった場合には、予約にも同様の変更が反映されます。これらのチェックは、予期しない動作が起きないようにするために使用されます。ボリュームで使用できる容量が指定した容量より少ない場合には、ボリュームがどのように使用されるかによって異なりますが、定義されていない動作が実行されたりデータが破損したりする可能性があります。このような影響は、ボリュームの使用中にボリュームサイズを変更した場合にも発生することがあります。特に、サイズを縮小した場合にはその可能性が高くなります。 ボリュームサイズを調整するときは、特に注意するようにしてください。

推奨される方法ではありませんが、zfs create -V-s フラグを指定するか、またはボリュームの作成後に予約を変更すると、疎ボリュームを作成できます。「疎ボリューム」とは、予約がボリュームサイズと等しくないボリュームのことです。疎ボリュームの場合、volsize を変更しても予約には反映されません。

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

ZFS ユーザープロパティー

標準のネイティブプロパティーのほかに、ZFS では任意のユーザープロパティーをサポートします。ユーザープロパティーは ZFS の動作には影響しませんが、これらを使用すると、使用環境内で意味のある情報をデータセットに注釈として付けることができます。

ユーザープロパティーの名前は、次の特性に適合している必要があります。

  • ネイティブプロパティーと区別するためのコロン(': ') を含んでいる。

  • 英小文字、数字、および次の句読文字を含んでいる。「:」、「+」、「.」、「_」。

  • ユーザープロパティー名の最大文字数は 256 文字。

想定されている規則では、プロパティー名は次の 2 つの部分に分割しますが、この名前空間は ZFS によって強制されているものではありません。


module:property

ユーザープロパティーをプログラムで使用する場合、プロパティー名の module 要素には、逆順にした DNS ドメイン名を使用してください。これは、それぞれ単独で開発された 2 つのパッケージが、異なる目的で同じプロパティー名を使用する可能性を減らすためです。「com.sun.」で始まるプロパティー名は、Sun Microsystems が使用するために予約されています。

ユーザープロパティーの値には、次の特性があります。

  • 常に継承され、決して検証されることがない任意の文字列。

  • ユーザープロパティー値の最大文字数は 1024 文字です。

次に例を示します。


# zfs set dept:users=finance userpool/user1
# zfs set dept:users=general userpool/user2
# zfs set dept:users=itops userpool/user3

プロパティーを処理するコマンド (zfs listzfs getzfs set など) はすべて、ネイティブプロパティーとユーザープロパティーの両方の操作に使用できます。

次に例を示します。


zfs get -r dept:users userpool
NAME            PROPERTY    VALUE           SOURCE
userpool        dept:users  all             local
userpool/user1  dept:users  finance         local
userpool/user2  dept:users  general         local
userpool/user3  dept:users  itops           local

ユーザープロパティーを消去するには、zfs inherit コマンドを使用します。次に例を示します。


# zfs inherit -r dept:users userpool

プロパティーがどの親のデータセットにも定義されていない場合は、完全に削除されます。

ZFS ファイルシステムの情報のクエリー検索を行う

zfs list コマンドを使って、データセット情報を表示してクエリー検索を行うことができます。さらに、必要に応じてその操作を拡張することができます。この節では、基本的なクエリーと複雑なクエリーについて説明します。

基本的な ZFS 情報を表示する

zfs list コマンドをオプションなしで使用すると、基本的なデータセット情報を表示できます。このコマンドでは、システム上のすべてのデータセットの名前と、usedavailable referenced、および mountpoint プロパティーが表示されます。これらのプロパティーの詳細については、「ZFS のプロパティーの紹介」を参照してください。

次に例を示します。


# zfs list
NAME                   USED  AVAIL  REFER  MOUNTPOINT
pool                   476K  16.5G    21K  /pool
pool/clone              18K  16.5G    18K  /pool/clone
pool/home              296K  16.5G    19K  /pool/home
pool/home/marks        277K  16.5G   277K  /pool/home/marks
pool/home/marks@snap      0      -   277K  -
pool/test               18K  16.5G    18K  /test

このコマンドを使用するときに、コマンド行にデータセット名を指定すれば、特定のデータセットを表示することもできます。また、-r オプションを使って、そのデータセットのすべての子孫を再帰的に表示することもできます。次に例を示します。


# zfs list -r pool/home/marks
NAME                   USED  AVAIL  REFER  MOUNTPOINT
pool/home/marks        277K  16.5G   277K  /pool/home/marks
pool/home/marks@snap      0      -   277K  -

データセット、スナップショット、およびボリュームの絶対パス名を指定して zfs list コマンドを使用します。次に例を示します。


# zfs list /pool/home/marks
NAME              USED  AVAIL  REFER  MOUNTPOINT
pool/home/marks   277K  16.5G   277K  /pool/home/marks

次の例は、tank/home/chua およびそのすべての子孫データセットを表示する方法を示しています。


# zfs list -r tank/home/chua
NAME                        USED  AVAIL  REFER  MOUNTPOINT 
tank/home/chua		          26.0K  4.81G  10.0K  /tank/home/chua 
tank/home/chua/projects       16K  4.81G   9.0K  /tank/home/chua/projects
tank/home/chua/projects/fs1    8K  4.81G     8K  /tank/home/chua/projects/fs1 
tank/home/chua/projects/fs2    8K  4.81G     8K  /tank/home/chua/projects/fs2

zfs list コマンドの追加情報については、zfs(1M) を参照してください。

複雑な ZFS クエリーを作成する

-o-f、および -H オプションを使用して、zfs list の出力をカスタマイズすることができます。

-o オプションと必要なプロパティーのコンマ区切りのリストを使用すれば、プロパティー値の出力をカスタマイズできます。任意のデータセットプロパティーを有効な値として指定できます。サポートされているすべてのデータセットプロパティーのリストは、「ZFS のプロパティーの紹介」を参照してください。また、そこに定義されているプロパティー以外に、-o オプションのリストにリテラル name を指定すれば、出力にデータセットの名前が表示されるはずです。

次の例では、zfs list と一緒に sharenfsmountpoint プロパティーを使用して、データセット名を表示しています。


# zfs list -o name,sharenfs,mountpoint
NAME                   SHARENFS         MOUNTPOINT
tank                   off              /tank
tank/home              on               /tank/home
tank/home/ahrens       on               /tank/home/ahrens
tank/home/bonwick      on               /tank/home/bonwick
tank/home/chua         on               /tank/home/chua
tank/home/eschrock     on               legacy
tank/home/moore        on               /tank/home/moore
tank/home/tabriz       ro               /tank/home/tabriz

-t オプションを使用すれば、表示するデータセットの種類を指定できます。次の表は、有効な種類について説明しています。

表 6–2 ZFS データセットの種類

種類 

説明 

filesystem

ファイルシステムとクローン 

ボリューム

ボリューム 

snapshot

スナップショット 

-t オプションには、表示するデータセットの種類をコンマ区切りのリストとして指定します。次の例では、-t オプションと - o オプションを同時に使用して、すべてのファイルシステムの名前と used プロパティーを表示しています。


# zfs list -t filesystem -o name,used
NAME              USED
pool              476K
pool/clone         18K
pool/home         296K
pool/home/marks   277K
pool/test          18K

-H オプションを使用すると、生成される出力から zfs list ヘッダーを省略できます。-H オプションでは、空白がすべてタブで出力されます。このオプションは、スクリプトで使えるようにする場合など、解析しやすい出力を必要とするときに利用できます。次の例では、zfs list コマンドと -H オプションを使用して生成される出力を示しています。


# zfs list -H -o name
pool
pool/clone
pool/home
pool/home/marks
pool/home/marks@snap
pool/test

ZFS プロパティーを管理する

データセットプロパティーの管理には、zfs コマンドの setinherit、および get サブコマンドを使用します。

ZFS プロパティーを設定する

zfs set コマンドを使用して、任意の設定可能なデータセットプロパティーを変更できます。あるいは、zfs create コマンドを使用して、データセットの作成時にプロパティーを設定できます。設定可能なデータセットプロパティーのリストは、「設定可能な ZFS ネイティブプロパティー」を参照してください。zfs set コマンドには、property=value の形式のプロパティー/値のシーケンスとデータセット名を指定します。

次の例では、tank/homeatime プロパティーを off に設定しています。zfs set の 1 回の呼び出しで設定または変更できるプロパティーは 1 つだけです。


# zfs set atime=off tank/home

また、どのファイルシステムプロパティーもファイルシステムの作成時に設定できます。次に例を示します。


# zfs create -o atime=off tank/home

数値プロパティーを指定するときに、わかりやすくなるように次の接尾辞 (大きさの順に並んでいる) を使用することができます。 BKMGTPEZ です。これらのすべての接尾辞のあとに、オプションの b (バイト) を続けて指定することができます。ただし、B 接尾辞のあとには指定できません。もともとバイトを表しているためです。次の例にある 4 つのzfs set 呼び出しは、すべて同じ数値を表現しています。つまり、tank/home/marks ファイルシステムの quota プロパティーに 50G バイトの値を設定しています。


# zfs set quota=50G tank/home/marks
# zfs set quota=50g tank/home/marks
# zfs set quota=50GB tank/home/marks
# zfs set quota=50gb tank/home/marks

数値でないプロパティーの値では、大文字と小文字が区別されるので、小文字を使用する必要があります。ただし、mountpoint および sharenfs は例外です。これらのプロパティーの値には、大文字と小文字を混在させることができます。

zfs set コマンドの詳細については、zfs(1M) を参照してください。

ZFS プロパティーを継承する

割り当て制限と予約を除いて、すべての設定可能なプロパティーは、親から値を継承します。ただし、子に対して割り当て制限または予約が明示的に設定されている場合は継承されません。継承するプロパティーについて、明示的な値が祖先に設定されていない場合は、プロパティーのデフォルト値が使用されます。zfs inherit コマンドを使用して、プロパティー設定を消去することができます。その場合は、親の設定を継承することになります。

次の例では、zfs set コマンドを使用して tank/home/bonwick ファイルシステムの圧縮を有効にしています。次に、zfs inherit を使用して、compression プロパティーの設定を解除しています。この結果、このプロパティーはデフォルト設定の off をを継承します。hometankcompression プロパティーはローカルに設定されていないため、デフォルト値が使用されます。圧縮が両方とも有効になっていた場合は、すぐ上の祖先 (この例では home) に設定されている値が使用されます。


# zfs set compression=on tank/home/bonwick
# zfs get -r compression tank
NAME             PROPERTY      VALUE                    SOURCE
tank             compression   off                      default
tank/home        compression   off                      default
tank/home/bonwick compression   on                      local
# zfs inherit compression tank/home/bonwick
# zfs get -r compression tank
NAME             PROPERTY      VALUE                    SOURCE
tank             compression   off                      default
tank/home        compression   off                      default
tank/home/bonwick compression  off                      default

-r オプションを指定すると、inherit サブコマンドが再帰的に適用されます。次の例では、このコマンドによって、compression プロパティーの値が tank/home およびそのすべての子孫に継承されます。


# zfs inherit -r compression tank/home

注 –

-r オプションを使用すると、すべての子孫のデータセットに割り当てられている現在のプロパティー設定が消去されることに注意してください。


zfs コマンドの詳細については、zfs(1M) を参照してください。

ZFS プロパティーのクエリー検索を行う

プロパティー値のクエリー検索を行うもっとも簡単な方法は、zfs list コマンドを使用することです。詳細については、「基本的な ZFS 情報を表示する」を参照してください。ただし、複雑なクエリーを使用する場合およびスクリプトで使用する場合は、より詳細な情報をカスタマイズした書式で渡すために zfs get コマンドを使用します。

zfs get コマンドを使用して、任意のデータセットプロパティーを取得できます。次の例は、データセット上の 1 つのプロパティーを取得する方法を示しています。


# zfs get checksum tank/ws
NAME             PROPERTY       VALUE                      SOURCE
tank/ws          checksum       on                         default

4 番目の列 SOURCE は、このプロパティー値がどこに設定されているかを示します。次の表で、出力される可能性のあるソース値の意味について説明します。

表 6–3 出力される可能性のある SOURCE 値 (zfs get)

ソース値 

説明 

default

このプロパティーは、このデータセットまたはその祖先 (存在する場合) で明示的に設定されたことが一度もありません。このプロパティーのデフォルト値が使用されています。 

inherited from dataset-name

このプロパティー値は、dataset-name に指定されている親から継承されています。

local

このプロパティー値は、zfs set を使って、このデータセットに明示的に設定されました。

temporary

このプロパティー値は、zfs mount - o オプションを使って設定され、マウントの有効期間だけ有効です。一時的なマウントプロパティーの詳細については、「一時的なマウントプロパティーを使用する」を参照してください。

- (なし) 

このプロパティーは読み取り専用プロパティーです。値は ZFS によって生成されます。 

特殊キーワード all を使って、すべてのデータセットプロパティーを取得できます。次の例では、all キーワードを使用して、すべての既存のデータセットプロパティーを取得しています。


# zfs get all pool
NAME  PROPERTY              VALUE                  SOURCE
pool  type                  filesystem             -
pool  creation              Thu Aug 27  9:33 2009  -
pool  used                  72K                    -
pool  available             66.9G                  -
pool  referenced            21K                    -
pool  compressratio         1.00x                  -
pool  mounted               yes                    -
pool  quota                 none                   default
pool  reservation           none                   default
pool  recordsize            128K                   default
pool  mountpoint            /pool                  default
pool  sharenfs              off                    default
pool  checksum              on                     default
pool  compression           on                     default
pool  atime                 on                     default
pool  devices               on                     default
pool  exec                  on                     default
pool  setuid                on                     default
pool  readonly              off                    default
pool  zoned                 off                    default
pool  snapdir               hidden                 default
pool  aclmode               groupmask              default
pool  aclinherit            restricted             default
pool  canmount              on                     default
pool  shareiscsi            off                    default
pool  xattr                 on                     default
pool  copies                1                      default
pool  version               4                      -
pool  utf8only              off                    -
pool  normalization         none                   -
pool  casesensitivity       sensitive              -
pool  vscan                 off                    default
pool  nbmand                off                    default
pool  sharesmb              off                    default
pool  refquota              none                   default
pool  refreservation        none                   default
pool  primarycache          all                    default
pool  secondarycache        all                    default
pool  usedbysnapshots       0                      -
pool  usedbydataset         21K                    -
pool  usedbychildren        51K                    -
pool  usedbyrefreservation  0                      -

注 –

casesensitivitynbmandnormalizationsharemgrutf8only、および vscan プロパティーは固定値に設定されます。これらは Solaris 10 リリースではサポートされていません。


zfs get-s オプションを使用すると、表示するプロパティーをソースの種類ごとに指定できます。このオプションには、必要なソースの種類をコンマ区切りのリストとして指定します。指定したソースの種類のプロパティーだけが表示されます。有効なソースの種類は、localdefaultinheritedtemporary、および none です。次の例では、pool 上にローカルに設定されているすべてのプロパティーを表示しています。


# zfs get -s local all pool
NAME             PROPERTY      VALUE                      SOURCE
pool             compression   on                         local

前述のどのオプションの場合にも、-r オプションを使用して、指定したデータセットのすべての子に設定されている特定のプロパティーを再帰的に表示することができます。次の例では、tank に含まれるすべてのデータセットに設定されている、すべての一時的なプロパティーが再帰的に表示されます。


# zfs get -r -s temporary all tank
NAME             PROPERTY       VALUE                      SOURCE
tank/home          atime          off                      temporary
tank/home/bonwick  atime          off                      temporary
tank/home/marks    atime          off                      temporary

新しい機能を使用すると、zfs get コマンドに対象となるファイルシステムを指定しないでクエリー検索を行うことができます。この場合、すべてのプールまたはファイルシステム上で動作します。次に例を示します。


# zfs get -s local all
tank/home               atime          off                    local
tank/home/bonwick       atime          off                    local
tank/home/marks         quota          50G                    local

zfs get コマンドの詳細については、zfs(1M) を参照してください。

スクリプトで使用できるように ZFS プロパティーのクエリー検索を行う

zfs get コマンドでは、スクリプトで使用できるように設計された -H および - o オプションを利用できます。-H オプションを指定すると、すべてのヘッダー情報が省略され、空白はタブで置換されます。空白が揃うことで、データが見やすくなります。-o オプションを使用すれば、出力をカスタマイズできます。このオプションには、出力する値をコンマ区切りのリストとして指定します。「ZFS のプロパティーの紹介」で示したすべてのプロパティーは、リテラル namevalueproperty、および source とともに、-o リストに指定できます。

次の例では、zfs get-H および -o オプションを使用して、1 つの値を取得する方法を示しています。


# zfs get -H -o value compression tank/home
on

-p オプションを指定すると、数値が正確な値として出力されます。たとえば、1M バイトは 1000000 として出力されます。このオプションは、次のように使用できます。


# zfs get -H -o value -p used tank/home
182983742

前述のどのオプションの場合にも、-r オプションを使用して、要求した値をすべての子孫について再帰的に取得できます。次の例では、-r-o、および -H オプションを使用して、export/home およびその子孫のデータセット名と used プロパティーの値を取得しています。すべてのヘッダー出力が省略されています。


# zfs get -H -o name,value -r used export/home
export/home     5.57G
export/home/marks       1.43G
export/home/maybee      2.15G

ZFS ファイルシステムをマウントおよび共有する

この節では、ZFS でマウントポイントと共有ファイルシステムをどのように管理するかについて説明します。

ZFS マウントポイントを管理する

デフォルトでは、すべての ZFS ファイルシステムは、ZFS の起動時にサービス管理機能 (SMF) の svc://system/filesystem/local サービスを使用してマウントされます。ファイルシステムは、/path にマウントされます。path はファイルシステムの名前です。

zfs set コマンドを使用して mountpoint プロパティーを特定のパスに設定することで、デフォルトのマウントポイントを上書きできます。ZFS では、zfs mount -a コマンドが呼び出されるときに、このマウントポイントが必要に応じて自動的に作成され、このファイルシステムが自動的にマウントされます。 /etc/vfstab ファイルを編集する必要はありません。

mountpoint プロパティーは継承されます。たとえば、pool/homemountpoint/export/stuff に設定されている場合、pool/home/usermountpoint プロパティーの /export/stuff/user を継承します。

mountpoint プロパティーを none に設定すると、ファイルシステムのマウントを抑止できます。また、canmount プロパティーを使用して、ファイルシステムをマウントできるかどうかを指定できます。canmount プロパティーの詳細については、canmount プロパティー」を参照してください。

ファイルシステムは、必要に応じてレガシーマウントインタフェースを使って明示的に管理できます。そのためには、zfs set を使用して mountpoint プロパティーを legacy に設定します。このようにすると、このファイルシステムが自動的にマウントおよび管理されなくなります。代わりに、mountumount コマンドなどのレガシーツールと、/etc/vfstab ファイルを使用する必要があります。レガシーマウントの詳細については、「レガシーマウントポイント」を参照してください。

マウントポイントの管理方法を変更すると、次の動作が適用されます。

  • 自動マウントポイントの動作

  • レガシーマウントポイントの動作

自動マウントポイント

  • legacy または none から変更すると、ファイルシステムは自動的にマウントされます。

  • ファイルシステムが現在 ZFS によって管理されているのにそのマウントが現在解除されている場合は、mountpoint プロパティーを変更しても、そのファイルシステムのマウントは解除されたままになります。

zpool create-m オプションを使用すれば、プールを作成するときにルートデータセットのデフォルトマウントポイントを設定することもできます。プールの作成の詳細については、「ZFS ストレージプールを作成する」を参照してください。

mountpoint プロパティーが legacy に設定されていないデータセットは、すべて ZFS によって管理されます。次の例では、作成されたデータセットのマウントポイントが ZFS によって自動的に管理されます。


# zfs create pool/filesystem
# zfs get mountpoint pool/filesystem
NAME             PROPERTY      VALUE                      SOURCE
pool/filesystem  mountpoint    /pool/filesystem           default
# zfs get mounted pool/filesystem
NAME             PROPERTY      VALUE                      SOURCE
pool/filesystem  mounted       yes                        -

次の例に示すように、mountpoint プロパティーを明示的に設定することもできます。


# zfs set mountpoint=/mnt pool/filesystem
# zfs get mountpoint pool/filesystem
NAME             PROPERTY      VALUE                      SOURCE
pool/filesystem  mountpoint    /mnt                       local
# zfs get mounted pool/filesystem
NAME             PROPERTY      VALUE                      SOURCE
pool/filesystem  mounted       yes                        -

mountpoint プロパティーを変更すると、ファイルシステムが古いマウントポイントから自動的にマウント解除されて、新しいマウントポイントに再マウントされます。マウントポイントのディレクトリは、必要に応じて作成されます。ファイルシステムがアクティブであるためにマウント解除できない場合は、エラーが報告され、手動で強制的にマウント解除する必要があります。

レガシーマウントポイント

mountpoint プロパティーを legacy に設定することで、ZFS ファイルシステムをレガシーツールを使って管理することができます。レガシーファイルシステムは、mountumount コマンド、および /etc/vfstab ファイルを使用して管理する必要があります。レガシーファイルシステムは、ZFS が起動するときに自動的にマウントされません。ZFS の mount および umount コマンドは、この種類のデータセットでは使用できません。次の例では、ZFS データセットをレガシーモードで設定および管理する方法を示しています。


# zfs set mountpoint=legacy tank/home/eschrock
# mount -F zfs tank/home/eschrock /mnt

起動時にレガシーファイルシステムを自動的にマウントするには、/etc/vfstab ファイルにエントリを追加する必要があります。次に、/etc/vfstab ファイル内のエントリの例を示します。


#device         device        mount           FS      fsck    mount   mount
#to mount       to fsck       point           type    pass    at boot options
#

tank/home/eschrock -		/mnt		   zfs		-		yes		-	

device to fsck および fsck pass エントリが - に設定されています。fsck コマンドが ZFS ファイルシステムに適用されていないために、このような構文になっています。データの完全性および ZFS で fsck が必要がないことについては、「トランザクションのセマンティクス」を参照してください。

ZFS ファイルシステムをマウントする

ZFS では、ファイルシステムが作成されるときまたはシステムが起動するときに、ファイルシステムが自動的にマウントされます。zfs mount コマンドを使用する必要があるのは、マウントオプションを変更するとき、またはファイルシステムのマウントまたはマウント解除を明示的に行うときだけです。

zfs mount コマンドを引数なしで実行すると、現在マウントされているファイルシステムのうち、ZFS が管理しているファイルシステムがすべて表示されます。レガシー管理されているマウントポイントは表示されません。次に例を示します。


# zfs mount
tank                            /tank
tank/home                       /tank/home
tank/home/bonwick               /tank/home/bonwick
tank/ws                         /tank/ws

-a オプションを使用すると、ZFS が管理しているファイルシステムをすべてマウントできます。レガシー管理されているファイルシステムはマウントされません。次に例を示します。


# zfs mount -a

デフォルトでは、空でないディレクトリの最上位にマウントすることは許可されません。空でないディレクトリの最上位に強制的にマウントする場合は、-O オプションを使用する必要があります。次に例を示します。


# zfs mount tank/home/lalt
cannot mount '/export/home/lalt': directory is not empty
use legacy mountpoint to allow this behavior, or use the -O flag
# zfs mount -O tank/home/lalt

レガシーマウントポイントは、レガシーツールを使って管理する必要があります。ZFS ツールを使用しようとすると、エラーになります。次に例を示します。


# zfs mount pool/home/billm
cannot mount 'pool/home/billm': legacy mountpoint
use mount(1M) to mount this filesystem
# mount -F zfs tank/home/billm

ファイルシステムがマウントされるときに使用されるマウントオプションは、データセットに関連付けられたプロパティー値に基づいて決まります。プロパティーとマウントオプションは、次のような関係になっています。

プロパティー

マウントオプション

devices

devices/nodevices

exec

exec/noexec

readonly

ro/rw

setuid

setuid/nosetuid

マウントオプション nosuid は、nodevices,nosetuid の別名です。

一時的なマウントプロパティーを使用する

前述のどのオプションの場合にも、zfs mount コマンドと -o オプションを使って明示的に設定されている場合には、関連するプロパティー値が一時的に上書きされます。これらのプロパティー値は zfs get コマンドを実行すると temporary として報告されますが、ファイルシステムがマウント解除されるときに元の設定に戻ります。データセットがマウントされるときにプロパティー値を変更した場合は、変更がすぐに有効になり、一時的な設定がすべて上書きされます。

次の例では、tank/home/perrin ファイルシステムに読み取り専用マウントオプションが一時的に設定されます。


# zfs mount -o ro tank/home/perrin

この例では、ファイルシステムがマウント解除されていることを前提としています。現在マウントされているファイルシステムのプロパティーを一時的に変更するときは、特別な remount オプションを使用する必要があります。次の例では、現在マウントされているファイルシステムの atime プロパティーを一時的に off に変更しています。


# zfs mount -o remount,noatime tank/home/perrin
# zfs get atime tank/home/perrin
NAME             PROPERTY      VALUE                      SOURCE
tank/home/perrin atime         off                        temporary

zfs mount コマンドの詳細については、zfs(1M) を参照してください。

ZFS ファイルシステムをマウント解除する

zfs unmount サブコマンドを使用して、ファイルシステムをマウント解除できます。unmount コマンドの引数として、マウントポイントまたはファイルシステム名のいずれかを指定できます。

次の例では、ファイルシステム名を使ってファイルシステムをマウント解除しています。


# zfs unmount tank/home/tabriz

次の例では、マウントポイントを使ってファイルシステムをマウント解除しています。


# zfs unmount /export/home/tabriz

ファイルシステムがアクティブまたはビジー状態の場合には、unmount コマンドは失敗します。ファイルシステムを強制的にマウント解除する場合は、-f オプションを使用できます。アクティブに使用されているファイルシステムを強制的にマウント解除する場合は、十分に注意してください。アプリケーションが予期しない動作を行うことがあります。


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

下位互換性を提供するために、従来の umount コマンドを使用して ZFS ファイルシステムをマウント解除することもできます。次に例を示します。


# umount /export/home/bob

zfs umount コマンドの詳細については、zfs(1M) を参照してください。

ZFS ファイルシステムを共有および共有解除する

マウントポイントの場合と同様に、ZFS では sharenfs プロパティーを使って自動的にファイルシステムを共有できます。この方法を使用すれば、新規ファイルシステムを追加するときに /etc/dfs/dfstab ファイルを変更する必要はありません。sharenfs プロパティーは、コンマ区切りのオプションリストとして、share コマンドに渡されます。特殊な値 on は、デフォルトの共有オプションの別名で、すべてのユーザーに read/write アクセス権を許可するオプションです。特殊な値 off を指定すると、ファイルシステムが ZFS によって管理されなくなり、従来の方法 (/etc/dfs/dfstab ファイルなど) で共有できるようになります。sharenfs プロパティーが off でないすべてのファイルシステムは、起動時に共有されます。

共有セマンティクスを制御する

デフォルトでは、すべてのファイルシステムは共有されていません。新規ファイルシステムを共有する場合は、次のような zfs set 構文を使用します。


# zfs set sharenfs=on tank/home/eschrock

このプロパティーは継承されます。継承したプロパティーが off でないファイルシステムは、作成時に自動的に共有されます。次に例を示します。


# zfs set sharenfs=on tank/home
# zfs create tank/home/bricker
# zfs create tank/home/tabriz
# zfs set sharenfs=ro tank/home/tabriz

tank/home/brickertank/home/tabriz は、tank/home から sharenfs プロパティーを継承するため、最初は書き込み可能として共有されます。このプロパティーが ro (readonly) に設定されている場合は、tank/home に設定されている sharenfs プロパティーに関係なく、 tank/home/tabriz は読み取り専用として共有されます。

ZFS ファイルシステムの共有を解除する

ほとんどのファイルシステムは、起動、作成、および破棄されるときに自動的に共有および共有解除されますが、場合によってはファイルシステムの共有を明示的に解除しなければならないことがあります。このような場合は、zfs unshare コマンドを使用します。次に例を示します。


# zfs unshare tank/home/tabriz

このコマンドを実行すると、tank/home/tabriz ファイルシステムの共有が解除されます。システムの上のすべての ZFS ファイルシステムを共有解除する場合は、-a オプションを使用する必要があります。


# zfs unshare -a

ZFS ファイルシステムを共有する

ほとんどの通常の操作では、起動および作成されるときに自動的に共有されるという動作で十分です。なんらかの理由でファイルシステムの共有を解除する場合でも、zfs share コマンドを使用すれば再度共有できます。次に例を示します。


# zfs share tank/home/tabriz

- a オプションを使用すれば、システム上のすべての ZFS ファイルシステムを共有できます。


# zfs share -a

従来の共有の動作

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 より古いプール上のボリュームには、ユーザーおよびグループの割り当て制限プロパティーを設定できません。

ファイルシステムを管理するために、割り当て制限と予約の機能としてどれが適しているかを判断するには、次の点を考慮してください。

  • quota プロパティーと reservation プロパティーは、データセットが消費する容量を管理する場合に便利です。

  • refquota プロパティーと refreservation プロパティーは、データセットとスナップショットが消費する容量を管理する場合に適しています。

  • refquota または refreservation に、quota または reservation より大きい値を設定しても、何の効果もありません。quota プロパティーまたは refquota プロパティーを設定した場合、どちらかの値を超えるような操作は失敗します。refquota より大きい値の quota 値を超える場合もあります。スナップショットのブロックの一部がダーティーになっている場合は、refquota を超える前に実際に quota を超える可能性があります。

  • ユーザーおよびグループの割り当てを制限することによって、大学などのような、多数のユーザーアカウントが存在する環境でディスクスペースを簡単に管理できるようになります。

割り当て制限と予約の設定方法の詳細については、「ZFS ファイルシステムに割り当て制限を設定する」および「ZFS ファイルシステムに予約を設定する」を参照してください。

ZFS ファイルシステムに割り当て制限を設定する

ZFS の割り当て制限は、zfs set および zfs get コマンドを使用して設定および表示できます。次の例では、10G バイトの割り当て制限が tank/home/bonwick に設定されます。


# zfs set quota=10G tank/home/bonwick
# zfs get quota tank/home/bonwick
NAME              PROPERTY      VALUE                      SOURCE
tank/home/bonwick quota         10.0G                      local

ZFS の割り当て制限を設定すると、zfs list および df コマンドの出力も変化します。次に例を示します。


# zfs list
NAME                   USED  AVAIL  REFER  MOUNTPOINT
tank/home             16.5K  33.5G  8.50K  /export/home
tank/home/bonwick     15.0K  10.0G  8.50K  /export/home/bonwick
tank/home/bonwick/ws  6.50K  10.0G  8.50K  /export/home/bonwick/ws
# df -h /export/home/bonwick
Filesystem             size   used  avail capacity  Mounted on
tank/home/bonwick       10G     8K    10G     1%    /export/home/bonwick

tank/home は 33.5G バイトの容量を使用できますが、tank/home/bonwicktank/home/bonwick/ws は 10G バイトしか使用できません。これは、 tank/home/bonwick に割り当て制限が設定されているためです。

割り当て制限には、データセットが現在使用している容量より少ない容量を設定することはできません。次に例を示します。


# zfs set quota=10K tank/home/bonwick
cannot set quota for 'tank/home/bonwick': size is less than current used or 
reserved space

データセットに refquota を設定して、データセットが消費できる容量を制限できます。この強い制限値には、スナップショットとクローンで消費される容量は含まれません。次に例を示します。


# zfs set refquota=10g students/studentA
# zfs list
NAME                USED  AVAIL  REFER  MOUNTPOINT
profs               106K  33.2G    18K  /profs
students           57.7M  33.2G    19K  /students
students/studentA  57.5M  9.94G  57.5M  /students/studentA
# zfs snapshot students/studentA@today
# zfs list
NAME                      USED  AVAIL  REFER  MOUNTPOINT
profs                     106K  33.2G    18K  /profs
students                 57.7M  33.2G    19K  /students
students/studentA        57.5M  9.94G  57.5M  /students/studentA
students/studentA@today      0      -  57.5M  -

利便性を高めるために、データセットに別の割り当て制限を設定して、スナップショットで消費される容量を管理することもできます。次に例を示します。


# zfs set quota=20g students/studentA
# zfs list
NAME                      USED  AVAIL  REFER  MOUNTPOINT
profs                     106K  33.2G    18K  /profs
students                 57.7M  33.2G    19K  /students
students/studentA        57.5M  9.94G  57.5M  /students/studentA
students/studentA@today      0      -  57.5M  -

このシナリオでは、studentA が refquota (10G バイト) の強い制限に到達する可能性がありますが、スナップショットが存在している場合でも回復のためにファイルを削除することができます。

上の例では、2 つの割り当て制限 (10G バイトと 20G バイト) のうち小さい方が zfs list の出力に表示されています。両方の割り当て制限を表示するには、zfs get コマンドを使用します。次に例を示します。


# zfs get refquota,quota students/studentA
NAME               PROPERTY  VALUE              SOURCE
students/studentA  refquota  10G                local
students/studentA  quota     20G                local

ZFS ファイルシステムでユーザーまたはグループの割り当て制限を設定する

ユーザーまたはグループの割り当て制限を設定するには、zfs userquota コマンドおよび zfs groupquota コマンドを次のように使用します。


# zfs create students/compsci
# zfs set userquota@student1=10G students/compsci
# zfs create students/labstaff
# zfs set groupquota@staff=20GB students/labstaff

現在のユーザーまたはグループの割り当て制限が次のように表示されます。


# zfs get userquota@student1 students/compsci
NAME              PROPERTY            VALUE               SOURCE
students/compsci  userquota@student1  10G                 local
# zfs get groupquota@staff students/labstaff
NAME               PROPERTY          VALUE             SOURCE
students/labstaff  groupquota@staff  20G               local

次のプロパティーのクエリーによって、ユーザーおよびグループの全般的な領域使用状況を表示することができます。


# zfs userspace students/compsci
TYPE        NAME      USED  QUOTA  
POSIX User  root      227M   none  
POSIX User  student1  455M    10G  
# zfs groupspace students/labstaff
TYPE         NAME   USED  QUOTA  
POSIX Group  root   217M   none  
POSIX Group  staff  217M    20G  

個々のユーザーまたはグループの領域使用状況を特定する場合は、次のプロパティーのクエリーを実行します。


# zfs get userused@student1 students/compsci
NAME              PROPERTY           VALUE              SOURCE
students/compsci  userused@student1  455M               local
# zfs get groupused@staff students/labstaff
NAME               PROPERTY         VALUE            SOURCE
students/labstaff  groupused@staff  217M             local

すべてのファイルシステムプロパティーを一覧表示する場合に使用する zfs get all dataset コマンドを使用しても、ユーザーおよびグループの割り当て制限プロパティーは表示されません。

ユーザーまたはグループの割り当て制限は次のようにして解除することができます。


# zfs set userquota@user1=none students/compsci
# zfs set groupquota@staff=none students/labstaff

ZFS のユーザーおよびグループの割り当て制限には次のような機能があります。

  • ファイルシステムで設定する場合、親ファイルシステムで設定されたユーザーまたはグループの割り当て制限は、自動的には子孫のファイルシステムに継承されません。

  • ただし、ユーザーまたはグループの割り当て制限が設定されているファイルシステムのクローンまたはスナップショットを作成した場合には、それらの割り当て制限が適用されます。同様に、zfs send コマンド (-R オプションなしでも可) を使用してストリームを作成した場合にも、ユーザーまたはグループの割り当て制限がファイルシステムに組み込まれます。

  • 非特権ユーザーは、自身の領域使用状況のみを確認することができます。root ユーザー、または userused 権限や groupused 権限を持っているユーザーは、あらゆるユーザーまたはグループのスペースアカウント情報にアクセスすることができます。

  • userquota および groupquota プロパティーは、ZFS ボリューム、バージョン 4 よりも古いファイルシステム、またはバージョン 15 よりも古いプールでは設定できません。

ユーザーまたはグループの割り当て制限の拡張機能が表示されるまでに数秒かかることがあります。そのような遅延が発生する場合は、割り当て制限を超えているのでこれ以上は書き込みが許可されないことが EDQUOT エラーメッセージによって通知される前にユーザーが自身の割り当て制限を超えている可能性があります。

従来の quota コマンドを使用して、NFS 環境 (例えば、ZFS ファイルシステムがマウントされているものなど) におけるユーザーの割り当て制限を確認することができます。ユーザーが割り当て制限を超えてる場合は、何もオプションを指定しなくても、quota コマンドだけで、出力情報が表示されます。次に例を示します。


# zfs set userquota@student1=10m students/compsci   
# zfs userspace students/compsci
TYPE        NAME      USED  QUOTA  
POSIX User  root      227M   none  
POSIX User  student1  455M    10M  
# quota student1
Block limit reached on /students/compsci

割り当て制限をリセットして制限を超えることがないようにする場合は、quota -v コマンドを使用してユーザーの割り当てを確認する必要があります。次に例を示します。


# zfs set userquota@student1=10GB students/compsci 
# zfs userspace students/compsci
TYPE        NAME      USED  QUOTA  
POSIX User  root      227M   none  
POSIX User  student1  455M    10G  
# quota student1
# quota -v student1
Disk quotas for student1 (uid 201):
Filesystem     usage  quota  limit    timeleft  files  quota  limit    timeleft
/students/compsci
              466029 10485760 10485760     

ZFS ファイルシステムに予約を設定する

ZFS の「予約」とは、データセットが使用できることを保証された、プールから割り当てられた領域のことです。つまり、プールで現在使用できない容量をデータセットの容量として予約することはできません。未処理の使用されていない予約の合計容量が、プールで消費されていない容量を超えることはできません。ZFS の予約は、zfs set および zfs get コマンドを使用して設定および表示できます。次に例を示します。


# zfs set reservation=5G tank/home/moore
# zfs get reservation tank/home/moore
NAME             PROPERTY      VALUE                      SOURCE
tank/home/moore  reservation   5.00G                      local

ZFS の予約を設定すると、zfs list コマンドの出力が変化する可能性があります。次に例を示します。


# zfs list
NAME                   USED  AVAIL  REFER  MOUNTPOINT
tank/home             5.00G  33.5G  8.50K  /export/home
tank/home/moore       15.0K  10.0G  8.50K  /export/home/moore

tank/home は 5G バイトの容量を使用していますが、tank/home とそのすべての子孫が参照している容量の合計は 5G バイト未満です。使用されている容量には、tank/home/moore に予約されている容量が反映されます。予約は、親データセットが使用している容量に計上されるので、親データセットの割り当て制限または予約、あるいはその両方を減らすことになります。


# zfs set quota=5G pool/filesystem
# zfs set reservation=10G pool/filesystem/user1
cannot set reservation for 'pool/filesystem/user1': size is greater than 
available space

データセットは、予約より多くの容量を使用できます。ただし、プールの中で予約されていない領域があり、データセットが現在使用している容量が割り当て制限に達していないことが条件です。データセットは、別のデータセットに予約されている容量を消費することはできません。

予約は加算されません。つまり、zfs set をもう一度呼び出して予約を設定しても、既存の予約に新しい予約が追加されることはありません。代わりに、既存の予約が 2 番目の予約で置き換えられます。


# zfs set reservation=10G tank/home/moore
# zfs set reservation=5G tank/home/moore
# zfs get reservation tank/home/moore
NAME             PROPERTY      VALUE                      SOURCE
tank/home/moore  reservation   5.00G                      local

refreservation を設定すると、スナップショットとクローンで消費される容量は含めずに、データセットの容量を保証することができます。refreservation 予約は、親データセットが使用する容量に計上されるので、親データセットの割り当て制限と予約を減らすことになります。次に例を示します。


# zfs set refreservation=10g profs/prof1
# zfs list
NAME                      USED  AVAIL  REFER  MOUNTPOINT
profs                    10.0G  23.2G    19K  /profs
profs/prof1                10G  33.2G    18K  /profs/prof1

同じデータセットに予約を設定して、データセットの容量とスナップショットの容量を確保することもできます。次に例を示します。


# zfs set reservation=20g profs/prof1
# zfs list
NAME                      USED  AVAIL  REFER  MOUNTPOINT
profs                    20.0G  13.2G    19K  /profs
profs/prof1                10G  33.2G    18K  /profs/prof1

通常の予約は、親が使用する容量に計上されます。

上の例では、2 つの割り当て制限 (10G バイトと 20G バイト) のうち小さい方が zfs list の出力に表示されています。両方の割り当て制限を表示するには、zfs get コマンドを使用します。次に例を示します。


# zfs get reservation,refreserv profs/prof1
NAME         PROPERTY        VALUE        SOURCE
profs/prof1  reservation     20G          local
profs/prof1  refreservation  10G          local

refreservation を設定すると、スナップショットを作成できるのは、データセットの referenced の現在のバイト数を格納できる十分な空きプール領域が、この予約容量のほかに存在する場合だけになります。