3.3. Fonctionnalités des systèmes de fichiers

Il est sûrement bon de revenir sur les fonctionnalités fournies par les systèmes de fichiers Unix. En effet, peu d'utilisateurs savent exactement quels sont les services qu'ils peuvent fournir en général, et beaucoup croient que les systèmes de fichiers savent juste stocker des données dans des fichiers organisés dans une hiérarchie de répertoires. Heureusement, ils permettent de faire beaucoup mieux que cela ! En fait, les systèmes de fichiers des systèmes Unix sont très puissants. Ils assurent à la fois fonctionnalités, performances et fiabilité.

Pour commencer, il faut préciser que Linux ne travaille pas directement avec les systèmes de fichiers physiques. En effet, il interpose systématiquement un système de fichiers intermédiaire, nommé « Virtual File System » (« VFS » en abrégé), qui permet aux applications d'accéder à différents systèmes de fichiers de manière indépendante de leur nature et de leur structure interne. Le système de fichiers virtuel ne fait pas grand chose en soi : il se contente de transférer les requêtes des applications vers les systèmes de fichiers réels. Il fournit donc une interface bien définie pour les applications, que celles-ci doivent utiliser. Les systèmes de fichiers réels, quant à eux, doivent simplement fournir les services dont le système de fichiers virtuel a besoin. Tous les systèmes de fichiers réels ne disposent toutefois pas forcément de toutes les fonctionnalités demandées par le système de fichiers virtuel. Dans ce cas de configuration, la requête de l'application désirant effectuer l'opération manquante échouera tout simplement.

Comme on peut le constater, cette architecture est modulaire. Et comme on l'a vu pour l'architecture du système en général, cela apporte beaucoup de bénéfices. Les plus évidents sont indiqués ci-dessous :

Figure 3-2. Le système de fichiers virtuel

Avec cette architecture, un grand nombre de systèmes de fichiers ont été développés pour Linux. Parmi ces systèmes de fichiers, on retrouve les plus connus, à savoir :

Linux gère également d'autres systèmes de fichiers utilisés par d'autres systèmes d'exploitation (Unix ou non). Il permet même d'intégrer un pseudo système de fichiers généré par le noyau. Ce système de fichiers est complètement fictif : sa structure et ses fichiers sont générés dynamiquement par le noyau lorsqu'une application y accède. Il est principalement utilisé par les applications pour lire des informations que le noyau met à leur disposition, ainsi que pour changer dynamiquement certains paramètres du noyau en les écrivant simplement dans les fichiers.

Le système de fichiers natif de Linux EXT2 est de loin le système de fichiers le plus fonctionnel, le plus fiable et le plus courant, car il a été hautement optimisé. Les principales fonctionnalités de EXT2 sont les suivantes :

Nous allons maintenant voir les quelques fonctionnalités additionnelles que EXT2 supporte. Notez bien ici que d'autres systèmes de fichiers Unix peuvent fournir ces fonctionnalités, mais qu'il ne sera question ici que de EXT2 par souci de simplification.

La première fonctionnalité intéressante est le support des droits d'accès aux fichiers pour les utilisateurs et pour les groupes. La gestion de ces droits est un impératif sous Unix. Comme on l'a déjà vu, ces droits comprennent les droits d'accès en lecture, en écriture et en exécution, plus les attributs spéciaux des fichiers. Ces droits sont fixés indépendamment pour l'utilisateur propriétaire du fichier, le groupe d'utilisateur propriétaire du fichier, et tous les autres utilisateurs.

Une autre fonctionnalité intéressante est la possibilité de réaliser des liens sur des fichiers ou des répertoires. Un lien est une référence à un fichier ou un répertoire existant, qui peut être manipulé exactement comme sa cible. Il existe deux sortes de liens : les liens physiques, qui sont réellement une référence sur les données du fichier au niveau de la structure même du système de fichiers, et les liens symboliques, qui ne sont rien d'autre qu'un fichier additionnel contenant les informations nécessaires pour retrouver la cible.

