拡張ファイル属性とは
拡張ファイル属性(extended file attribute, xattr, EA)とは、
ファイルシステムが解釈しない
メタデータをファイルに結びつける機能です。これにより、ユーザーはファイルに関する追加情報を自由に管理できます。通常のファイル属性(パーミッション、作成日時など)が
ファイルシステムによって厳密に定義されているのに対し、拡張属性はより柔軟なデータ管理を可能にします。
一般的に、ファイルのデータ本体とは別に、
メタデータ用の領域が確保されます。この領域を「フォーク」と呼びます。フォークのサイズはファイル本体と同じくらい大きくできる場合もありますが、拡張属性のサイズは通常、比較的小さな値に制限されます。拡張属性の典型的な用途としては、文書の著者情報、
テキストファイルの
文字コード、エラー検出訂正符号などが挙げられます。
各OSにおける実装例
OS/2
OS/2のHPFS
ファイルシステムは、バージョン1.2以降で拡張属性をサポートしています。また、DOSのFAT
ファイルシステムも改造され、拡張属性が利用できるようになりました。OS/2の拡張属性は、ルート
ディレクトリにある「EA DATA. SF」というファイルに保存されます。拡張属性をサポートしないOSでは、通常このファイルにはアクセスできません。ただし、DOSのように直接
ファイルシステムを操作できるOSでは、このファイルの内容を容易に変更できてしまいます。拡張属性を持つファイルや
ディレクトリは、「EA DATA. SF」ファイル内で一つ以上のクラスタを消費します。このクラスタの番号は、
ディレクトリエントリに保存されます。OS/2バージョン2.0以降のワークプレース・シェルなどでは、ファイルタイプ、コメント、
アイコン、キーワードなどの情報を拡張属性として利用します。また、インタプリタ言語REXXで書かれたプログラムは、実行速度向上のためにパース済みのコードを拡張属性に保存することがあります。
Windows NT
Windows NTでは、OS/2と同様の方法でFATとHPFS
ファイルシステムで拡張属性をサポートしています。NTFS
ファイルシステムでは、拡張属性はファイルフォークの一つとして保存されます。OS/2の拡張属性は、OS/2サブシステムからアクセスできる他、BackupReadやBackupWriteシステムコールを通して、Windowsプログラムからもアクセスできます。また、Interix POSIXサブシステムでは、NFSサーバでUnix風のパーミッションを実装するために拡張属性が利用されます。
Linuxでは、カーネルの設定でlibattr機能が有効になっている場合、ext2、ext3、ext4、JFS、ReiserFS、XFSなどの
ファイルシステムで拡張属性(xattr)がサポートされます。各ファイルは、名前とデータを持つ複数の拡張属性を持つことができます。名前はNULL終端の
文字列であり、名前空間識別子とドット文字が前に付与されます。現在、user、trusted、security、systemという4つの名前空間が存在します。user名前空間には名前と内容に関する制限はありません。system名前空間は、主にカーネルが
アクセス制御リストとして利用し、security名前空間はSE
Linuxなどが利用します。拡張属性はカーネル2.6以降でサポートされていますが、ユーザープログラムでの利用はまだ一般的ではありません。Beagleという検索ツールやfreedesktop.orgでは拡張属性の利用が推奨されています。
FreeBSD
FreeBSD 5.0以降では、UFS1とUFS2
ファイルシステムで拡張属性がサポートされています。
Linuxと同様に、各ファイルは名前とデータを持つ複数の拡張属性を持つことができます。名前はNULL終端の
文字列であり、小さな整数で識別される名前空間に存在します。userとsystemの2つの名前空間があり、user名前空間には制限がありません。system名前空間は、カーネルが
アクセス制御リストや強制アクセス制御のために利用します。
OpenBSDのネイティブなfss
ファイルシステムは拡張属性をサポートしており、フラグとして参照されます。chflagsコマンドでこれらのフラグを制御できます。
Solaris 9以降では、ファイルに「拡張属性」を持たせることができますが、これは実際にはフォークとして扱われます。これらの属性は、内部的には通常のファイルのように保存・アクセスできます。そのため、名前には「/」文字を含めることができず、サイズに実質的な制限はなく、所有権やパーミッションを親ファイルとは別に設定できます。NFSバージョン4も、
Solarisとほぼ同様の方法で拡張属性をサポートします。
Mac OS X
Mac OS X v10.4以降では、HFS+
ファイルシステムの
B木機能を利用して拡張属性をサポートしています。HFS+では、名前付きフォークがエクステントを介して任意の大量データをサポートできますが、OSはインライン属性のみをサポートし、サイズは単一の
B木ノードに収まるように制限されています。各ファイルは複数の拡張属性を持つことができ、名前はNULL終端の
Unicode文字列で表現されます。Mac OS XのAPIは、ファイルや
ディレクトリの拡張属性のリスト、取得、設定、削除をサポートしています。
関連技術
- - フォーク (ファイルシステム): 拡張属性を格納するためのファイルシステムの機能です。データ本体とは別に、メタデータ用の領域を設けることで、柔軟なデータ管理を可能にします。
- - Attribute-value pair: 拡張属性は、属性名と属性値のペアとして表現されることが多いです。これにより、データの意味と内容を明確に関連付けることができます。
参考資料