Systèmes de fichiers

6.5 Systèmes de fichiers

Objectifs d'apprentissage

À la fin de cette section, vous serez en mesure de :

  • Expliquer les caractéristiques des différents systèmes de fichiers
  • Discuter des structures et des couches des systèmes de fichiers

Dans ce module, nous abordons les fichiers, la gestion des fichiers, les périphériques de disque, les systèmes de fichiers, l'interface des systèmes de fichiers et les systèmes de fichiers distribués.

Fichiers, systèmes de fichiers, répertoires et gestion des fichiers

Un fichier (file) est une collection d'informations connexes qui est stockée sur un instrument de stockage tel qu'un disque ou un stockage secondaire/virtuel. C'est la plus petite unité de stockage du point de vue de l'utilisateur. Le nom de fichier comprend deux parties : le nom et l'extension (par exemple, filename.txt). Chaque extension a un but spécifique, comme .exe (dans le système d'exploitation Windows) pour exécuter un programme et .txt pour les fichiers texte.

Un système de fichiers (file system) est responsable de la définition des noms de fichiers, du stockage des fichiers sur un périphérique de stockage et de la récupération des fichiers à partir d'un périphérique de stockage. Lors de la conception d'un système de fichiers pour gérer de nombreux fichiers, certaines questions à considérer sont les suivantes : la plupart des fichiers sont petits, donc les frais généraux par fichier doivent être faibles ; la majeure partie de l'espace disque est occupée par de gros fichiers ; de nombreuses opérations d'I/O concernent de gros fichiers, donc les performances doivent être bonnes pour les gros fichiers ; les fichiers peuvent croître de manière imprévisible au fil du temps ; les utilisateurs veulent utiliser des noms textuels pour désigner les fichiers.

Des structures de disque spéciales appelées répertoires sont utilisées pour mapper les noms afin de prendre en charge les structures de répertoires hiérarchiques. Un répertoire (directory) est un ensemble de fichiers géré par le système d'exploitation, et il contient également toutes les informations requises sur les fichiers, telles que les attributs, l'emplacement et la propriété. L'approche UNIX/Linux est la suivante : les répertoires sont stockés sur disque comme des fichiers ordinaires, mais avec des informations supplémentaires pour indiquer qu'il s'agit d'un répertoire. Chaque répertoire contient des paires <nom, adresse>. Le fichier désigné par l'adresse peut être un autre répertoire ; nous pouvons donc avoir des structures de répertoires imbriquées et hiérarchiques.

Les problèmes qui confrontent les systèmes de fichiers modernes incluent la gestion des disques, le nommage et la protection (protection). Les systèmes de fichiers essaient souvent d'améliorer l'accès aux fichiers en minimisant les recherches, en partageant (sharing) l'espace entre les utilisateurs et en utilisant efficacement l'espace disque. La capacité d'un système à réduire les défaillances et à garantir que les informations du système survivent aux pannes du système d'exploitation et aux défaillances matérielles est appelée sa fiabilité (reliability). En plus d'améliorer la fiabilité, un système de fichiers doit garantir un niveau élevé de protection en maintenant l'isolation (isolation) entre les utilisateurs et en contrôlant le partage des ressources.

Périphériques de disque

Alors que les systèmes de fichiers sont une couche d'abstraction qui fournit un stockage structuré et définit des objets logiques tels que des fichiers et des répertoires, les périphériques de disque sont considérés comme du stockage brut. Les données qui peuvent être directement accédées par le CPU (CPU) avec un délai minimal ou nul et qui ne survivent pas à une panne de courant sont conservées dans la mémoire principale (primary storage). La mémoire persistante qui survit aux pannes de courant la plupart du temps, comme les disques rotatifs, les SSD et les clés USB, est considérée comme du stockage secondaire (secondary storage). Les routines qui interagissent avec les disques sont généralement à un niveau très bas dans le système d'exploitation et sont utilisées par de nombreux composants tels que les systèmes de fichiers et les machines virtuelles (virtual machine). Ces périphériques de stockage secondaire peuvent gérer l'ordonnancement (scheduling) des opérations de disque, la gestion des erreurs et souvent la gestion de l'espace sur les disques. Une tendance est que les disques fassent plus de cela eux-mêmes.

