Oracle Solaris ZFS 管理ガイド

ZFS のプロパティーの紹介

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

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

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

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

local

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

inherited from dataset-name

そのプロパティーが、指定された祖先から継承されたことを示しています。

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 で、適切なアルゴリズム (現在は fletcher4) が自動的に選択されます。値は、on、off、fletcher2fletcher4、および sha256 です。値を off にすると、ユーザーデータの完全性チェックが無効になります。値を off にすることは推奨されていません。

compression

文字列 

off

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

このプロパティーの省略名は compress です。

compressratio

数値 

なし 

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

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

copies

数値 

1

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

creation

文字列 

なし 

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

devices

ブール型 

on

ファイルシステムのデバイスファイルを開けるかどうかを制御します。

exec

ブール型 

on

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

mounted

ブール型 

なし 

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

mountpoint

文字列 

なし 

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

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

primarycache

文字列 

all

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

origin

文字列 

なし 

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

複製されていないファイルシステムの origin は、none になります。

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

文字列 

all

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

setuid

ブール型 

on

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

shareiscsi

文字列 

off 

ZFS ボリュームが iSCSI ターゲットとして共有されるかどうかを制御します。プロパティーの値は onoff、および type=disk です。ファイルシステムに shareiscsi=on と設定して、そのファイルシステム内のすべての ZFS ボリュームがデフォルトで共有されるようにすることをお勧めします。ただし、このプロパティーをファイルシステムに設定しても、直接的な効果は何も得られません。

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 です。

version

数値 

なし 

ファイルシステムのディスク上バージョンを識別します。プールのバージョンとは無関係です。このプロパティーは、サポートされるソフトウェアリリースから入手可能な最近のバージョンにしか設定できません。詳細については、zfs upgrade コマンドを参照してください。

volsize

数値 

なし 

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

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

volblocksize

数値 

8K バイト

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

このプロパティーの省略名は volblock です。

zoned

ブール型 

なし 

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

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

xattr

ブール型 

on

このファイルシステムの拡張属性を有効 (on)、無効 (off) のいずれにするかを示します。

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

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

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

used referencedavailable プロパティーなど、ディスク領域の計上の詳細については、「ZFS のディスク領域の計上」を参照してください。

used プロパティー

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 プロパティー

canmount プロパティーを off に設定した場合は、zfs mount または zfs mount -a コマンドを使ってファイルシステムをマウントすることはできません。このプロパティーを off に設定することは、mountpoint プロパティーを none に設定することに似ていますが、継承可能な通常の mountpoint プロパティーをデータセットが引き続き保持する点が異なります。たとえば、このプロパティーを 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 mount
userpool/user1                  /export/home/user1
userpool/user2                  /export/home/user2

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

recordsize プロパティー

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

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

このプロパティーの省略名は recsize です。

volsize プロパティー

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

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

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

ZFS ユーザープロパティー

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

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

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


module:property

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

ユーザープロパティーの値は次の規則に準拠する必要があります。

次に例を示します。


# 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

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