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 :
Linux est capable de gérer plusieurs systèmes de fichiers réels. La seule condition est qu'ils doivent tous fournir les services de base exigés par le système de fichiers virtuel ;
les applications peuvent utiliser plusieurs de ces systèmes de fichiers réels de manière uniforme, puisqu'elles n'utilisent que le système de fichiers virtuel. Cela simplifie leur programmation, et permet d'éviter autant de bogues potentiels ;
chaque système de fichiers réel étant indépendant des autres, il ne perturbe pas leur fonctionnement. En particulier, un système de fichiers corrompu ne corrompt pas les autres.
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 :
le système de fichiers EXT2, qui est le système de fichiers natif de Linux ;
le système de fichiers EXT3, qui est une évolution du système de fichiers EXT2 capable de prendre en charge également les mécanismes de journalisation (EXT3 est donc plus tolérant aux pannes matériel et aux coupures de courant que EXT2) ;
le système de fichiers ReiserFS, qui supprime la notion de bloc disque et qui est journalisé (c'est-à-dire qu'il supporte les arrêts intempestifs du système suite à une panne de courant ou tout autre événement contre lequel le système ne peut rien faire) ;
les systèmes de fichiers FAT, FAT32 et FAT32X (utilisés par les systèmes DOS et Windows) ;
le système de fichiers NTFS (utilisé par Windows NT, Windows 2000 et XP), en lecture seule pour l'instant ;
le système de fichiers ISO9660, qui est utilisé par tous les CD-ROM. Les extensions permettant de gérer les noms longs sont également gérées. Ces extensions comprennent en particulier le système de fichiers Joliet (extensions de Microsoft pour Windows 95) et Rock Ridge (extensions utilisées par tous les systèmes Unix) ;
le système de fichiers NFS (utilisé pour distribuer sur un réseau un système de 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 :
les accès aux fichiers sont rapides, même plus rapides que les systèmes de fichiers basés sur la FAT sous Windows, qui pourtant ne gèrent pas les droits des utilisateurs ni les autres fonctionnalités avancées des systèmes de fichiers Unix ;
la fragmentation des fichiers est quasiment inexistante. En fait, la fragmentation des fichiers est si faible que l'on peut l'ignorer en pratique. Cela provient de l'algorithme que EXT2 utilise pour allouer les blocs du disque dur lors de l'écriture dans un fichier : il cherche tout simplement à donner systématiquement les blocs les plus proches. Pour donner un ordre de grandeur de la fragmentation des fichiers sur une partition de 800 Mo, après installation, suppression, manipulation d'un grand nombre d'applications et de petits fichiers, le tout réalisé par plusieurs processus fonctionnant en même temps, elle reste inférieure à 1% sur 57571 fichiers (sur un total de 249856 fichiers que le système de fichiers pourrait contenir) ;
quant à la fiabilité, elle est gérée grâce à un stockage redondant des principales structures de données internes. Ainsi, si une erreur apparaît dans le système de fichiers, les parties défectueuses peuvent être reconstituées à partir des informations sauvegardées. Cette réparation est réalisée automatiquement à chaque redémarrage de la machine si nécessaire.
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 :
le déplacement des cibles ne les perturbe pas si celles-ci restent dans le même système de fichiers, parce que dans ce cas les données ne sont pas déplacées sur le disque ;
la suppression de la cible ne détruit pas le lien physique. Tous les liens physiques sur un fichier partagent la même structure de données du système de fichiers, et celle-ci n'est réellement détruite qu'à la destruction du dernier lien physique.
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 physiques | Liens symboliques | |
---|---|---|---|
Référence relative | Référence absolue | ||
Peuvent être déplacés | Oui | Avec la cible | Oui |
Suivent la cible | Oui | Si déplacés avec elle | Non |
Gèrent la suppression de la cible | Oui | Non | Non |
Peuvent référencer des cibles sur un autre système de fichiers | Non | Oui | Oui |
Peuvent référencer des répertoires | Non | Oui | Oui |
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.
Précédent | Sommaire | Suivant |
Sécurité et utilisateurs | Niveau supérieur | Structure du système de fichiers |