Les liens physiques présentent les inconvénients de ne pas pouvoir référencer des répertoires, et de ne pouvoir référencer que des objets du même système de fichiers que celui dans lequel ils sont créés. La limitation sur les répertoires permet d'éviter de construire des cycles dans la structure du système de fichiers. Quant à la limitation à la frontière des systèmes de fichiers, elle est obligatoire puisque les liens physiques sont gérés directement au niveau de la structure du système de fichiers. En revanche, ils présentent des avantages certains :

En fait, toute entrée de répertoire est un lien physique sur le contenu du fichier. Le fait d'avoir plusieurs liens physiques sur les mêmes données correspond à disposer de plusieurs entrées de répertoire donnant accès aux mêmes données dans le système de fichiers. Il serait possible de créer des liens physiques dans un système de fichiers FAT, mais ils seraient interprétés comme des références croisées par les outils de vérification de disque. Le système de fichiers FAT de Linux interdit donc la création des liens physiques, tout comme le font DOS et Windows.

Les liens symboliques, quant à eux, permettent de référencer des fichiers ou des répertoires se trouvant dans d'autres systèmes de fichiers que le leur. C'est pour cette raison qu'ils sont très couramment utilisés (en fait, les liens physiques ne sont quasiment pas utilisés, parce qu'il est très courant de faire un lien sur un répertoire, ce que seuls les liens symboliques savent faire). En revanche, ils sont extrêmement dépendants de leur cible : si elle est supprimée ou déplacée, tous les liens symboliques qui s'y réfèrent deviennent invalides.

La référence sur le fichier ou le répertoire cible contenue dans les liens symboliques peut être soit relative à l'emplacement de leur cible, soit absolue dans le système de fichiers. Chacune de ces méthodes a ses avantages et ses inconvénients : les liens symboliques qui contiennent des références relatives ne sont pas brisés lors d'un déplacement de la cible, pourvu qu'ils soient déplacés également et restent à la même position relative par rapport à celle-ci dans la hiérarchie du système de fichiers. En revanche, ils sont brisés s'ils sont déplacés et que la cible ne l'est pas. Les liens symboliques utilisant des références absolues sont systématiquement brisés lorsque la cible est déplacée, mais ils restent valides lorsqu'ils sont eux-mêmes déplacés. Comme en général c'est le comportement que l'on recherche, les liens symboliques sont toujours créés avec des références absolues, mais vous êtes libre de faire autrement si vous en ressentez le besoin. Sachez cependant que déplacer une source de données n'est jamais une bonne idée. Le tableau suivant récapitule les avantages et les inconvénients des différents types de liens :

Tableau 3-1. Caractéristiques des liens physiques et symboliques

FonctionnalitéLiens physiquesLiens symboliques
  Référence relativeRéférence absolue
Peuvent être déplacésOuiAvec la cibleOui
Suivent la cibleOuiSi déplacés avec elleNon
Gèrent la suppression de la cibleOuiNonNon
Peuvent référencer des cibles sur un autre système de fichiersNonOuiOui
Peuvent référencer des répertoiresNonOuiOui

Le système de fichiers EXT2 donne également la possibilité de gérer des fichiers presque vides (« sparse files » en anglais) et les quotas. Ces deux fonctionnalités sont relativement peu utilisées par les particuliers, elles ne sont mentionnées ici qu'afin d'être complet. Les fichiers presque vides sont des fichiers contenant des données séparées par de grands espaces vides. Il est inutile de stocker ces espaces vides sur le disque, aussi EXT2 signale-t-il simplement que ce fichier contient des trous, et il ne stocke que les données réelles et la position des trous avec leur taille. Cela constitue une économie de place non négligeable. Les applications classiques des fichiers presque vides sont les bases de données, qui utilisent souvent des fichiers structurés contenant relativement peu de données effectives. Les quotas quant à eux permettent d'attribuer un espace disque fixe à chaque utilisateur. Ce n'est réellement utile que pour les serveurs.

Note : Le système de fichiers EXT3, complètement compatible avec le système de fichiers EXT2, supporte également une fonctionnalité avancée qui permet de le rendre encore plus fiable : la journalisation. La journalisation consiste à écrire sur le disque toutes les opérations en cours à chaque instant. Ainsi, lorsqu'un redémarrage intempestif se produit, le système peut ramener rapidement la structure de données du système de fichiers dans un état cohérent. La journalisation accroît donc encore à la fiabilité du système de fichiers.