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

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

自分で設定が変えられる項目,変えられない項目がありますが,以下この並びに沿って解説を入れていきます.
前回は casesensitivity まで記載しましたので,今回はその続きになります.

vscan

値は on,off になります.

ファイルを開いたり閉じたりするときに,通常のファイルのウイルススキャンを行うかどうかを制御します.
ウイルススキャンを実行するには,このプロパティを有効にすることに加えて,ウイルス スキャン サービスも有効にする必要があります.
デフォルト値は off です.また,このプロパティは OpenZFS では使用されません.
(したがって,FreeBSD では利用ができません)

nbmand

値は on,off になります.

ファイルシステムを nbmand (ノンブロッキング必須ロック) でマウントするかどうかを制御します.
このプロパティへの変更は,ファイルシステムがアンマウントされ,再マウントされた際に有効になります.
また,これは 5.15 より前の Linux でのみサポートされており,そこでバグがあったため,FreeBSD ではサポートされていません.
Solaris では,SMB クライアントに使用されます.

sharesmb

値は on,off,opts になります.

Samba USERSHARES を使用してファイル システムを共有するかどうか,およびどのようなオプションを使用するかを制御します.
それ以外の場合,ファイルシステムは、zfs share および zfs unshare コマンドを使用して自動的に共有および共有解除されます.
このプロパティが on に設定されている場合,net(8) コマンドが呼び出され、USERSHARE が作成されます.

SMB 共有にはリソース名が必要なため,データセット名から一意のリソース名が構築されます.
構築された名前は,データセット名のコピーですが,リソース名では無効となるデータセット名の文字がアンダースコア (_) 文字に置き換えられます.
Linux は現在,Solaris で利用できる追加オプションをサポートしていません.

sharesmb プロパティが off に設定されている場合,ファイル システムは共有されません.

共有は ACL (アクセス コントロール リスト)「Everyone:F」(「F」は「フル アクセス許可」,つまり読み取りおよび書き込みアクセス許可を表します) を使用して作成され、ゲスト アクセスはありません (つまり、Samba は実際のユーザーを認証できる必要があります).
デフォルトでは passwd(5)/shadow(5)、LDAP、または smbpasswd(5).
これは,追加のアクセス制御 (特定のユーザー固有のアクセスを禁止するなど) を基盤となるファイル システムで実行する必要があることを意味します.

sharesmb プロパティが zfs set -u で更新されると,プロパティは目的の値に設定されますが,データセットを共有,再共有,または共有解除する操作は実行されません.

refquota

値は size,none になります.

データセットが消費できるスペースの量を制限します.
このプロパティは、使用されるスペースの量に厳しい制限を適用します.
このハード制限には,quota プロパティと違って,ファイル システムやスナップショットなど,子孫によって使用される領域は含まれません.

refreservation

値は size,none になります.

データセットに対して保証される最小領域を設定できます (配下は含まれません).
使用されるスペースの量がこの値を下回っている場合,データセットは、refreservation で指定されたスペースの量を占有しているかのように扱われます.
refreservation による予約は,親データセットの使用スペースに考慮され,親データセットのクォータと reservation に対してカウントされます.

refreservation が設定される場合,スナップショットは,データセット内の現在の「referenced」バイト数を収容するのに十分な空き領域がこの予約以外存在する場合にのみ許可されます.
refreservation が auto に設定されている場合,ボリュームはシックプロビジョニングされます.
refreservation=auto はボリュームでのみサポートされます.
スパースボリュームの詳細については、「Native Properties」セクションの volsize を参照してください.
このプロパティは、短縮された列名 refreserv によって参照することもできます。

guid

このデータセットまたはブックマークの 64 ビット GUID です.
データセット,ブックマークが存続する限りずっと変更されません.
スナップショットが別のプールに送信されると,受信したスナップショットは同じ GUID を持ちます.
したがって,guid はプール全体のスナップショットを識別するのに適しています.

primarycache

値は all,none,metadata になります.

プライマリ キャッシュ (ARC) に何をキャッシュするかを制御します.
このプロパティが all に設定されている場合,ユーザー データとメタデータの両方がキャッシュされます.
このプロパティが none に設定されている場合,ユーザー データもメタデータもキャッシュされません.
このプロパティが metadata に設定されている場合,メタデータのみがキャッシュされます.
デフォルト値は「all」です.

secondarycache

値は all,none,metadata になります.

