FreeBSD で ZFS を利用する – ZFS ファイルシステムの機能について理解する (2)

ZFS

ZFS ファイルシステムで利用できる機能は多岐にわたります.今回はファイルシステム (と ZVOL) が持つ機能について説明を行います.
マニュアルをベースに抜粋してなるべく見やすいように記載をしているつもりです.
なお,マニュアルの参照元は zfsprops(7) です.

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』を参照してください.

以上,長くなったので次回へ続きます.

コメント

タイトルとURLをコピーしました