web-dev-qa-db-ja.com

xattrとchattrの違い

xattrchattrの関係と違いは何ですか? Linuxでchattr属性を設定すると、Linuxカーネルとiノードメタデータ内で何が起こっているのかを知りたいです。

9
Cerberuzs

Linuxでlsattr/ chattr によって処理される属性であり、その一部はかなりの数のファイルシステム(ext2/3/4、reiserfs、JFS)で保存できます。 、OCFS2、btrfs、XFS、nilfs2、hfsplus ...)であり、CIFS/SMB(POSIX拡張機能を使用している場合)でさえ照会されるフラグです。属性を無効または有効にするためにオンまたはオフにできるビット数(immutableまたはarchive...など)。それらがどのように格納されるかはファイルシステム固有ですが、一般的にはiノード内の16/32/64ビットレコードとしてです。

フラグの完全なリストはLinuxネイティブファイルシステム(ext2/3/4、btrfs ...)にありますが、すべてのフラグがすべてのFSに適用されるわけではなく、他の非ネイティブFSの場合、Linuxはそれらを同等のものにマップしようとします。対応するファイルシステムの機能。たとえば、OSXによってHFS +ファイルシステムに保存されている simmutable フラグは、Linux chattrの対応する不変フラグにマップされます。どのファイルシステムがどのフラグをサポートしているかは、ほとんど文書化されていません。多くの場合、カーネルソースコードを読み取ることが唯一のオプションです。

一方、Linuxでsetfattrまたはattrで設定されている拡張属性は、フラグ以上のものを格納します。これらはファイルにも添付され、キーと値のペアであり(キーと値の両方)、バイトの任意の配列(一部のファイルシステムではサイズに制限があります)になります。

たとえば、キーはsystem.posix_acl_accessまたはuser.rsync.%statsystem名前空間はシステム用に予約されています(POSIXACLをsetfattrで変更することはありませんが、setfaclを使用すると、POSIXACLは拡張属性として保存されます。少なくとも一部のファイルシステムでは)、user名前空間はアプリケーションで使用できます(ここでは、rsyncはそれを--fake-superオプション。スーパーユーザーでない場合の所有権や権限に関する情報を保存します)。

繰り返しになりますが、それらがどのように格納されるかはファイルシステム固有です。 詳細 についてはWikiPediaを参照してください。

13