Système de fichiers

TBD : journalisation : faire des dessins.

Un système de fichiers est une structure permettant de stocker de l'information sur un disque dur. Un système a donc habituellement plusieurs systèmes de fichiers : un pour chaque disque dur et un pour chaque clé usb insérée.

Il est possible d'avoir plusieurs systèmes de fichier par disque dur en le partitionnant.

Un système de fichier est organisé en arbre :

Les dossiers et les fichiers possèdent des meta-données qui les spécifient :

Utilisation d'un système de fichier

Opérations que l'on peut faire sur les fichiers, selon les permissions :

Opérations que l'on peut faire sur les dossiers, selon les permissions :

Le système doit connaître tous les fichiers utilisés. C'est une liste où chaque entrée est un descripteur de fichier qui contient :

Un même fichier peut apparaître plusieurs fois, mais si c'est deux accès en écriture, ou un accès en lecture et un autre en écriture, il peut se passer des choses bizarres. Ouvrir un fichier en écriture commençant par créer un nouveau fichier.

Plusieurs thread peuvent se partager la même entrée.

Journalisation

Stocker ses données sur le disque est ue opération courante mais intrinsèquement dangereuse, la moindre erreur peut invalider des données ce qui peut se révéler catastrophique.

Des mécanisme de journalisation sont présent dans tous les systèmes de fichiers utilisés pour des ordinateurs de bureau ou serveurs. Ils permettent de ne pas perdre de données en cas de crash système.

Ils fonctionnent de la même manière :

  1. ils regroupent les opérations effectuées sur le disque en transaction : une suite d'opérations de lecture/écriture à faire séquentiellement et sans interruption
  2. la transaction n'est effectuée que si elle est au préalable sauvée sur le disque dur

Ceci nécessite un espace dédié sur le disque dur où les transactions sont stockées. Comme la suite de transactions à effectuer est séquentielle, l'espace de stockage est une liste circulaire.

Chaque transaction est un intervalle de cette liste comprenant un bloc de départ, une suite de blocs d'opérations à effectuer, un bloc de fin. Une fois le bloc de fin écrit dans la liste, la transaction est considérée comme terminée et peut être effectuée sur le système.

Liste circulaire :

init A |  opération 1 | opération 2 | ... | opération n | bloc fin A | init B | ...

Si un crash intervient au milieu de la transaction, elle peut être intégralement rejouée pour être complétée.

Formats

Cette organisation logique d'un système de fichier cache une grande variété d'implémentations possibles pour stocker effectivement les données sur un disque dur.

Cette structure n'est pas gratuite et prend couramment plus de $1\%$ de la taille totale du disque.

De plus, la nécessaire rétro-compatibilité des systèmes les rend souvent difficile à comprendre.

Formats courants

Tous les formats sont contraints par la structure d'un disque dur qui lit ses données par page (pour les vieux disques dur non SSD, on parle de secteur) qui est habituellement de 4KiB. Traditionnellement, la taille d'un bloc est de 512B (c'est parfois cette valeur qui est rendue par un disque même si en interne la taille est plus importante), c'est pourquoi nombre de format découpent leurs structures en paquets de 512B.

Nous allons étudier plus avant 2 grandes structures, utilisées couramment :

Ces formats stockent dans le même espace les données (les fichiers) et l'organisation hiérarchique du système (les dossiers). Leurs deux approches diffèrent peu (l'un a une structure linéaire, l'autre arborée), mais cela suffit à les rendre très différent à l'usage.

Format FAT

Format ext4

Autres formats