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
自分で設定が変えられる項目,変えられない項目がありますが,以下この並びに沿って解説を入れていきます.
前回は 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 プロパティも参照してください.
以上,長くなったので次回へ続きます.
コメント