Architectures des systèmes de fichiers

Les systèmes d'exploitation utilisent diverses méthodes pour localiser les fichiers par leurs noms, et la méthodologie dépend souvent de l'architecture de leur système de fichiers sous-jacent. Pour illustrer ces concepts, voici quelques exemples tirés des systèmes de type UNIX et de Windows :

  • UNIX/Linux (Inœuds) : Dans les systèmes de type UNIX, le système de fichiers utilise une structure appelée un inœud (inode) pour représenter les fichiers et les répertoires. Un inœud contient des métadonnées sur un fichier ou un répertoire, mais pas son nom. Le mappage nom-inœud est stocké dans les répertoires, qui sont des fichiers spéciaux qui listent les noms des fichiers et leurs inœuds correspondants. Lors de la recherche d'un fichier par son nom, le système d'exploitation commence au répertoire racine et suit le chemin spécifié dans le nom de fichier. Chaque partie du chemin est recherchée dans la liste des noms du répertoire actuel et de leurs inœuds associés. Le système d'exploitation lit le fichier répertoire, trouve le nom et récupère le numéro d'inœud, ce qui mène ensuite à l'inœud lui-même. L'inœud fournit l'emplacement des blocs de données, permettant au système d'exploitation d'accéder aux données du fichier. Ce processus peut impliquer plusieurs étapes si le fichier se trouve dans une structure de répertoire imbriquée.
  • Windows (File Allocation Table et NTFS) : Au format File Allocation Table (FAT), les fichiers sont localisés à l'aide d'une table qui mappe les noms de fichiers aux clusters (blocs) sur le disque où leurs données sont stockées. La FAT est essentiellement une liste, chaque entrée contenant l'emplacement de la partie suivante du fichier. Cela crée une chaîne que le système d'exploitation suit pour lire le fichier entier. Dans le New Technology File System (NTFS), les fichiers sont localisés à l'aide d'une Master File Table (MFT), et chaque fichier et répertoire sur un volume NTFS a une entrée dans la MFT contenant des données, y compris le nom de fichier, la taille, les horodatages, les permissions et les emplacements des données du fichier sur le disque. Lors de la recherche d'un fichier, le système d'exploitation consulte la MFT pour trouver l'entrée correspondant au nom de fichier, ce qui fournit ensuite les informations nécessaires pour accéder aux données du fichier.

Comme vous vous en souvenez peut-être, les fichiers représentent des valeurs stockées sur disque et les répertoires représentent les métadonnées des fichiers. Les systèmes de fichiers définissent des opérations sur des objets tels que la création, la lecture et l'écriture, et ils peuvent également fournir des services de niveau supérieur tels que la comptabilité et les quotas, l'indexation ou la recherche de sauvegarde incrémentielle, la gestion de versions de fichiers et le chiffrement. Un quota (quota) est la quantité d'espace pour stocker des fichiers en fonction de l'espace mémoire disponible. Les quotas sont utilisés pour protéger le système contre une charge inutile et aident à organiser les données dans le stockage. Une sauvegarde incrémentielle (incremental backup) est une image de sauvegarde contenant les pages qui ont été mises à jour depuis la sauvegarde précédente. La méthode qui convertit les données en code secret qui cache le vrai sens des données est appelée chiffrement (encryption). Le système qui permet à un fichier d'exister en plusieurs versions en même temps, ce qui donne à l'utilisateur un contrôle complet sur la création de fichiers comme dans l'exemple de gestion de versions de fichiers, est appelé gestion de versions de fichiers (file versioning) (Figure 6.33).

