拡張属性(xattr, EA)について理解を深めたい

https://ja.wikipedia.org/wiki/%E6%8B%A1%E5%BC%B5%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%B1%9E%E6%80%A7

Wikipediaによると、拡張属性とは、下記のようなものとのこと。

拡張ファイル属性または拡張属性 (extended file attribute, extended attribute, xattr, EA)は、ファイルシステムが解釈しないメタデータをユーザがファイルに結びつけることが出来るようにするファイルシステムの機能である。これに対し、通常のファイル属性(パーミッション、作成時間、更新時間など)はファイルシステムによって厳密に定義された目的を持っている。

一般的にフォークはファイルの最大サイズと同じくらいに大きくすることができるが、拡張属性の最大サイズはかなり小さい値に制限される。これの典型的な用途は、文書の著者、プレーンテキストの文字コード、誤り検出訂正符号などを保存することである。

Linux
Linuxのカーネル設定でlibattr機能が有効になっていれば、ext2、ext3、ext4、JFS、ReiserFS、XFSファイルシステムで拡張属性(略称: xattr)がサポートされる。いかなるレギュラーファイルも拡張属性のリストを持つことができる。それぞれの属性は名前とそれに対応するデータで表現される。その名前はNULL終端文字列でなければならず、直前に名前空間識別子とドット文字が付かなければならない。現在は四つの名前空間(user, trusted, security, system)がある。user名前空間には名前の付け方と内容に関する制限がない。system名前空間はカーネルが主にアクセス制御リストとして利用する。security名前空間は、例えばSELinuxが利用する。

拡張属性はカーネルバージョン2.6以降でサポートしているが、ユーザスペースのプログラムでは広く用いられていない。Beagleは拡張属性を利用しており、freedesktop.orgは拡張属性の利用を推奨している。

HATさんのブログ
https://hatx.hatenablog.com/entry/netatalk_samba_merge
によると、

Netatalk 3.1.8でオプションea =が追加されています。

ea = samba
これを利用すると以下の機能が有効になります。

拡張属性(代替データストリーム)の保存方法をSambaと同じにする



==========================================================

Samba 4.2.xでvfs_fruitが追加されています。

ea support = yes
vfs objects = catia fruit streams_xattr
fruit:locking = netatalk
fruit:encoding = native
streams_xattr:prefix = user.
streams_xattr:store_stream_type = no


これを利用すると以下の機能が有効になります。

macOSによるSMBの拡張が使える
メタデータの保存をNetatalk 3.x方式にする
ファイルロックの方法をNetatalkと同じにする

【検証状況】

ファイルの拡張属性を調べてみた

Linux、Netatalk、Samba、NFSを使用したファイルサーバーについて研究・運用しています。

fsをフォローする
課題ログ

コメント