Extended file attributes
Extended file attributes are file system features that enable users to associate computer files with metadata not interpreted by the filesystem, whereas regular attributes have a purpose strictly defined by the filesystem (such as permissions or records of creation and modification times). Unlike forks, which can usually be as large as the maximum file size, extended attributes are usually limited in size to a value significantly smaller than the maximum file size. Typical uses include storing the author of a document, the character encoding of a plain-text document, or a checksum, cryptographic hash or digital certificate, and discretionary access control information.
Implementations
AIX
In AIX, the JFS2 v2 filesystem supports extended attributes, which are accessible using the getea command.[1] The getea,[2], setea,[3] listea,[4] statea,[5] and removeea[6] APIs support fetching, setting, listing, getting information about, and removing extended attributes.
FreeBSD
In FreeBSD 5.0 and later, the UFS1, UFS2, and ZFS filesystems support extended attributes, using the extattr_[7] family of system calls. Any regular file may have a list of extended attributes. Each attribute consists of a name and the associated data. The name must be a null-terminated string, and exists in a namespace identified by a small-integer namespace identifier. Currently, two namespaces exist: user and system. The user namespace has no restrictions with regard to naming or contents. The system namespace is primarily used by the kernel for access control lists and mandatory access control.
Linux
In Linux, the ext2, ext3, ext4, JFS, Squashfs, Yaffs2, ReiserFS, XFS, Btrfs, OrangeFS, Lustre, OCFS2 1.6 and F2FS[8] filesystems support extended attributes (abbreviated xattr) when enabled in the kernel configuration. Any regular file or directory may have extended attributes consisting of a name and associated data. The name must be a null-terminated string prefixed by a namespace identifier and a dot character. Currently, four namespaces exist: user, trusted, security and system. The user namespace has no restrictions with regard to naming or contents. The system namespace is primarily used by the kernel for access control lists. The security namespace is used by SELinux, for example.
Support for the extended attribute concept from a POSIX.1e draft that had been withdrawn in 1997 was added to Linux around 2002.[9][10] As of 2016, they are not yet in widespread use by user-space Linux programs, but are used by Beagle, OpenStack Swift, Dropbox, KDE's semantic metadata framework (Baloo), Chromium, and cURL. A set of recommendations for using them is available at freedesktop.org.[11]
The Linux kernel allows extended attribute to have names of up to 255 bytes and values of up to 64KiB,[12] as do XFS and ReiserFS, but ext2/3/4 and btrfs impose much smaller limits, requiring all the attributes (names and values) of one file to fit in one "filesystem block" (usually 4 KiB).
Extended attributes can be accessed and modified using the attr
, getfattr
and setfattr
commands from the attr
package[13] on most distributions.
macOS
Mac OS X 10.4 and later support extended attributes by making use of the HFS+ filesystem Attributes file B*-tree feature which allows for named forks. Although the named forks in HFS+ support arbitrarily large amounts of data through extents, the OS support for extended attributes only supports inline attributes, limiting their size to that which can fit within a single B*-tree node. Any regular file may have a list of extended attributes. HFS+ supports an arbitrary number of named forks, and it is unknown if macOS imposes any limit on the number of extended attributes. Each attribute consists of a name and the associated data. The name is a null-terminated Unicode string.
The macOS APIs support listing,[14] getting,[15] setting,[16] and removing[17] extended attributes from files or directories. From the command line, these abilities are exposed through the xattr utility.[18]
In recent versions of macOS, files originating from the web are marked with com.apple.quarantine
via extended file attributes. In some older versions of macOS (such as Mac OS X 10.6), user space extended attributes were not preserved on save in common Cocoa applications (TextEdit, Preview etc.).
OS/2
In OS/2 version 1.2 and later, the High Performance File System was designed with extended attributes in mind, but support for them was also retro-fitted on the FAT filesystem of DOS. For compatibility with other operating systems using a FAT partition, OS/2 attributes are stored inside a single file "EA DATA. SF" located in the root directory. This file is normally inaccessible when an operating system supporting extended attributes manages the disk, but can be freely manipulated under, for example, DOS. Files and directories having extended attributes use one or more clusters inside this file. The logical cluster number of the first used cluster is stored inside the owning file's or directory's directory entry.[19] These two bytes are used for other purposes on the FAT32 filesystem, and hence OS/2 extended attributes cannot be stored on this filesystem.
Parts of OS/2 version 2.0 and later such as the Workplace Shell uses several standardized extended attributes (also called EAs) for purposes like identifying the filetype, comments, computer icons and keywords about the file. Programs written in the interpreted language Rexx store an already parsed version of the code as an extended attribute, to allow faster execution.
Solaris
Solaris version 9 and later allows files to have "extended attributes", which are actually forks; the maximum size of an "extended attribute" is the same as the maximum size of a file, and they are read and written in the same fashion as files. Internally, they are actually stored and accessed like normal files, so their names cannot contain "/" characters[20] and their ownership and permissions can differ from those of the parent file.
Version 4 of the Network File System supports extended attributes in much the same way as Solaris.
Windows NT
On Windows NT, limited-length extended attributes are supported by FAT,[19] HPFS, and NTFS. This was implemented as part of the OS/2 subsystem. They are notably used by the NFS server of the Interix POSIX subsystem in order to implement Unix-like permissions. The Windows Subsystem for Linux added in the Windows 10 Anniversary Update uses them for similar purposes, storing the Linux file mode, owner, device ID (if applicable), and file times in the extended attributes.[21]
Additionally, NTFS can store infinite-length extended attributes in the form of alternate data streams (ADS), a type of resource fork.
See also
References
- ↑ "getea Command". IBM AIX V7.2 documentation. IBM. Retrieved 2017-07-11.
- ↑ "getea Subroutine". IBM AIX V7.2 documentation: Base Operating System and Extensions, Volume 1. IBM. Retrieved 2017-07-11.
- ↑ "setea Subroutine". IBM AIX V7.2 documentation: Base Operating System and Extensions, Volume 2. IBM. Retrieved 2017-07-11.
- ↑ "listea Subroutine". IBM AIX V7.2 documentation: Base Operating System and Extensions, Volume 1. IBM. Retrieved 2017-07-11.
- ↑ "statea Subroutine". IBM AIX V7.2 documentation: Base Operating System and Extensions, Volume 2. IBM. Retrieved 2017-07-11.
- ↑ "removeea Subroutine". IBM AIX V7.2 documentation: Base Operating System and Extensions, Volume 2. IBM. Retrieved 2017-07-11.
- ↑ – FreeBSD System Calls Manual
- ↑ Kim, Jaegeuk (2012-10-05). "[PATCH 13/16] f2fs: add xattr and acl functionalities". Retrieved 2017-07-11.
- ↑ "v2.5.3 git commit log". 2002-02-05. Retrieved 2017-07-11.
- ↑ "Red Hat Enterprise Linux AS 3 Release Notes (x86 Edition)". Red Hat. 2003. Retrieved 2017-07-11.
EA (Extended Attributes) and ACL (Access Control Lists) functionality is now available for ext3 file systems. In addition, ACL functionality is available for NFS.
- ↑ "Guidelines for extended attributes". 2013-05-18. Retrieved 2017-07-11.
- ↑ "linux/include/uapi/linux/limits.h". 2012-10-13. Retrieved 2017-07-11.
- ↑ "Commands for Manipulating Filesystem Extended Attributes". GNU Savannah. Retrieved 2017-07-11.
- ↑ – Darwin and macOS System Calls Manual
- ↑ – Darwin and macOS System Calls Manual
- ↑ – Darwin and macOS System Calls Manual
- ↑ – Darwin and macOS System Calls Manual
- ↑ – Darwin and macOS General Commands Manual
- 1 2 Eager, Bob (2000-10-28). "Implementation of extended attributes on the FAT file system". Retrieved 2017-07-11.
- ↑ – Solaris 10 Standards, Environments and Macros Reference Manual
- ↑ Hammons, Jack (2016-06-15). "WSL File System Support". MSDN. Retrieved 2017-07-11.