Web更新

UbuntuでZFSを使ってみよう 第30回 ZFSのプロパティを見てみよう(12)

前回に引き続き、今回もZFSの設定可能なプロパティについて説明します。

snapdev=hidden|visible

dev/zvol/以下のボリュームスナップショットデバイスを非表示にするか表示するかを制御します。デフォルト値は hidden です。

snapdir=hidden|visible

ファイルシステムのルートで .zfs ディレクトリを非表示にするか、表示するかどうかを制御します。 デフォルト値はhiddenです。

sync=standard|always|disabled

同期要求(fsync、O_DSYNCなど)の動作を制御します。
standard は POSIX で規定された動作で、すべての同期要求が安定したストレージに書き込まれ、 すべてのデバイスがフラッシュされ、デバイスコントローラによってデータが キャッシュされないようにします 。これがデフォルトです。
always は、すべてのファイルシステムトランザクションが書き込まれ、そのシステムコールが返される前にフラッシュされます。 これは大きなパフォーマンス上のペナルティがあります。ファイルシステムトランザクションは、定期的に安定したストレージにのみコミットされます。このオプションは、最も高いパフォーマンスを発揮します。しかし、データベースや NFS などのアプリケーションの同期トランザクションの要求を無視するため、非常に危険なオプションです。管理者は、リスクを理解した場合にのみ、このオプションを使用する必要があります。

version=N|current

このファイルシステムのオンディスクバージョンです。プールのバージョンとは独立しています。このプロパティは、後でサポートされるバージョンにのみ設定できます。 zfs upgrade コマンドを参照してください。

volsize=size

ボリュームの場合、ボリュームの論理サイズを指定します。 デフォルトでは、ボリュームを作成すると、同じサイズの予約が確立されます。バージョン 9 以降のストレージプールでは、代わりにリザベーションが設定されます。volsizeの変更は、予約(またはリフレッシュ予約)の変更と同等に反映されます。volsizeは、volblocksizeの倍数のみ設定でき、0にはできません。

コンシューマーが予期しない動作をしないように、リザベーションはボリュームの論理サイズと等しくなるように維持されます。リザベーションがないと、ボリュームの使用方法によっては、ボリュームの容量が不足し、未定義の動作やデータの破損を発生する可能性があります。これらの影響は、使用中にボリュームのサイズを変更した場合(特にサイズを縮小した場合)にも発生する可能性があります。ボリュームサイズを調整する際には、細心の注意を払う必要があります。

推奨されませんが、zfs create -Vコマンドに-sオプションを指定するか、ボリューム作成後にリフレッシュプロパティの値を変更することで、「スパースボリューム」(「シンプロビジョニング」としても知られています)を作成可能です。「スパースボリューム」とは、リフレッシュネーションの値がボリュームのサイズとそのメタデータを保存するために必要なスペースよりも小さいボリュームのことを指します。したがって、プールの空き容量が少ない場合、スパースボリュームへの書き込みはENOSPCで失敗する可能性があります。スパースボリュームの場合、volsizeの変更はリフレッシュ予約に反映されません。スパースでないボリュームは、「シック プロビジョニング」と呼ばれます。
スパースボリュームは、リフレッシュ保存を自動に設定すると、シックプロビジョニングに変更できます。

volmode=default | full | geom | dev | none

このプロパティは、ボリュームをOSにどのように公開するかを指定します。
full を設定すると、ボリュームは完全なブロックデバイスとして公開され、最大限の機能を提供します。
geom は fullのエイリアスに過ぎず、互換性のために保持されています。
devに設定すると、パーティションが非表示になります。
noneに設定されたプロパティが付いたボリュームは、ZFSの外部に公開されませんが、スナップショット、クローン、レプリケートなどが可能で、バックアップ目的に適している場合があります。
デフォルト値は、ボリュームの公開がシステム全体の調整変数である zvol_volmode によって制御されることを意味し、ここで full、dev、none はそれぞれ 1、2、3 として符号化されます。デフォルト値は full です。

xattr=on|off|sa

このファイルシステムで拡張属性を有効にするかどうかを制御します。拡張属性は、ディレクトリベースとシステム属性ベースの2つのスタイルがサポートされています。

デフォルトのonは、ディレクトリ・ベースの拡張属性を有効にします。このスタイルの拡張属性は、ファイルに設定できる属性のサイズや数に実用的な制限を課しません。ただし、Linux では getxattr(2) と setxattr(2) システムコールが最大サイズを 64K に制限しています。これは最も互換性のある拡張属性のスタイルで、すべての OpenZFS 実装でサポートされています。

システム属性ベースの xattrs は、 sa を設定すると有効にできます。このタイプの xattr の主な利点は、パフォーマンスの改善です。拡張属性をシステム属性として格納することで、必要なディスクI/Oの量が大幅に減少します。システム属性のため予約されたスペースに、ファイルごとに最大64Kのデータを格納できます。拡張属性に十分なスペースがない場合、それは自動的にディレクトリベースのxattrとして書き込まれます。システム属性に基づく拡張属性は、xattr=sa 機能をサポートしないプラットフォームではアクセスできません。

SELinuxやPOSIX ACLのユーザーには、システム属性に基づくxattrsの使用が強く推奨されます。これらの機能は拡張属性に大きく依存しており、アクセス時間が短縮されることで大きな利益を得られます。

on と off の値は、マウントオプションの xattr/noxattr と同等です。

casesensitivity=sensitive|insensitive|mixed

ファイルシステムで使用されるファイル名照合アルゴリズムが、大文字小文字を区別するか、区別しないか、あるいは両方のスタイルの照合を許容するかを示します。
casesensitivityプロパティのデフォルト値はsensitiveです。 伝統的に、UNIXとPOSIXのファイルシステムは、大文字と小文字を区別するファイル名を採用しています。

casesensitivityプロパティのmixed値は、ファイル・システムが大文字と小文字を区別するマッチング動作の両方の要求をサポートできることを示します。現在、混合動作をサポートするファイルシステムでの大文字小文字を区別しないマッチング動作は、SMBサーバー製品に限定されています。

normalization=none|formC|formD|formKC|formKD

2つのファイル名を比較する際に、ファイルシステムがファイル名のUnicode正規化を行うか、またどの正規化アルゴリズムを使用するかを示します。ファイル名は常に変更されずに保存され、名前はあらゆる比較処理の一部として正規化されます。
このプロパティが none 以外の正当な値に設定され、utf8only プロパティが指定されていない場合、utf8only プロパティは自動的に on に設定されます。
正規化プロパティのデフォルト値はnoneです。 このプロパティは、ファイルシステム作成後に変更はできません。

utf8only=on|off

ファイルシステムが、UTF-8 文字コードセットに存在しない文字を含むファイル名を拒否するかどうかを示します。このプロパティを明示的に off に設定した場合、正規化プロパティは明示的に設定しないか、または none に設定する必要があります。
utf8only プロパティのデフォルト値は off です。 このプロパティは、ファイルシステム作成後に変更はできません。

終わりに

今回は前回に引き続き、ZFSの設定可能なプロパティについて説明しました。次回は、4月にリリースされたUbuntu 22.04LTS で使用している、OpenZFS について変更点を確認します。次回をお楽しみに。

さて、このコラムを掲載いただいているデジタル・ヒュージ・テクノロジー社は老舗のOSSインテグレーターです。特にLinuxは強く、OSSを活用した業務システムの実績も多いです。興味がある方は以下のページもご覧ください。
DHT OSS導入コンサルティングサービス

関連記事一覧