二次キャッシュ (L2ARC) に何をキャッシュするかを制御します.
このプロパティが all に設定されている場合,ユーザー データとメタデータの両方がキャッシュされます.
このプロパティが none に設定されている場合,ユーザー データもメタデータもキャッシュされません.
このプロパティが metadata に設定されている場合,メタデータのみがキャッシュされます.
デフォルト値は「all」です.

usedbysnapshots

このデータセットのスナップショットによって消費されているスペースの量.
特に,このデータセットのスナップショットがすべて破棄された場合に解放されるスペースの量です.
領域は複数のスナップショットで共有される可能性があるため,これはスナップショットの使用済みプロパティの単純な合計ではないことに注意してください.

usedbydataset

このデータセット自体によって使用されるスペースの量.
データセットが破棄された場合に解放される量になります.

usedbychildren

このデータセットの配下によって使用されるスペースの量.
データセットのすべての子が破棄された場合に解放される量になります.

usedbyrefreservation

このデータセット上の refreservation セットによって使用されるスペースの量.
refreservation が削除された場合に解放される量になります.

logbias

値は latency,throughput です.

このデータセット内の同期リクエストの処理に関するヒントを ZFS に提供します.
logbias が latency (デフォルト) に設定されている場合,ZFS はプールログデバイス (構成されている場合) を使用して低遅延でリクエストを処理します.
logbias が throughput に設定されている場合,ZFS は構成されたプールログデバイスを使用しません.
ZFS は代わりに,グローバル プールの throughput とリソースの効率的な使用のために同期操作を最適化します.

objsetid

プール内のこのデータセットの一意の識別子.
データセットの guid とは異なり,send/recv でスナップショットがコピーされる際,データセットの objsetid は他のプールに転送されません.
objsetid は,データセットの削除後に (新しいデータセット用に) 再利用されます.

dedup

値は off,on,verify,sha256,sha256,verify,sha512,sha512,verify,skein,skein,verify,edonr,verify,blake3,blake3,verify です.

データセットの重複排除を構成します.
デフォルト値は off です.現在のデフォルトの重複排除チェックサムは sha256 です.
重複排除が有効な場合,ここで定義されたチェックサムは checksum プロパティを上書きします. verify に設定すると,現在は sha256,verify の設定と同じ効果があります.
verify に設定すると,ZFS は 2 つのブロックが同じ署名を持つ場合にバイト間比較を実行して,ブロックの内容を同一か確認します.
edonr アルゴリズムでは verify の指定が必須です.

mlslabel

mlslabel プロパティは、現在 FreeBSD でサポートされていません。

sync

値は standard,always,disabled です.

同期リクエスト (fsync、O_DSYNC など) の動作を制御します.
standard は,すべての同期リクエストがストレージに書き込まれ,データがデバイス コントローラーによってキャッシュされないようにすべてのデバイスがフラッシュされることを保証する POSIX 指定の動作です (これがデフォルトです).

always は,すべてのファイルシステム トランザクションが書き込まれ,フラッシュされた後システムコールを返します.これにはパフォーマンスに大きなペナルティが伴います.


disabled は同期リクエストを無効にします.ファイル システム トランザクションは,ストレージに定期的にのみコミットされます.このオプションでは最高のパフォーマンスが得られます.
ただし,ZFS はデータベースや NFS などのアプリケーションの同期トランザクション要求を無視することになるため,非常に危険です.
管理者は,リスクを理解している場合にのみこのオプションを使用してください.

dnodesize

値は legacy,auto,1k,2k,4k,8k,16k です.

ファイル システム内の dnode のサイズの互換モードまたはリテラル値を指定します.
デフォルト値はレガシーです.このプロパティをレガシー以外の値に設定するには,プールでlarge_dnode を有効にする必要があります.

データセットで xattr=sa プロパティ設定が使用されており,ワークロードで拡張属性が頻繁に使用される場合は、dnodesize を auto に設定することを検討してください.
これは、SELinux 対応システム,Lustre サーバー,Samba サーバーなどに適用できる場合があります.
リテラル値は,最適なサイズが事前にわかっている場合とパフォーマンステストのためにサポートされます.

large_dnode 機能が有効になっていないプールでこのデータセットの送信ストリームを受信する必要がある場合,またはlarge_dnode 機能をサポートしていないシステムにこのプールをインポートする必要がある場合は,dnodesize をレガシーに設定したままにしてください.

このプロパティは,短縮された列名 dnsize によって参照することもできます.

refcompressratio

このデータセットの参照空間に対して達成された圧縮率です.乗数として表されます.
compressratio プロパティも参照してください.

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

コメント

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