Un diagramme montre la gestion de versions de fichiers. Il indique Version initiale : Doc Version 1 -> Doc Version 2 -> Doc Version 3 -> Doc Version 4.
Figure 6.33 Dans la gestion de versions de fichiers, le système d'exploitation enregistre toutes les copies d'un fichier (dans ce cas, un fichier doc ou document). (source : Copyright Rice University, OpenStax, sous licence CC BY 4.0)

Les systèmes de fichiers se préoccupent des caractéristiques de niveau inférieur telles que les performances et la résilience aux pannes. Les performances et la résilience aux pannes peuvent être fortement affectées par les caractéristiques du matériel.

Interface du système de fichiers

En général, l'interface du système de fichiers (file system) définit des opérations standard telles que la création et la suppression de fichiers (ou de répertoires (directory)), la manipulation de fichiers et de répertoires, la copie et le verrou (lock). Rappelez-vous que les différents attributs de fichier sont le nom, le type, la taille et la protection (protection). Le système de fichiers utilise ces attributs pour fournir des appels système pour les opérations suivantes :

  • Créer : Trouver un espace pour le fichier sur le disque et entrer les nouvelles informations de fichier dans le répertoire.
  • Écrire : Rechercher un fichier spécifique dans le répertoire et commencer à écrire à partir de l'endroit où le pointeur d'écriture pointe.
  • Lire : Spécifier le nom du fichier et commencer à lire à partir de l'endroit où le pointeur de lecture pointe.
  • Rechercher : Rechercher la position d'octet spécifique dans le fichier.
  • Supprimer : Rechercher le fichier dans le répertoire et effacer le fichier du répertoire.
  • Tronquer : Réinitialiser la longueur du fichier à zéro et libérer l'espace alloué pour le fichier.
  • Ajouter : Ajouter de nouvelles informations à la fin du fichier.
  • Copier : Créer un nouveau fichier et lire les données d'un ancien fichier, puis les écrire dans le nouveau.

Si plusieurs processus tentent d'ouvrir un fichier en même temps, un rôle de gestion de fichiers doit être appliqué, à savoir le verrou.

Inœuds

Comme mentionné précédemment, les inœuds sont des structures de données du système d'exploitation utilisées pour représenter des informations sur les fichiers et les dossiers stockés sur disque ainsi que les données des fichiers et conservées en mémoire lorsque le fichier est ouvert. Un inœud (inode) contient des informations telles que la taille du fichier, les secteurs occupés par le fichier, les heures d'accès (par exemple, dernière lecture et dernière écriture) et les informations d'accès (par exemple, l'identifiant du propriétaire et l'identifiant du groupe). Sous Linux, chaque fois que le système crée un nouveau fichier, il lui attribue un numéro d'inœud unique appelé numéro d'inode (i-number). En interne, le système d'exploitation utilise le numéro d'inode comme identifiant pour le fichier — en fait, comme son nom. Lorsqu'un fichier est ouvert, son inœud est conservé en mémoire principale. Lorsque le fichier est fermé, l'inœud est stocké sur disque. Si vous utilisez Linux, vous pouvez vérifier le nombre total d'inœuds sur disque en utilisant la commande df et l'option –i, comme le montre la Figure 6.34.

Ce qui suit est affiché : $df –i/dev/sda; Sortie : Filesystem /dev/sda, Inodes 1624000, IUsed 128000, IFree 1496000, IUse% 9%.
Figure 6.34 Dans le système d'exploitation Linux, le nombre total d'inœuds sur le répertoire /dev/sda peut être visualisé à l'aide de la commande df et de l'option –i. (source : Copyright Rice University, OpenStax, sous licence CC BY 4.0)

Les systèmes de fichiers sont responsables de la gestion des parties du disque qui sont utilisées (inœuds) et des parties du disque qui ne sont pas utilisées (blocs libres). Chaque système de fichiers (file system) a des stratégies et des approches différentes pour gérer ces informations, avec des compromis différents. Les fonctionnalités supplémentaires des systèmes de fichiers incluent le chiffrement (encryption) au niveau du système de fichiers, la compression et les garanties d'intégrité des données.

