Système de fichiers Unix
| SFU | ||
|---|---|---|
| développeur | GRSC | |
| Nom complet | Système de fichiers UNIX | |
| Systèmes d'exploitation pris en charge | A/UX , DragonFlyBSD , FreeBSD , FreeNAS , HP-UX , NetBSD , Linux , OpenBSD , Solaris , SunOS , Tru64 UNIX , UNIX System V et autres | |
| Introduction | ( 4.2BSD ) | |
| structures | ||
| contenu du répertoire | Table | |
| Les frontières | ||
| Dimension maximale du fichier | 2 73 octets (8 ZB ) | |
| Taille maximale du nom de fichier | 255 octets | |
| Taille maximale du volume | 2 73 octets (8 ZB ) | |
| Caractéristique | ||
Le système de fichiers Unix (UFS) est un système de fichiers utilisé par divers systèmes d'exploitation UNIX et POSIX . C'est un dérivé du Berkeley Fast File System ( FFS ), qui est développé à partir de FS UNIX (ce dernier développé aux Bell Labs ).
Presque tous les dérivés de BSD , y compris FreeBSD , NetBSD , OpenBSD , NeXTStep et Solaris utilisent une variante d'UFS. Sur Mac OS X, il est disponible comme alternative à HFS . Sous Linux , il existe une prise en charge partielle du système de fichiers UFS en lecture seule et il utilise un système de fichiers natif de type ext3 , avec une conception inspirée de l'UFS.
Conception
Un système de fichiers UFS est composé des parties suivantes :
- quelques blocs au début de la partition réservée au bootstrap (qui doit être initialisé séparément du système de fichiers).
- un superbloc contenant un nombre magique identifiant cela comme un UFS, et quelques autres nombres vitaux décrivant les paramètres de réglage de la géométrie et du comportement.
- une collection de groupes de cylindres. Chaque groupe de cylindres a ces composants :
- une sauvegarde du superbloc.
- une tête de cylindre, avec statistiques, liste d'espace libre, etc. sur ce bloc-cylindres, similaires à ceux que l'on trouve sur le superbloc.
- un certain nombre d' inodes , chacun contenant les attributs du fichier.
- plusieurs blocs de données.
Les inodes sont numérotés séquentiellement. Les premiers inodes sont réservés pour des raisons historiques, suivis des inodes du répertoire racine .
Les fichiers de répertoire contiennent uniquement la liste des fichiers du répertoire et l'inode associé à chaque fichier. Toutes les métadonnées ( metadata ) sont conservées dans l ' inode .
Histoire et évolution
Les premières versions d' UNIX utilisaient un système de fichiers appelé simplement FS . FS n'incluait que le bloc de démarrage, le superbloc, une poignée d'inodes et les blocs de données. Cela fonctionnait bien pour les petits disques pour lesquels UNIX était conçu à l'époque, mais la technologie évoluait et les disques commençaient à se développer, déplaçant leurs têtes entre le pool d'inodes et les blocs de données auxquels ils faisaient référence. ", le bruit causé par la rotation des têtes de disque effectuant une recherche rapide et répétée de données loin des plateaux magnétiques du disque. BSD a optimisé cela dans le FFS en inversant les groupes de cylindres, en divisant le disque en groupes plus petits, chacun avec son propre pool d'inodes et de blocs de données.
Ce que fait le BSD FFS est d'essayer de localiser les blocs de données et les métadonnées associés dans le même groupe de cylindres, et, idéalement, tout le contenu d'un répertoire (données et métadonnées pour l'ensemble du fichier) dans le même ou à proximité du groupe de cylindres, ceci parvenant à réduire la fragmentation causée par la dispersion du contenu des répertoires sur tout le disque.
Certains des paramètres de performance du superbloc comprennent un certain nombre de pistes et de secteurs, la vitesse de rotation du disque et l'alignement des secteurs entre les pistes. Dans un système entièrement optimisé, la tête peut être déplacée entre des pistes proches pour lire les secteurs fragmentés de pistes alternées en attendant que le disque tourne.
Au fur et à mesure que les disques devenaient de plus en plus gros, les optimisations au niveau des secteurs devenaient obsolètes (en particulier avec les disques qui utilisaient une numérotation linéaire et des secteurs variables par piste ). Avec des disques plus volumineux et des fichiers plus volumineux, les lectures fragmentées sont devenues un problème plus important. Pour lutter contre cela, BSD a augmenté la taille des blocs du système de fichiers d'un secteur à 8k. Cela a eu divers effets. La probabilité que les secteurs du fichier soient contigus est beaucoup plus élevée. Le temps système nécessaire pour énumérer les blocs du fichier est réduit. Le nombre de blocs représentables dans la largeur d'un bit fixe a été augmenté (permettant des disques plus grands).
Avec des tailles de bloc plus grandes, les disques contenant de nombreux petits fichiers pouvaient perdre beaucoup d'espace, c'est pourquoi BSD a ajouté la "fragmentation au niveau du bloc", où le dernier bloc partiel de données de nombreux fichiers pouvait être conservé dans un seul bloc de "fragment" au lieu de plusieurs blocs vides.
Implémentations
La plupart des fournisseurs de systèmes POSIX ont adapté UFS à leurs propres besoins, en ajoutant des extensions propriétaires qui pourraient ne pas être reconnues par les versions d' UNIX d'autres développeurs . Étonnamment, beaucoup ont continué à utiliser la taille d'origine des blocs et des champs de données avec la même largeur que l'UFS d'origine, de sorte qu'un certain degré de compatibilité (en lecture) est maintenu entre les plates-formes.
FreeBSD 5.0 a introduit UFS2 , qui ajoute la prise en charge des volumes supérieurs à 1 To ( TeraByte ) et des images de système de fichiers. Il a été porté sur NetBSD .
Le système de fichiers Linux ext2 a été écrit à partir de zéro sur la base des concepts UFS. ext2 permet de configurer les tailles de bloc au moment de la création du système de fichiers pour prendre en charge des disques plus grands. Il a également des champs de données 64 bits dans l'inode pour accepter des fichiers plus volumineux. Ext3 ajoute la journalisation . ReiserFS a été le premier système de fichiers de journalisation inclus dans le noyau Linux et est plus rapide lorsque vous travaillez avec de petits fichiers. Linux inclut une implémentation d'UFS pour la compatibilité binaire au niveau lecture avec d'autres UNIX , mais comme il n'y a pas d'implémentation standard pour les extensions de fournisseurs tiers, Linux n'a actuellement qu'un support d'écriture expérimental pour UFS.
À partir de Solaris 7, Sun Microsystems a inclus la journalisation UFS dans l'environnement d'exploitation Solaris, qui fournit des systèmes de fichiers prenant en charge la journalisation à UFS . Solaris UFS possède également des extensions pour les fichiers volumineux, les disques volumineux et d'autres fonctionnalités.
Liens externes
- Petite FAQ de l'UFS2 (en anglais)
- Outils UFS2 pour Linux