拡張ファイル属性

拡張ファイル属性とは



拡張ファイル属性(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



Linuxでは、カーネルの設定でlibattr機能が有効になっている場合、ext2、ext3、ext4、JFS、ReiserFS、XFSなどのファイルシステムで拡張属性(xattr)がサポートされます。各ファイルは、名前とデータを持つ複数の拡張属性を持つことができます。名前はNULL終端の文字列であり、名前空間識別子とドット文字が前に付与されます。現在、user、trusted、security、systemという4つの名前空間が存在します。user名前空間には名前と内容に関する制限はありません。system名前空間は、主にカーネルがアクセス制御リストとして利用し、security名前空間はSELinuxなどが利用します。拡張属性はカーネル2.6以降でサポートされていますが、ユーザープログラムでの利用はまだ一般的ではありません。Beagleという検索ツールやfreedesktop.orgでは拡張属性の利用が推奨されています。

FreeBSD



FreeBSD 5.0以降では、UFS1とUFS2ファイルシステムで拡張属性がサポートされています。Linuxと同様に、各ファイルは名前とデータを持つ複数の拡張属性を持つことができます。名前はNULL終端の文字列であり、小さな整数で識別される名前空間に存在します。userとsystemの2つの名前空間があり、user名前空間には制限がありません。system名前空間は、カーネルがアクセス制御リストや強制アクセス制御のために利用します。

OpenBSD



OpenBSDのネイティブなfssファイルシステムは拡張属性をサポートしており、フラグとして参照されます。chflagsコマンドでこれらのフラグを制御できます。

Solaris



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: 拡張属性は、属性名と属性値のペアとして表現されることが多いです。これにより、データの意味と内容を明確に関連付けることができます。

参考資料



もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。