Systèmes de fichiers
Progression
#Systèmes de fichiers
À quoi ça sert ?
À quoi ça sert: organiser durablement des données (fichiers, dossiers) sur des supports lents et faillibles, tout en offrant une API simple. Comment: inodes pour les métadonnées, répertoires pour les noms, caches pour amortir la latence, journal/COW pour l’intégrité.
#Inodes et répertoires
- Inode: métadonnées (taille, blocs, uid/gid, modes) et pointeurs de blocs (directs/indirects). Le nom n’y figure pas.
- Répertoire: table (nom → inode). Un lien dur référence le même inode (compteur de liens); un lien symbolique référence un chemin.
#Écriture et cache de page
- Le noyau met en cache pages/buffers;
write()
marque « dirty » et retourne vite. fsync()
force la persistance (journal puis données) selon le FS et le mode; essentiel pour garantir la durabilité applicative.
#Animation: write‑back et journal
write()
Copie en page cache; pages « dirty »; retour rapide
Journal
Intentions (métadonnées): writeback/ordered/journal
Flush
Daemon écrit sur disque; fsync force la synchro
Crash
Relecture du journal au montage: cohérence
#Diagramme: write → journal → flush → crash/rejouer
Processus
Page cache
Journal
Disque
#Journaling vs Copy‑on‑Write
- Journaling (ext4, XFS): journal des intentions pour restaurer la cohérence rapidement après crash.
- Copy‑on‑Write (btrfs, ZFS): écrit ailleurs puis bascule un pointeur; snapshots/checksums efficaces.
Modes ext4
writeback (métadonnées seulement), ordered (par défaut, données écrites avant métadonnées), journal (données+métadonnées dans le journal).
#Intégrité et perfs
- Barrières/flush: forcer l’ordre (
barrier
, FUA) pour éviter le ré‑ordonnancement destructeur. - Alignement bloc/IO; accès séquentiels et coalescence améliorent le débit; réduire la fragmentation.
#Quiz
Quel modèle permet des snapshots peu coûteux au niveau FS ?