What is the relation and the difference between xattr
and chattr
? I want to know when I set a chattr
attribute in Linux what is happening inside the Linux kernel and inode metadata.
Linux Files – Difference Between xattr and chattr
filesinodelinuxxattr
Best Answer
The attributes as handled by
lsattr
/chattr
on Linux and some of which can be stored by quite a few file systems (ext2/3/4, reiserfs, JFS, OCFS2, btrfs, XFS, nilfs2, hfsplus...) and even queried over CIFS/SMB (when with POSIX extensions) are flags. Just bits than can be turned on or off to disable or enable an attribute (like immutable or archive...). How they are stored is file system specific, but generally as a 16/32/64 bit record in the inode.The full list of flags is found on Linux native filesystems (ext2/3/4, btrfs...) though not all of the flags apply to all of FS, and for other non-native FS, Linux tries to map them to equivalent features in the corresponding file system. For instance the simmutable flag as stored by OSX on HFS+ file systems is mapped to the corresponding immutable flag in Linux
chattr
. What flag is supported by what file system is hardly documented at all. Often, reading the kernel source code is the only option.Extended attributes on the other hand, as set with
setfattr
orattr
on Linux store more than flags. They are attached to a file as well, and are key/value pairs that can be (both key and value) arbitrary arrays of bytes (though with limitation of size on some file systems).The key can be for instance:
system.posix_acl_access
oruser.rsync.%stat
. Thesystem
namespace is reserved for the system (you wouldn't change the POSIX ACLs withsetfattr
, but more withsetfacl
, POSIX ACLs just happen to be stored as extended attributes at least on some file systems), while theuser
namespace can be used by applications (herersync
uses it for its--fake-super
option, to store information about ownership or permissions when you're not superuser).Again, how they are stored is filesystem specific. See WikiPedia for more information.