Vous avez déjà eu besoin de formater un nouveau disque dur ou une clé USB et on vous a proposé de choisir parmi des acronymes tels que FAT, FAT32 ou NTFS ? Ou bien avez-vous déjà essayé de brancher un périphérique externe, mais votre système d'exploitation a eu du mal à le comprendre ? Ou encore, êtes-vous parfois frustré par le temps que met votre système d'exploitation à trouver un fichier particulier lors d'une recherche ?
Si vous avez vécu l'une de ces situations, ou si vous avez simplement cliqué pour trouver un fichier ou une application sur votre ordinateur, alors vous avez une expérience directe de ce qu'est un système de fichiers.
De nombreuses personnes n'utilisent pas forcément une méthodologie explicite pour organiser leurs fichiers personnels sur un PC (explainer_file_system_final_actualfinal_FinalDraft.docx). Cependant, le concept abstrait d'organisation des fichiers et des répertoires pour tout dispositif doté d'une mémoire persistante doit être très systématique lors de la lecture, de l'écriture, de la copie, de la suppression et de l'interface avec les données. Cette tâche du système d'exploitation est généralement confiée au système de fichiers.
Il existe de nombreuses façons différentes d'organiser des fichiers et des répertoires. Si vous imaginez simplement un classeur physique contenant des papiers et des dossiers, vous devrez prendre en compte de nombreux éléments pour mettre au point un système permettant de retrouver vos documents. Organiseriez-vous les dossiers par ordre alphabétique ou par ordre alphabétique inverse ? Allez-vous donner la priorité aux dossiers les plus fréquemment consultés, à l'avant ou à l'arrière de l'armoire ? Comment traiteriez-vous les doublons, qu'ils soient intentionnels (pour la redondance) ou accidentels (nommer deux fichiers exactement de la même façon) ? Ce ne sont là que quelques questions analogues auxquelles il faut répondre lors du développement d'un système de fichiers.
Dans cet explicatif, nous allons plonger dans la manière dont les ordinateurs modernes abordent ces problèmes. Nous passerons en revue les différents rôles d'un système de fichiers dans le contexte plus large d'un système d'exploitation et des disques physiques, ainsi que la manière dont les systèmes de fichiers sont conçus et mis en œuvre.
Données persistantes : Fichiers et répertoires
Les systèmes d'exploitation modernes sont de plus en plus complexes et doivent gérer diverses ressources matérielles, planifier des processus, virtualiser la mémoire, parmi de nombreuses autres tâches. En ce qui concerne les données, de nombreuses avancées matérielles, telles que les caches et la mémoire vive, ont été conçues pour accélérer les temps d'accès et garantir que les données fréquemment utilisées se trouvent "à portée de calcul" du processeur. Cependant, lorsque vous mettez votre ordinateur hors tension, seules les informations stockées sur des périphériques persistants, tels que les disques durs (HDD) ou les périphériques de stockage à semi-conducteurs (SSD), seront conservées au-delà du cycle de mise hors tension. Le système d'exploitation doit donc prendre un soin particulier de ces périphériques et des données qu'ils contiennent, car c'est là que les utilisateurs conservent les données auxquelles ils tiennent vraiment.
Deux des plus importantes abstractions développées au fil du temps pour le stockage sont le fichier et le répertoire. Un fichier est un tableau linéaire d'octets, chacun d'entre eux pouvant être lu ou écrit. Alors que dans l'espace utilisateur, nous pouvons imaginer des noms astucieux pour nos fichiers, sous le capot, il y a généralement des identifiants numériques pour garder la trace des noms de fichiers. Historiquement, cette structure de données sous-jacente est souvent désignée par son numéro d'inode (nous y reviendrons plus tard). Il est intéressant de noter que le système d'exploitation lui-même ne sait pas grand-chose de la structure interne d'un fichier (par exemple, s'il s'agit d'une image, d'une vidéo ou d'un fichier texte) ; en fait, tout ce qu'il doit savoir, c'est comment écrire les octets dans le fichier pour un stockage persistant et s'assurer qu'il peut les récupérer plus tard lorsqu'on le lui demande.
La deuxième abstraction principale est le répertoire. Un répertoire n'est en fait qu'un fichier, mais il contient un ensemble très spécifique de données : une liste de noms lisibles par l'utilisateur et de correspondances de noms de bas niveau. En pratique, cela signifie qu'il contient une liste d'autres répertoires ou fichiers qui, ensemble, peuvent former une arborescence de répertoires, sous laquelle tous les fichiers et répertoires sont stockés.
Une telle organisation est très expressive et évolutive. Tout ce dont vous avez besoin, c'est d'un indicateur de la racine de l'arborescence de répertoires (physiquement parlant, il s'agit du premier inode du système), et de là, vous pouvez accéder à tous les autres fichiers de cette partition de disque. Ce système vous permet également de créer des fichiers portant le même nom, à condition qu'ils n'aient pas le même chemin d'accès (c'est-à-dire qu'ils relèvent d'emplacements différents dans l'arborescence du système de fichiers).
En outre, vous pouvez techniquement nommer un fichier comme vous le souhaitez ! Bien qu'il soit généralement conventionnel de désigner le type de fichier par un point de séparation (comme .jpg dans picture.jpg), cela est purement facultatif et n'est pas obligatoire. Certains systèmes d'exploitation tels que Windows suggèrent fortement d'utiliser ces conventions afin d'ouvrir les fichiers dans l'application respective de votre choix, mais le contenu du fichier lui-même ne dépend pas de l'extension du fichier. L'extension n'est qu'une indication pour le système d'exploitation sur la manière d'interpréter les octets contenus dans un fichier.
Une fois que vous avez des fichiers et des répertoires, vous devez être capable de les exploiter. Dans le contexte d'un système de fichiers, cela signifie pouvoir lire les données, écrire des données, manipuler des fichiers (supprimer, déplacer, copier, etc.) et gérer les autorisations pour les fichiers (qui peut effectuer toutes les opérations ci-dessus ?). Comment les systèmes de fichiers modernes sont-ils mis en œuvre pour permettre à toutes ces opérations de se produire rapidement et de manière modulable ?
Organisation du système de fichiers
Lorsque l'on pense à un système de fichiers, il y a généralement deux aspects à prendre en compte. Le premier concerne les structures de données du système de fichiers. En d'autres termes, quels types de structures sur le disque sont utilisés par le système de fichiers pour organiser ses données et métadonnées ? Le second aspect concerne ses méthodes d'accès : comment un processus peut-il ouvrir, lire ou écrire sur ses structures ?
Commençons par décrire l'organisation générale sur le disque d'un système de fichiers rudimentaire.
La première chose à faire est de diviser votre disque en blocs. Une taille de bloc couramment utilisée est de 4 Ko. Supposons que vous ayez un très petit disque avec 256 Ko d'espace de stockage. La première étape consiste à diviser cet espace de manière égale en utilisant votre taille de bloc, et à identifier chaque bloc par un numéro (dans notre cas, en étiquetant les blocs de 0 à 63) :
Maintenant, répartissons ces blocs en différentes régions. Mettons de côté la plupart des blocs pour les données utilisateur, et appelons cela la région des données. Dans cet exemple, fixons les blocs 8-63 comme notre région de données :
Si vous avez remarqué, nous avons placé la région de données dans la dernière partie du disque, laissant les premiers blocs pour que le système de fichiers les utilise à d'autres fins. Plus précisément, nous voulons les utiliser pour suivre les informations sur les fichiers, comme l'emplacement d'un fichier dans la région de données, la taille d'un fichier, son propriétaire et ses droits d'accès, et d'autres types d'informations. Ces informations sont une pièce maîtresse du système de fichiers, et sont appelées métadonnées.
Pour stocker ces métadonnées, nous allons utiliser une structure de données spéciale appelée inode. Dans l'exemple en cours, mettons de côté 5 blocs comme inodes, et appelons cette région du disque la table inode :
Les inodes ne sont généralement pas très grands, par exemple 256 octets. Ainsi, un bloc de 4 Ko peut contenir environ 16 inodes, et notre système de fichiers simple ci-dessus contient 80 inodes au total. Ce nombre est en fait significatif : il signifie que le nombre maximum de fichiers dans notre système de fichiers est de 80. Avec un disque plus grand, vous pouvez certainement augmenter le nombre d'inodes, ce qui se traduit directement par plus de fichiers dans votre système de fichiers.
Il reste encore quelques éléments pour compléter notre système de fichiers. Nous avons également besoin d'un moyen de savoir si les inodes ou les blocs de données sont libres ou alloués. Cette structure d'allocation peut être implémentée comme deux bitmaps séparés, un pour les inodes et un autre pour la région de données.
Un bitmap est une structure de données très simple : chaque bit correspond au fait qu'un objet/bloc est libre (0) ou en cours d'utilisation (1). Nous pouvons assigner le bitmap des inodes et le bitmap des régions de données à leur propre bloc. Bien que cela soit excessif (un bloc peut être utilisé pour suivre jusqu'à 32 Ko d'objets, mais nous n'avons que 80 inodes et 56 blocs de données), c'est une façon pratique et simple d'organiser notre système de fichiers.
Enfin, pour le dernier bloc restant (qui, par coïncidence, est le premier bloc de notre disque), nous devons avoir un superbloc. Ce superbloc est en quelque sorte une métadonnée pour les métadonnées : dans le bloc, nous pouvons stocker des informations sur le système de fichiers, comme le nombre d'inodes (80), l'emplacement du bloc d'inodes (bloc 3) et ainsi de suite. Nous pouvons également mettre un identifiant pour le système de fichiers dans le superbloc afin de comprendre comment interpréter les nuances et les détails pour différents types de systèmes de fichiers (par exemple, nous pouvons noter que ce système de fichiers est un système de fichiers ext4 basé sur Unix, ou peut-être NTFS). Lorsque le système d'exploitation lit le superbloc, il peut alors disposer d'un plan pour savoir comment interpréter et accéder aux différentes données du disque.
Les inodes
Jusqu'à présent, nous avons mentionné la structure de données inode dans un système de fichiers, mais nous n'avons pas encore expliqué ce qu'est ce composant essentiel. Un inode est l'abréviation d'un nœud d'index, et c'est un nom historique donné par UNIX et les systèmes de fichiers antérieurs. Pratiquement tous les systèmes modernes utilisent le concept d'un inode, mais peuvent les appeler différemment (comme dnodes, fnodes, etc.).
Fondamentalement, l'inode est une structure de données indexable, ce qui signifie que les informations qui y sont stockées le sont d'une manière très spécifique, de sorte que vous pouvez sauter à un emplacement particulier (l'index) et savoir comment interpréter le prochain ensemble de bits.
Un inode particulier est désigné par un numéro (le numéro i), qui est le nom de bas niveau du fichier. Étant donné un numéro i, vous pouvez rechercher les informations le concernant en vous rendant rapidement à son emplacement. Par exemple, à partir du superbloc, nous savons que la région inode commence à l'adresse 12KB.
Comme un disque n'est pas adressable par octet, nous devons savoir à quel bloc accéder pour trouver notre inode. Avec quelques calculs assez simples, nous pouvons calculer l'ID du bloc en fonction du numéro i qui nous intéresse, de la taille de chaque inode et de la taille d'un bloc. Ensuite, nous pouvons trouver le début de l'inode dans le bloc et lire l'information désirée.
L'inode contient pratiquement toutes les informations dont vous avez besoin sur un fichier. Par exemple, s'agit-il d'un fichier ordinaire ou d'un répertoire ? Quelle est sa taille ? Combien de blocs lui sont alloués ? Quelles sont les autorisations d'accès au fichier (c'est-à-dire qui en est le propriétaire et qui peut lire ou écrire) ? Quand le fichier a-t-il été créé ou consulté pour la dernière fois ? Et de nombreux autres indicateurs ou métadonnées sur le fichier.
L'un des éléments d'information les plus importants conservés dans l'inode est un pointeur (ou une liste de pointeurs) sur l'emplacement des données dans la région de données. Ces pointeurs sont connus sous le nom de pointeurs directs. Le concept est intéressant, mais pour les très gros fichiers, vous pourriez manquer de pointeurs dans la petite structure de données inode. Ainsi, de nombreux systèmes modernes disposent de pointeurs indirects spéciaux : au lieu d'accéder directement aux données du fichier dans la région de données, vous pouvez utiliser un bloc indirect dans la région de données pour augmenter le nombre de pointeurs directs pour votre fichier. De cette façon, les fichiers peuvent devenir beaucoup plus grands que l'ensemble limité de pointeurs directs disponibles dans la structure de données inode.
Sans surprise, vous pouvez utiliser cette approche pour prendre en charge des types de données encore plus grands, en utilisant des pointeurs indirects doubles ou triples. Ce type de système de fichiers est connu sous le nom d'indexation multi-niveaux et permet à un système de fichiers de prendre en charge des fichiers de grande taille (de l'ordre du gigaoctet) ou plus. Les systèmes de fichiers courants tels que ext2 et ext3 utilisent des systèmes d'indexation à plusieurs niveaux. Les systèmes de fichiers plus récents, tels que ext4, ont le concept d'extents, qui sont des systèmes de pointeurs légèrement plus complexes.
Bien que la structure de données inode soit très populaire pour son évolutivité, de nombreuses études ont été réalisées pour comprendre son efficacité et la mesure dans laquelle les index multiniveaux sont nécessaires. Une étude a montré quelques mesures intéressantes sur les systèmes de fichiers, notamment :
- La plupart des fichiers sont en fait très petits (2KB est la taille la plus courante).
- La taille moyenne des fichiers est en augmentation (près de 200k est la moyenne).
- La plupart des octets sont stockés dans de gros fichiers (quelques gros fichiers utilisent la majeure partie de l'espace).
- Les systèmes de fichiers contiennent beaucoup de fichiers (près de 100 000 en moyenne).
- Les systèmes de fichiers sont à peu près à moitié remplis (même si les disques grossissent, les systèmes de fichiers restent remplis à environ 50 %).
- Les répertoires sont généralement petits (beaucoup ont peu d'entrées, 20 ou moins).
Tout cela montre la polyvalence et l'évolutivité de la structure de données inode, et la façon dont elle prend en charge la plupart des systèmes modernes. De nombreuses optimisations ont été mises en œuvre pour la vitesse et l'efficacité, mais la structure de base a peu changé au cours des dernières années.
Les Dossiers
Sous le capot, les dossiers sont simplement un type de fichier très spécifique : ils contiennent une liste d'entrées utilisant le système d'appariement (nom de l'entrée, numéro i). Le numéro d'entrée est généralement un nom lisible par l'homme, et le numéro i correspondant capture le "nom" du système de fichiers sous-jacent.
Chaque dossier contient généralement deux entrées supplémentaires en plus de la liste des noms d'utilisateurs : une entrée est le pointeur du "répertoire actuel", et l'autre est le pointeur du répertoire parent. Lorsque vous utilisez un terminal de ligne de commande, vous pouvez "changer de dossier" en tapant
cd [nom du dossier ou du fichier].
ou remonter d'un dossier en tapant
cd ..
où ".." est le nom abstrait du pointeur du dossier parent.
Comme les répertoires ne sont généralement que des "fichiers spéciaux", la gestion du contenu d'un dossier est généralement aussi simple que l'ajout et la suppression de paires dans le fichier. Un dossier possède généralement son propre inode dans un arbre de système de fichiers linéaire (comme décrit ci-dessus), mais de nouvelles structures de données telles que les arbres B ont été proposées et utilisées dans certains systèmes de fichiers modernes tels que XFS.
Méthodes d'accès et optimisations
Un système de fichiers serait inutile si vous ne pouviez pas y lire et y écrire des données. Pour cette étape, vous avez besoin d'une méthodologie bien définie pour permettre au système d'exploitation d'accéder aux octets de la région de données et de les interpréter.
Les opérations de base sur un fichier comprennent l'ouverture d'un fichier, la lecture d'un fichier ou l'écriture dans un fichier. Ces procédures nécessitent un grand nombre d'opérations d'entrée/sortie (E/S), et sont généralement dispersées sur le disque. Par exemple, pour parcourir l'arborescence d'un système de fichiers depuis le nœud racine jusqu'au fichier en question, il faut passer d'un inode à un dossier (potentiellement multi-indexé) jusqu'à l'emplacement du fichier. Si le fichier n'existe pas, certaines opérations supplémentaires telles que la création d'une entrée d'inode et l'attribution de permissions sont nécessaires.
De nombreuses technologies, tant au niveau matériel que logiciel, ont été développées pour améliorer les temps d'accès et les interactions avec le stockage. Une optimisation matérielle très courante est l'utilisation de disques SSD, qui ont des temps d'accès bien meilleurs grâce à leurs propriétés d'état solide. Les disques durs, quant à eux, comportent généralement des pièces mécaniques (une broche en mouvement), ce qui signifie qu'il existe des limites physiques à la vitesse à laquelle vous pouvez "sauter" d'une partie du disque à une autre.
Si les disques SSD offrent des accès rapides au disque, cela ne suffit généralement pas pour accélérer la lecture et l'écriture des données. Le système d'exploitation utilise généralement des structures de mémoire volatile plus rapides, telles que la RAM et les caches, afin de rendre les données "plus accessible" au processeur afin d'accélérer les opérations. En fait, le système d'exploitation lui-même est généralement stocké sur un système de fichiers, et l'une des principales optimisations consiste à garder les fichiers courants du système d'exploitation en lecture seule constamment dans la RAM afin de garantir un fonctionnement rapide et efficace du système d'exploitation.
Sans entrer dans le détail des opérations sur les fichiers, certaines optimisations intéressantes sont utilisées pour la gestion des données. Par exemple, lors de la suppression d'un fichier, une optimisation courante consiste à supprimer simplement l'inode pointant vers les données, marquant ainsi efficacement les régions du disque comme " espace mémoire libre ". Les données sur le disque ne sont pas physiquement effacées dans ce cas, mais l'accès à celles-ci est supprimé. Afin de "supprimer" complètement un fichier, certaines opérations de formatage peuvent être effectuées pour écrire tous les zéros (0) sur les régions du disque en cours de suppression.
Une autre optimisation courante consiste à déplacer des données. En tant qu'utilisateur, nous pouvons souhaiter déplacer un fichier d'un dossier à un autre en fonction de nos préférences personnelles en matière d'organisation. Le système de fichiers, cependant, n'a besoin que de modifier des données minimales dans quelques fichiers du dossier, plutôt que de déplacer réellement des bits d'un endroit à l'autre. En utilisant le concept des inodes et des pointeurs, un système de fichiers peut effectuer une opération de "déplacement" (sur le même disque) très rapidement.
Lorsqu'il s'agit d'"installer" des applications ou des jeux, cela signifie simplement copier des fichiers à un emplacement spécifique et définir des variables globales et des drapeaux pour les rendre exécutables. Sous Windows, une installation demande généralement un dossier, puis télécharge les données nécessaires à l'exécution de l'application et les place dans ce dossier. Une installation n'a rien de particulier, si ce n'est le mécanisme automatisé d'écriture de nombreux fichiers et dossiers à partir d'une source externe (support en ligne ou physique) sur le disque de votre choix.
Systèmes de fichiers courants
Les systèmes de fichiers modernes comportent de nombreuses optimisations détaillées qui travaillent main dans la main avec le système d'exploitation pour améliorer les performances et fournir diverses fonctionnalités (telles que la sécurité ou la prise en charge des fichiers volumineux). Parmi les systèmes de fichiers les plus populaires aujourd'hui figurent FAT32 (pour les lecteurs flash et, auparavant, Windows), NTFS (pour Windows) et ext4 (pour Linux).
À un haut niveau, tous ces systèmes de fichiers ont des structures similaires sur le disque, mais diffèrent dans les détails et les fonctionnalités qu'ils prennent en charge. Par exemple, le format FAT32 (File Allocation Table) a été initialement conçu en 1977 et a été utilisé aux débuts de l'informatique personnelle. Il utilise un concept de liste liée pour les accès aux fichiers et aux dossiers, qui, bien que simple et efficace, il peut être lent pour les disques de grande taille. Aujourd'hui, il s'agit d'un format couramment utilisé pour les lecteurs flash.
Le système de fichiers NTFS (New Technology File System), développé par Microsoft en 1993, a remédié à bon nombre des humbles débuts de la FAT32. Il améliore les performances en stockant diverses métadonnées supplémentaires sur les fichiers et prend en charge diverses structures pour le chiffrement, la compression, les fichiers épars et la journalisation du système. NTFS est encore utilisé aujourd'hui dans Windows 10 et 11. De même, les appareils macOS et iOS utilisent un système de fichiers propriétaire créé par Apple, HFS+ (également connu sous le nom de Mac OS Extended) était la norme avant qu'ils n'introduisent l'Apple File System (APFS) relativement récemment en 2017 et est mieux optimisé pour les supports de stockage plus rapides ainsi que pour la prise en charge de capacités avancées comme le chiffrement et l'intégrité accrue des données.
Le quatrième système de fichiers étendu, ou ext4, est la quatrième itération du système de fichiers ext développé en 2008 et le système par défaut de nombreuses distributions Linux, dont Debian et Ubuntu. Il peut prendre en charge des fichiers de grande taille (jusqu'à 16 téraoctets) et utilise le concept d'extents pour améliorer encore les inodes et les métadonnées des fichiers. Il utilise un système d'allocation différée pour réduire les écritures sur le disque, et possède de nombreuses améliorations pour les sommes de contrôle du système de fichiers pour l'intégrité des données, et est également supporté par Windows et Mac.
Chaque système de fichiers fournit son propre ensemble de fonctionnalités et d'optimisations, et peut présenter de nombreuses différences d'implémentation. Cependant, fondamentalement, ils remplissent tous la même fonction de prise en charge des fichiers et d'interaction avec les données sur le disque. Certains systèmes de fichiers sont optimisés pour mieux fonctionner avec différents systèmes d'exploitation, c'est pourquoi le système de fichiers et le système d'exploitation sont très étroitement liés.
Systèmes de fichiers de nouvelle génération
L'une des caractéristiques les plus importantes d'un système de fichiers est sa résilience aux erreurs. Les erreurs matérielles peuvent se produire pour diverses raisons, notamment l'usure, les pics ou chutes de tension aléatoires (dus à l'overclocking du processeur ou à d'autres optimisations), les chocs aléatoires de particules alpha (également appelés erreurs logicielles) et bien d'autres causes. En fait, les erreurs matérielles sont un problème si coûteux à identifier et à déboguer que Google et Facebook ont publié des articles sur l'importance de la résilience à l'échelle, en particulier dans les centres de données.
L'une des caractéristiques les plus importantes d'un système de fichiers est sa résilience aux erreurs.
À cette fin, la plupart des systèmes de fichiers de nouvelle génération se concentrent sur une résilience plus rapide et une sécurité plus rapide. Ces caractéristiques ont un coût, car elles entraînent généralement une baisse des performances afin d'intégrer davantage de redondance ou de sécurité dans le système de fichiers.
Les fournisseurs de matériel informatique intègrent généralement divers mécanismes de protection à leurs produits, tels que la protection ECC pour la RAM, les options RAID pour la redondance des disques ou la redondance complète des processeurs, comme la récente puce entièrement autonome (FSD) de Tesla. Cependant, cette couche supplémentaire de protection dans le logiciel via le système de fichiers est tout aussi importante.
Microsoft travaille sur ce problème depuis de nombreuses années maintenant dans son implémentation du système de fichiers résilient (ReFS). ReFS a été lancé à l'origine pour Windows Server 2012, et est destiné à succéder à NTFS. ReFS utilise des arbres B+ pour toutes ses structures sur le disque (y compris les métadonnées et les données de fichier), et a une approche de résilience d'abord pour la mise en œuvre. Cette approche comprend des sommes de contrôle pour toutes les métadonnées stockées indépendamment et une politique d'allocation à l'écriture. En fait, cela réduit la charge des administrateurs qui n'ont pas besoin d'exécuter des outils de vérification d'erreurs périodiques tels que CHKDSK lorsqu'ils utilisent ReFS.
Dans le monde open-source, Btrfs (prononcé "better FS" ou "Butter FS") gagne du terrain avec des caractéristiques similaires à ReFS. Là encore, l'accent est mis sur la tolérance aux pannes, les propriétés d'autoréparation et la facilité d'administration. Il offre également une meilleure évolutivité que ext4, permettant de prendre en charge environ 16 fois plus de données.
Résumé
Bien qu'il existe de nombreux systèmes de fichiers différents utilisés aujourd'hui, l'objectif principal et les concepts de haut niveau ont peu changé au fil du temps. Pour construire un système de fichiers, vous avez besoin d'informations de base sur chaque fichier (métadonnées) et d'une structure de stockage évolutive pour écrire et lire à partir de différents fichiers.
L'implémentation sous-jacente des inodes et des fichiers forme un système très extensible, qui a été ajusté et modifié pour nous fournir les systèmes de fichiers modernes. Même si nous ne pensons pas toujours aux systèmes de fichiers et à leurs caractéristiques dans notre vie quotidienne, leur robustesse et leur conception évolutive sont un véritable témoignage qui nous a permis de profiter de nos données numériques et d'y accéder sur des ordinateurs, des téléphones, des consoles et divers autres systèmes.
source :
https://www.techspot.com/article/2377-file-system-explainer/