# Attributs étendus

En informatique, les attributs étendus (EA - Extended Attributes) sont une fonctionnalité du système de fichiers.
On distingue en fait les attributs dits réguliers, réservés à l'usage du système de fichiers lui-même, des attributs dits étendus, qui en sont une extension. Ces derniers permettent à l'utilisateur d'un système de fichier d'associer des métadonnées, autrement dit un certain nombre d'informations supplémentaires, à un inode. Ils peuvent être de divers types, et sont utilisés, par exemple, pour stocker l'auteur d'un document, le codage des caractères d'un document texte, ou encore une somme de contrôle.

## Fonctionnement

Au contraire des attributs réguliers, les attributs étendus ne sont pas interprétés par le système de fichiers, mais sont stockés et gérés séparément. Tout attribut étendu est identifié par une paire (nom:valeur) qui permet la manipulation des informations stockées. Les attributs étendus sont généralement limités en taille, mais ces limitations sont dépendantes du système de fichier utilisé et de sa configuration.
Pour des informations plus précises, se reporter à la documentation des systèmes de fichiers.

## Quotas

L'espace occupé par les attributs étendus est effectivement pris en compte dans les quotas. Lorsqu'un utilisateur a atteint son quota, les attributs étendus ne peuvent plus être modifiés car cette opération nécessite de créer un nouveau bloc de donnée puis de libérer l'ancien bloc.

## Support

Certains systèmes de fichiers nécessitent des options de montage particulières pour activer le support des attributs étendus.

## Implémentations
### FreeBSD

À partir de FreeBSD 5.0, les systèmes de fichiers UFS1 et UFS2 incluent les attributs étendus pour tout fichier régulier. Depuis FreeBSD 8.0, les attributs étendus sont également supportés par le système de fichier ZFS. Chaque attribut est constitué d'un nom et de données associées. Le nom doit être une chaîne de caractères se terminant par un octet nul, et faire partie d'un espace de nommage identifié par un chiffre entier court. À l'heure actuelle, les deux espaces de nommage disponibles sont utilisateur (user) et système (system).
L'espace de nommage utilisateur n'a aucune restriction quant aux noms ou aux contenus utilisés.
L'espace de nommage système est principalement utilisé par le noyau pour les listes de contrôles d'accès (ACL).

### Linux

Sous Linux, les systèmes de fichiers ext2, ext3, ext4, JFS, ReiserFS, XFS, Btrfs et OCFS2 1.6 incluent le support pour les attributs étendus. Abrégée xattr, cette fonctionnalité doit toutefois être activée dans la configuration du noyau (libattr). Tout fichier régulier peut disposer d'attributs étendus, chacun d'entre eux étant constitué d'un nom et de données associées. Le nom doit être une chaîne de caractères se terminant par un octet nul, et faire partie d'un espace de nommage parmi utilisateur (user), fiabilité (trusted), sécurité (security) et système (system).
L'espace de nommage utilisateur n'a aucune restriction quant aux noms ou aux contenus.
L'espace de nommage système est principalement utilisé par le noyau pour les listes des contrôles d'accès (ACL).
L'espace de nommage sécurité est utilisé par exemple par SELinux.
Les attributs étendus ne sont pas couramment utilisés par les programmes en espace utilisateur, en dépit du fait qu'ils soient supportés depuis le noyau 2.6. Néanmoins, les logiciels Beagle et Dropbox utilisent déjà les attributs étendus, d'autre part freedesktop.org a recommandé officiellement leur « utilisation ».

### Mac OS X

Mac OS X 10.4 (et versions suivantes) proposent les attributs étendus grâce aux fonctionnalités du système de fichier HFS+, en l'occurrence du concept de fork. Ce concept ne permet toutefois pas de stocker plus de données que ne peut contenir le nœud d'un Arbre B. À tout fichier régulier peuvent être associés des attributs étendus. HFS+ supporte un nombre déterminé de forks, mais on ne sait pas vraiment si Mac OS impose une limite au nombre d'attributs étendus. Chaque attribut est caractérisé par un nom et des données associés. Le nom est une chaîne de caractères Unicode se terminant par un octet nul.
L'interface de programmation de Mac OS X supporte les opérations de listing, getting, setting, et removing des attributs étendus pour les fichiers et dossiers. L'utilitaire xattr peut être utilisé depuis un terminal. Depuis MacOS 10.6, les attributs étendus de l'espace utilisateur ne sont pas sauvegardés par la plupart des applications Cocoa (TextEdit, Preview, etc.).

### OpenBSD

Le système d'exploitation OpenBSD supporte les attributs étendus. Dénommés flags, on peut les manipuler avec la commande chflags.

### Solaris

Le système d'exploitation Solaris, à partir de la version 9, permet d'associer des attributs étendus aux fichiers, qui sont en fait des forks. En interne, ils sont en fait stockés et accédés comme des fichiers normaux : ils ne peuvent donc contenir le caractère "/" mais leur taille est illimitée. Les propriétaires et permissions peuvent également différer de celles des fichiers associés.
La version 4 du Network File System supporte les attributs étendus de manière similaire à Solaris.

### OS/2

Concernant OS/2 version 1.2 (et suivantes), le HPFS a été conçu initialement avec le support des attributs étendus, mais le support a également permis d'améliorer la FAT du système de fichiers de DOS. Pour la compatibilité avec les autres systèmes utilisant des partitions FAT, les attributs OS/2 sont stockés dans un fichier unique "EA DATA. SF" situé dans le dossier racine. Ce fichier est normalement inaccessible lorsqu'un système d'exploitation supportant les attributs étendus accède au disque, mais peut être manipulé sous DOS par exemple.

### Windows NT

Windows NT supporte les attributs étendus dans la FAT et le système de fichiers HPFS de manière similaire au système d'exploitation OS/2. Le système de fichiers NTFS a également été conçu pour les stocker, tels des forks de fichiers, afin de satisfaire le système OS/2 subsystem. Les attributs étendus OS/2 y sont accessibles aux programmes OS/2 de manière similaire, ainsi qu'aux programmes Windows grâce aux appels systèmes BackupRead et BackupWrite. Les attributs étendus sont notablement utilisés par le serveur NFS du système POSIX Interix pour implémenter les permissions Unix.