précédent suivant index

 

JFS


JFS est le système de fichiers créé par IBM pour son Unix Aix. IBM a décidé de le placer sous licence GPL en 2000 pour en faire le portage sous Linux. La première release date du 02/02/2000, et la version stable actuelle ( fevrier 2002) est la 1.0.14. Le développement est actif, puisqu'on trouve même un patch pour le noyau 2.5.2.

 

JFS est un système de fichiers journalisé entièrement 64 bits, basé sur le principe des LVM. Il supporte des tailles de blocs de 512, 1024, 2048 et 4096 Octets. Ceci permet de créer des systèmes de fichiers dont la taille maximum va de 512 tera-octets à 4 péta-octets, en fonction de la taille des blocs. Une petite taille de blocs rend le système moins fragmenté, et l'occupation de l'espace plus efficace. En revanche, une grande taille de blocs permet d'avoir une allocation de blocs libres moins fréquente, donc de meilleures performances.

La journalisation n'est faite que sur les méta-données, ce qui permet de garantir la cohérence du système de fichiers après un crash, mais pas la validité des données. Elle ne pourrait être garantie que par des I/O synchrones.

L'allocation d'inodes est dynamique, ce qui évite d'avoir à estimer la place à réserver à la table d'inodes lors de la création d'un filesystem. JFS alloue de la place pour les inodes quand il y en a besoin, et en libère si il y en a trop.

Les blocs composant un fichier sont référencés par extents dans un B+arbre contenu dans l'inode du fichier. Un extent est un groupe de blocs contigus alloués à un fichier en tant qu'unité décrite par un offset dans le fichier, une taille, et la position sur le disque. Le système des extents permet d'avoir un maximum de blocs contigus dans un fichier, ce qui en accélère la lecture, les têtes de lecture du disque ayant moins de déplacements à effectuer.

On rencontre deux types d'organisations de répertoires dans JFS. La première pour les répertoires contenant jusqu'à huit entrées (. et .. exclus), stocke directement la référence de ces entrées dans l'inode du répertoire. La deuxième organisation sert aux répertoires contenant plus de huit entrées. Chaque entrée est stockée dans un B+arbre indexée par son nom. Cette organisation permet un accès rapide au contenu des répertoires.

JFS supporte aussi les "sparse files" (fichiers "clairsemés"). Ceci permet d'écrire dans un fichier à un offset donné sans pour autant allouer tous les blocs entre le début du fichier et l'offset en question. Par exemple, si on crée un nouveau fichier, et que l'on écrit dans celui-ci au bloc 100, le fichier sera vu comme ayant une taille de 100 blocs, mais un seul bloc sera alloué et écrit sur le disque. Si un programme essaye de lire entre le début et le bloc 100 de ce fichier, JFS lui renvoit des octets nuls, comme si le fichier était vide d'informations à cet endroit (ce qui est vrai). Si maintenant on écrit au bloc 50 du fichier, il aura toujours une taille de 100 blocs, mais 2 blocs seront réellement alloués. Ce système a beaucoup d'intérêts pour les SGBD comme Oracle, car l'espace réservé pour une base de données est fixé et alloué à sa création, même si seulement une partie de cet espace est utilisé.

La caractéristique permettant de gérer les "sparse files" est fixée à la création du système de fichiers. Dans le cas où cet attribut n'est pas positionné ("dense files"), JFS alloue le nombre de blocs demandés par l'application. Le fichier de l'exemple précédent aurait donc 100 blocs réellement alloués sur le disque.

 

précédent suivant index