ZFS ファイルシステムで利用できる機能は多岐にわたります.今回はファイルシステム (と ZVOL) が持つ機能について説明を行います.
マニュアルをベースに抜粋してなるべく見やすいように記載をしているつもりです.
なお,マニュアルの参照元は zfsprops(7) です.
- ZFS に関するお話
- FreeBSD で ZFS を利用する – ZFS 概要
- FreeBSD で ZFS を利用する – ZFS プールの作成 (パーティション切らない編)
- FreeBSD で ZFS を利用する – ZFS プールの機能について理解する
- FreeBSD で ZFS を利用する – ファイルシステムを管理する
- FreeBSD で ZFS を利用する – send/recv を使い倒す
- FreeBSD で ZFS を利用する – RAWボリュームを切り出す & iSCSI として提供する
- FreeBSD で ZFS を利用する – ファイルシステムの圧縮を利用する・比較する
- FreeBSD で ZFS を利用する – ZFS のキャッシュの仕組みを理解する
- FreeBSD で ZFS を利用する – キャッシュを構成・設定する
- FreeBSD で ZFS を利用する – 重複排除を利用する・確認する
- FreeBSD で ZFS を利用する – ZFS ファイルシステムの機能について理解する (1)
- FreeBSD で ZFS を利用する – ZFS ファイルシステムの機能について理解する (2)
- FreeBSD で ZFS を利用する – ZFS ファイルシステムの機能について理解する (3)
- FreeBSD で ZFS を利用する – ZFS ファイルシステムの機能について理解する (4)
ZFS ファイルシステムプロパティ
作成済みの ZFS ファイルシステムのプロパティを表示するとこのように沢山の項目が表示されます.
# zfs get all pool0 NAME PROPERTY VALUE SOURCE pool0 type filesystem - pool0 creation Mon Dec 18 18:35 2023 - pool0 used 10.0G - pool0 available 375G - pool0 referenced 32.0K - pool0 compressratio 1.00x - pool0 mounted yes - pool0 quota none default pool0 reservation none default pool0 recordsize 128K default pool0 mountpoint /pool0 default pool0 sharenfs off default pool0 checksum on default pool0 compression off default pool0 atime on default pool0 devices on default pool0 exec on default pool0 setuid on default pool0 readonly off default pool0 jailed off default pool0 snapdir hidden default pool0 aclmode discard default pool0 aclinherit restricted default pool0 createtxg 1 - pool0 canmount on default pool0 xattr on default pool0 copies 1 default pool0 version 5 - pool0 utf8only off - pool0 normalization none - pool0 casesensitivity sensitive - pool0 vscan off default pool0 nbmand off default pool0 sharesmb off default pool0 refquota none default pool0 refreservation none default pool0 guid 1264596009273225631 - pool0 primarycache all default pool0 secondarycache all default pool0 usedbysnapshots 0B - pool0 usedbydataset 32.0K - pool0 usedbychildren 10.0G - pool0 usedbyrefreservation 0B - pool0 logbias latency default pool0 objsetid 54 - pool0 dedup off default pool0 mlslabel none default pool0 sync standard default pool0 dnodesize legacy default pool0 refcompressratio 1.00x - pool0 written 32.0K - pool0 logicalused 206K - pool0 logicalreferenced 12.5K - pool0 volmode default default pool0 filesystem_limit none default pool0 snapshot_limit none default pool0 filesystem_count none default pool0 snapshot_count none default pool0 snapdev hidden default pool0 acltype nfsv4 default pool0 context none default pool0 fscontext none default pool0 defcontext none default pool0 rootcontext none default pool0 relatime off default pool0 redundant_metadata all default pool0 overlay on default pool0 encryption off default pool0 keylocation none default pool0 keyformat none default pool0 pbkdf2iters 0 default pool0 special_small_blocks 0 default
自分で設定が変えられる項目,変えられない項目がありますが,以下この並びに沿って解説を入れていきます.
前回は compression まで記載しましたので,今回はその続きになります.
atime
値は on,off になります.
ファイルの読み取り時にファイルのアクセス時間を更新するかどうかを制御します.
このプロパティを off にすると,ファイルの読み取り時に書き込みが発生しなくなるため,パフォーマンスが大きく向上する可能性がありますが,アプリケーションなどで不具合が生じる可能性があります.
on および off の値は、マウントオプションの atime および noatime と同等です.
デフォルト値はオンです。以下の「relatime」も参照してください.
devices
値は on,off になります.
このファイル システム上でデバイスノードを開くことができるかどうかを制御します.
デフォルト値は on です.
on および off の値は,マウントオプションの dev および nodev と同等です.
exec
値は on,off になります.
このファイルシステム内からプロセスを実行できるかどうかを制御します.
デフォルト値は on です.
on および off の値は,マウントオプションの exec および noexec と同等です.
setuid
値は on,off になります.
ファイルシステムに対して setuid ビットを利用可能にするかどうかを制御します.
デフォルト値は on です.
on および off の値は、マウントオプション suid および nosuid と同等です.
readonly
値は on,off になります.
データセットを変更できるかどうかを制御します.
on に設定すると,データを変更できなくなります.
jailed
値は on,off になります.
データセットが jail の内部から管理されるかどうかを制御します.
詳細については,「jail」セクションを参照してください.
デフォルト値は off です.
snapdir
値は hidden または visible になります.
.zfs ディレクトリを表示させるかどうかを制御します.hidden の場合は表示されません (アクセスすることは可能です)
デフォルト値は hidden です.
aclmode
値は discard,groupmask,passthrough,restricted です.
chmod(2) 中に ACL がどのように変更されるか,また,継承された ACE がファイル作成モードによってどのように変更されるかを制御します.
discard
デフォルト値.chmod(2) によって要求されたファイルまたはディレクトリのモードを表す ACE を除くすべての ACE を削除します.
groupmask
ACL 内で見つかったすべての ALLOW エントリで付与される権限を,chmod(2) で指定されたグループ権限を超えないように削減します.
passthrough
ファイルまたはディレクトリの新しいモードを表すために必要な ACL エントリの作成または更新以外に、ACL に変更が加えられないことを示します.
restricted
モードでエントリを表現できない重要な ACL を持つファイルまたはディレクトリに対して chmod(2) 操作を使用すると,エラーが返されます.
chmod(2) は,ファイルまたはディレクトリ上の設定されたユーザー ID,設定されたグループ ID,またはスティッキー ビットを変更するために必要です.これらのビットには同等の ACL エントリがないためです.
aclmode が制限付きに設定されているときに,重要な ACL を持つファイルまたはディレクトリに対して chmod(2) を使用するには,まず現在のモードを表さないすべての ACL エントリを削除する必要があります.
aclinherit
値は discard,noallow,restricted,passthrough,passthrough-x です.
ファイルとディレクトリの作成時に ACE がどのように継承されるかを制御します。
discard
ACE を継承しません.
noallow
「拒否」権限を指定する継承可能な ACE のみを継承します.
restricted
デフォルト値です.ACE が継承されるときに write_acl および write_owner 権限が削除されます.
passthrough
継承可能なすべての ACE を変更せずに継承します.
passthrough-x
パススルーと同じ意味ですが,owner@,group@,Everyone@ ACE は,ファイル作成モードが実行ビットも要求する場合にのみ実行権限を継承します.
プロパティ値がパススルーに設定されている場合,ファイルは継承可能な ACE によって決定されるモードで作成されます.
モードに影響を与える継承可能な ACE が存在しない場合,アプリケーションから要求されたモードに従ってモードが設定されます.
aclinherit プロパティは POSIX ACL には適用されません.
createtxg
値は on,off,オプション になります.
データセットが作成されたトランザクショングループ (txg)です.
ブックマークには,最初に関連付けられているスナップショットと同じ createtxg が設定されています.
このプロパティは,スナップショットのリストを並べ替えるのに適しています.
canmount
値は on,off,noauto です.
このプロパティが off に設定された場合,ファイルシステムをマウントすることができず,“zfs mount -a” は無視されます.
このプロパティを off に設定することは,データセットからみて継承することができる通常の mountpoint プロパティがまだあることを除いて、 mountpoint プロパティを none に設定することと同様です。
このプロパティを off 設定することによって,データセットをプロパティを継承するための唯一メカニズムとして使用することができます.
canmount=off を設定する一例として,両方のデータセットの子供が同じディレクトリに現れることができように、同じ mountpoint がある 2 つのデータセットがあることですが、異なっで継承される特性 (characteristic) があるかもしれません.
noauto の値が設定された場合,明示的にデータセットをマウント,アンマウントすることができます.
データセットは,自動的にマウントされず,“zfs mount -a” コマンドでもマウントされません.また,“zfs umount -a” コマンドでアンマウントされることもありません.
xattr
値はon,off,sa です.
このファイルシステムに対して拡張属性を有効にするかどうかを制御します.
ディレクトリベースまたはシステム属性ベースの二つのスタイルの拡張属性がサポートされています.
デフォルト値の on では,ディレクトリベースの拡張属性が有効になります.
このスタイルの拡張属性では,ファイルに設定できる属性のサイズや数に実際的な制限はありません.
ただし,Linux では getxattr(2) および setxattr(2) システム コールにより最大サイズが 64K に制限されます.
これは拡張属性の最も互換性のあるスタイルであり,すべての ZFS 実装でサポートされています.
システム属性ベースの xattrs は,値を sa に設定することで有効にできます.
このタイプの xattr の主な利点はパフォーマンスの向上です.
拡張属性をシステム属性として保存すると必要なディスク I/O の量が大幅に減少します.
システム属性用に予約されたスペースには,ファイルごとに最大 64K のデータを保存できます.
拡張属性に使用できる十分なスペースがない場合,拡張属性はディレクトリベースの xattr として自動的に書き込まれます.
システム属性ベースの拡張属性は,xattr=sa 機能をサポートしていないプラットフォームではアクセスできません.
OpenZFS は,FreeBSD と Linux の両方で xattr=sa をサポートします.
SELinux または POSIX ACL のユーザーには,システム属性ベースの xattrs の使用が強く推奨されます.
これらの機能はどちらも拡張属性に大きく依存しており,アクセス時間の短縮によって大きなメリットが得られます.
on および off は,マウントオプションの xattr および noxattr と同等です.
copies
値は 1,2,3 です.
このデータセットに保存されるデータのコピーの数を制御します.
これらのコピーは,ミラーリングや RAID-Z など,プールによって提供される冗長性に追加されます.
可能であれば,コピーは別のディスクに保存されます.
複数のコピーによって使用されるスペースは,関連付けられたファイルとデータセットにチャージされ,使用されるプロパティが変更され,クォータと予約に対しても影響されます.
このプロパティを変更すると,新しく書き込まれたデータにのみ影響します.
したがって,最初からコピー数を制御したい場合はファイルシステムの作成時に「-ocopies=N」オプションを使用してこのプロパティを設定します.
ZFS は,最上位の vdev が欠落しているプールはインポートできないことに注意してください.
たとえば,冗長性が設定されていると考えて,一部のデータセットに 2 つのディスクのストライプ プールを作成し,copys=2 を設定しないでください.
ディスクに障害が発生すると,プールをインポートできなくなりすべてのデータが失われます.
実装では通常 3 番目のコピーが存在する場所に一部の暗号化メタデータが保存されるため,暗号化されたデータセットには「copy=3」が存在しない場合があります.
このプロパティのデフォルト値は「1」です.
utf8only
値は on,off です.
デフォルト値は off です.
UTF-8 文字コード セットに存在しない文字を含むファイル名をファイル システムが拒否するかどうかを示します.
このプロパティが明示的にオフに設定されている場合は,正規化プロパティを明示的に設定しないか,または none に設定する必要があります.
utf8only プロパティのデフォルト値はオフです.
このプロパティは,ファイルシステムの作成後に変更することはできません.
normalization
値は none,formC,formD,formKC,formKD です.
デフォルト値は none です.
二つのファイル名を比較するときにファイルシステムがファイル名の Unicode 正規化を実行するかどうか,およびどの正規化アルゴリズムを使用するかを示します.
ファイル名は常に変更されずに保存され,名前は比較プロセスの一部として正規化されます.
このプロパティが none 以外の有効な値に設定され,utf8only プロパティが指定されていない場合,utf8only プロパティは自動的に on に設定されます.
このプロパティは,ファイル システムの作成後に変更することはできません.
casesensitivity
値は sensitive,insensitive,mixed です.
ファイルシステムで使用されるファイル名一致アルゴリズムが「大文字と小文字を区別する」か「大文字と小文字を区別しない」か,または両方の形式の一致の組み合わせを許可するかを示します.
デフォルト値は sensitive で,大文字と小文字を区別します.
従来,Unix および POSIX ファイル システムでは、「大文字と小文字が区別される」ファイル名が使用されていました.
casesensitivity プロパティの mixed は,ファイル システムが「大文字と小文字を区別する」と「大文字と小文字を区別しない」の両方の要求をサポートできることを示します.
現在,mixed をサポートするファイル システムでの大文字と小文字を区別しない一致動作は,SMB サーバー製品に限定されています.
mixed 値の動作の詳細については『ZFS Administration Guide』を参照してください.
以上,長くなったので次回へ続きます.
コメント