Systèmes de fichiers distribués

Un système de fichiers distribué (DFS) (distributed file system (DFS)) est un système de fichiers distribué sur plusieurs serveurs de fichiers ou plusieurs emplacements qui prennent en charge le partage (sharing) de fichiers et de périphériques à l'échelle du réseau. La présentation d'un DFS est similaire à la vue traditionnelle (c'est-à-dire que le client utilise un système de fichiers). L'idée principale d'un DFS est qu'il utilise un espace de noms, ce qui signifie que tous les clients voient un seul espace de noms où les fichiers et les répertoires sont partagés sur le réseau. Dans un DFS, les clients peuvent lire et écrire des fichiers sur une machine distante comme s'ils accédaient à leurs disques locaux. Un DFS fournit une abstraction sur les disques physiques qui est similaire à l'abstraction que la mémoire virtuelle (virtual memory) fournit sur la mémoire physique (Figure 6.35).

Un diagramme montre une architecture de système de fichiers distribué. Il comprend Utilisateur final <-> Serveur DFS <->Disque/Stockage local <-> Infonuage.
Figure 6.35 Dans une architecture de système de fichiers distribué, le serveur DFS fonctionne comme un intermédiaire entre l'utilisateur final et les données, qui peuvent être dans n'importe quel format de stockage. (source : Copyright Rice University, OpenStax, sous licence CC BY 4.0)

Les technologies DFS comme GFS de Google (Google File System), HDFS d'Apache Hadoop (Hadoop Distributed File System) et RDDs d'Apache Spark (Resilient Distributed Datasets) ont révolutionné la façon dont nous gérons et traitons (process) de grands volumes de données. Ces systèmes sont conçus pour prendre en charge le calcul à haut débit (HTC), complétant les capacités du calcul haute performance (HPC) en se concentrant sur le traitement efficace de vastes ensembles de données à travers des grappes d'ordinateurs.

  • Google File System (GFS) est un excellent exemple de DFS hautement optimisé pour le traitement de données à grande échelle. Il est conçu pour offrir une haute tolérance aux pannes tout en fonctionnant sur du matériel de base à faible coût.
  • Hadoop Distributed File System (HDFS) suit un principe similaire mais est à code source ouvert et est couramment associé à l'écosystème Hadoop. Il est conçu pour stocker de très grands fichiers sur des machines dans une grande grappe et pour diffuser ces fichiers à haut débit vers les applications utilisateur. En décomposant les fichiers en blocs et en les distribuant sur un réseau d'ordinateurs, HDFS peut traiter les données en parallèle, accélérant considérablement les calculs et les tâches d'analyse de données.
  • Les Resilient Distributed Datasets (RDDs) dans Apache Spark sont une étape supplémentaire dans le calcul distribué, offrant une abstraction qui représente une collection d'objets en lecture seule partitionnée sur un ensemble de machines qui peut être reconstruite si une partition est perdue. L'utilisation des RDDs par Spark lui permet de traiter les données en mémoire, ce qui est beaucoup plus rapide que le traitement basé sur disque utilisé par Hadoop, faisant de Spark un excellent choix pour les applications nécessitant des itérations rapides sur de grands ensembles de données.

Pour faciliter la communication nécessaire dans ces environnements distribués, des protocoles tels que l'appel de procédure distante (RPC) et les tables de hachage distribuées (DHTs) sont employés. RPC est un protocole qu'un programme peut utiliser pour demander un service à un autre programme situé sur un autre ordinateur dans un autre réseau sans avoir à comprendre les détails du réseau. Les DHTs sont une classe de systèmes distribués décentralisés qui fournissent un service de recherche similaire à une table de hachage ; les clés sont mappées à des nœuds, et un nœud peut récupérer le contenu associé à une clé donnée.

Au-delà de cela, le concept de systèmes de fichiers distribués N-Tier, tels que le Network File System (NFS), joue un rôle fondamental. NFS permet à un système de partager des répertoires et des fichiers avec d'autres sur un réseau. En utilisant NFS, les utilisateurs et les programmes peuvent accéder aux fichiers sur des systèmes distants presque comme s'il s'agissait de fichiers locaux.

L'abstraction de base d'un système de fichiers distant se fait via l'ouverture, la fermeture, la lecture et l'écriture. En ce qui concerne le nommage, les noms sont transparents quant à leur emplacement. La transparence de l'emplacement masque l'endroit où le fichier est stocké dans le réseau. La procédure qui permet à plusieurs copies d'un fichier d'exister dans le réseau est appelée réplication (replication). Cela améliore les performances et la disponibilité. Le DFS (DFS) gère les mises à jour, vérifie si les clients travaillent sur des copies séparées et effectue la réconciliation.

Mémoire flash

La mémoire flash est utilisée pour le stockage général et le transfert de données entre les ordinateurs et d'autres produits numériques. De nombreux périphériques de stockage actuels, tels que les SSD, utilisent la mémoire flash, qui offre des améliorations de performances considérables par rapport aux disques durs mécaniques traditionnels (HDD). Les améliorations de performances des périphériques de stockage basés sur la mémoire flash comme les SSD proviennent de leur capacité à accéder aux données beaucoup plus rapidement que les disques mécaniques. Voici pourquoi :

  • Pas de pièces mobiles : Contrairement aux HDD qui utilisent des disques rotatifs et des têtes de lecture/écriture, les SSD n'ont pas de pièces mécaniques. Cela augmente non seulement la durabilité, mais signifie également que les données peuvent être lues et écrites sur le lecteur beaucoup plus rapidement.
  • Accès aléatoire : La mémoire flash permet un accès aléatoire à n'importe quel emplacement sur le stockage, ce qui la rend beaucoup plus rapide pour la lecture des données dispersées sur le lecteur. Les HDD doivent déplacer physiquement la tête de lecture/écriture vers l'emplacement des données, ce qui prend plus de temps.
  • Vitesses de lecture et d'écriture plus rapides : Les SSD peuvent gérer des opérations de lecture et d'écriture rapides. Ceci est particulièrement bénéfique pour les applications qui nécessitent un accès rapide à de grandes quantités de données, telles que le montage vidéo, les jeux et les bases de données haute vitesse.
  • Latence plus faible : Parce qu'ils n'ont pas de tête de lecture/écriture physique qui doit être positionnée, les SSD réduisent considérablement le temps qu'il faut à un périphérique de stockage pour commencer à transférer des données suite à une requête d'I/O.
  • Durabilité et fiabilité améliorées : Sans pièces mobiles à user ou à défaillir, les SSD sont généralement plus fiables et peuvent mieux résister aux chutes ou aux chocs soudains.
  • Consommation d'énergie réduite : Les SSD consomment moins d'énergie, ce qui peut contribuer à une plus longue durée de vie de la batterie des ordinateurs portables et à une consommation d'énergie réduite dans les centres de données.

Enjeux mondiaux en technologie

Systèmes de fichiers distribués mondiaux

Les systèmes de fichiers (file system) distribués permettent aux entreprises qui opèrent à l'échelle mondiale et gèrent de vastes quantités de données provenant de nombreuses sources différentes et de nombreuses manières différentes, comme suit :

  • Stocker et gérer ces données dans un infonuage
  • Mettre à l'échelle leurs opérations selon les besoins
  • Permettre aux utilisateurs du monde entier d'accéder aux données de manière transparente
  • Utiliser le chiffrement et d'autres mécanismes de protection pour sécuriser les données sensibles
  • S'assurer que les données sont régulièrement sauvegardées et peuvent être récupérées en cas de catastrophe