Point sur l'état technologique des systèmes de fichiers actuels
Un système de fichiers non-journalisé écrit directement sur le disque (par l'intermédiaire d'un buffer) les données qu'on lui donne. Lors d'un plantage de la machine, si le système était en train d'écrire quelque chose sur le disque, il est impossible de savoir à quel endroit était positionné la tête de lecture, donc impossible de savoir quel fichier est succeptible d'être corrompu. C'est pourquoi le système impose un fsck sur toute la partition au redémarrage d'un système planté. L'augmentation de la taille des disques fait que cette étape peut aller de quelques minutes à quelques heures, ce qui est intolérable pour un système en production.
Un système de fichier journalisé utilise, comme son nom l'indique, un journal. Il y consigne toutes les opérations d'écriture sur disque avant de les effectuer réellement. Lorsque l'écriture est réellement effectuée, elle est validée dans le journal. En cas de plantage, il suffit au système de lire le journal depuis la dernière écriture validée pour trouver les dernières modifications effectuées sur le disque. Le fsck ne concerne donc que le ou les fichiers en cours d'écriture au moment du crash, le retour à un état cohérent du système de fichiers est beaucoup plus rapide. La machine redémarre aussi rapidement qu'après un arrêt normal.
Le principe de journalisation est hérité des SGBD. Ces derniers écrivent toutes les données en double, d'abord dans le journal, puis dans la base. La différence pour les systèmes de fichiers, c'est que seules les méta-données sont écrites dans le journal. Si toutes les données écrites sur le disque passaient d'abord par le journal, les performances seraient effroyables.
Il faut bien noter que la journalisation ne garantit aucunement la validité des données du disque, mais uniquement l'état cohérent du système de fichiers.
LVM est une couche logicielle qui s'intercale entre le support physique et les partitions sur lesquelles résident les systèmes de fichiers. Cela permet d'agréger plusieurs supports physiques (on parle de PV, Physical Volume) en une partition (LV, Logical Volume). Le système de fichiers va alors être créé sur le LV. L'intérêt de ce système est la possibilité de faire varier la taille du LV, en y ajoutant ou en retirant des PV, et ceci sans avoir à faire de sauvegarde et de repartitionnement, ni même redémarrer le système. Cela permet aussi d'avoir des systèmes de fichiers plus grands que le plus grand des disques du système, puisqu'on peut mettre dans un LV des PV provenant de plusieurs disques, et donc utiliser plusieurs disques complets pour un seul LV.
Le support de LVM sous Linux permet aussi de faire un snapshot du système de fichier, autorisant la sauvegarde sans avoir à le démonter, ni à arrêter le système.
LVM est intégré au noyau 2.4, et il fait aussi partie intégrante de certains systèmes de fichiers comme JFS pour Linux de IBM, ou XFS de sgi.
Les droits standards sur les fichiers sous Unix permettent seulement de définir l'autorisation en lecture, écriture et exécution pour le propriétaire du fichier, le groupe et les autres. C'est déjà pas mal, mais on se rend vite compte que c'est limité. Lorsqu'on veut laisser l'accès à une personne en lecture à un fichier, on est obligé de donner ce droit à tout le groupe auquel appartient cette personne, ou donner complètement une copie du fichier à la personne.
Les ACL sont des listes associées à chaque fichier, et contenant l'identité de chaque utilisateur ayant accès à la ressource. Elles peuvent être gérées directement par l'utilisateur propriétaire de la ressource, ce qui ne facilite pas le travail de l'administrateur.
Ce système ne remplace pas les permissions classiques des systèmes Unix, il est toujours possible de les utiliser.
Les B-arbres, B+arbres et B*arbres apparaissent dans les nouveaux systèmes de fichiers pour Linux. Ils permettent de référencer les blocs d'un fichier beaucoup plus efficacement. La recherche d'un bloc dans un fichier se fait beaucoup plus rapidement que s'il était référencé dans une table linéaire.
Un extent est une suite de blocs contigus. Ils servent lors de l'allocation de blocs libres, cela évite de faire autant d'allocations que de blocs désirés, et augmente la quantité de blocs contigus dans un fichier (ce qui en accélère la lecture, puisque les têtes du disque se déplacent moins).