Aller au contenu
Administration Linux medium

Système de fichiers ext4

24 min de lecture

Le système de fichiers ext4 est aujourd’hui le plus utilisé sur les distributions Linux. Il combine stabilité, performance et large compatibilité, ce qui en fait un choix par défaut pour de nombreux serveurs et postes de travail.

Dans ce guide, on va apprendre à créer, monter et administrer un système de fichiers ext4 de manière propre et efficace. Si tu n’as pas encore lu le guide d’introduction aux systèmes de fichiers Linux, je te recommande de le parcourir pour bien comprendre les bases (blocs, inodes, journalisation…).

Le système de fichiers ext4 (fourth extended filesystem) est l’évolution naturelle de ext3, lui-même dérivé de ext2. Il est aujourd’hui le standard sur la majorité des distributions Linux, notamment Debian, Ubuntu, CentOS, Fedora, etc.

Mais pourquoi est-il si populaire ? Voici un aperçu de ses caractéristiques techniques, de son fonctionnement interne et de ses forces.

ext4 utilise un journal pour enregistrer les métadonnées avant de les appliquer sur le disque. Cela permet de retrouver un état cohérent après un crash. Le journal n’inclut pas les données utilisateur, sauf si l’on active le mode data=journal.

Trois modes de fonctionnement sont disponibles :

  • journal : journalisation complète (métadonnées + données),
  • ordered (par défaut) : journalisation des métadonnées, écriture des données avant,
  • writeback : performance maximale, mais sécurité réduite.
  • Taille maximale d’un fichier : jusqu’à 16 To
  • Taille maximale d’un système de fichiers : 1 exaoctet (théorique)
  • Taille de bloc : configurable entre 1K et 4K
  • Nombre d’inodes : défini à la création, dépend de la taille
  • Support des timestamps sur 64 bits (limite repoussée à l’an 2446)
  • Allocation différée (delayed allocation) : améliore les performances en regroupant les écritures
  • Extent-based allocation : remplace le système de blocs classiques par des “extents”, plus efficaces
  • Multiblock allocator : allocation optimisée en grappes de blocs
  • Journal en arrière-plan : réduit les latences

L’un des grands avantages de ext4, c’est sa compatibilité avec ext3. On peut monter un système ext3 en ext4 sans conversion et inversement (avec certaines limitations).

C’est aussi un système stable et mature, supporté par tous les outils standard de Linux : fsck, tune2fs, e2label, e2fsck, etc.

Aucune technologie n’est parfaite. Voici quelques limites :

  • Pas de compression intégrée (contrairement à Btrfs ou ZFS),
  • Pas de snapshots natifs,
  • Fonctionnalités limitées pour les environnements très dynamiques ou de très grande échelle (où XFS ou Btrfs peuvent mieux s’adapter).

ext4 est idéal pour :

  • les serveurs classiques,
  • les stations de travail,
  • les conteneurs,
  • les volumes de données sans besoin de fonctionnalités avancées comme les snapshots ou la réplication.

En résumé, ext4 est un système de fichiers rapide, fiable et bien documenté. C’est souvent le choix le plus simple et le plus efficace pour une très grande majorité des usages Linux. Passons maintenant à sa mise en œuvre concrète avec la création d’un système ext4.

Avant d’utiliser un disque ou une partition, il faut le préparer pour qu’il puisse accueillir des fichiers. Avec ext4, cette préparation se fait en deux grandes étapes : la création de la structure de stockage (partition ou volume logique), puis le formatage avec le bon système de fichiers. Voyons comment procéder pas à pas.

On peut créer un système ext4 sur :

  • un disque brut (/dev/sdb),
  • une partition (/dev/sdb1),
  • un volume logique LVM (/dev/mapper/vg_data-lv_home).

L’important, c’est d’avoir un espace reconnu par le système. Pour visualiser les disques :

Fenêtre de terminal
lsblk

S’il s’agit d’un disque neuf, on peut créer une table de partitions avec fdisk, parted ou gdisk :

Fenêtre de terminal
sudo fdisk /dev/sdb

Puis on crée une partition (par exemple /dev/sdb1) qu’on utilisera ensuite.

Une fois le support prêt, on utilise la commande suivante :

Fenêtre de terminal
sudo mkfs.ext4 /dev/sdb1

Quelques options utiles :

  • -L nom : attribue un label à la partition.
  • -m 0 : désactive la réserve d’espace pour root (utile pour les disques de données).
  • -E lazy_itable_init=1 : accélère la création du FS.
  • -O ^has_journal : permet de désactiver la journalisation (rarement conseillé).

Exemple complet :

Fenêtre de terminal
sudo mkfs.ext4 -L data_disk -m 0 /dev/sdb1

Après la commande, le système de fichiers est prêt à être monté.

Pour confirmer que le FS est bien créé :

Fenêtre de terminal
sudo file -s /dev/sdb1

Pour afficher les caractéristiques du FS :

Fenêtre de terminal
sudo tune2fs -l /dev/sdb1

Créer un système de fichiers ext4, c’est simple, mais quelques options bien choisies peuvent vraiment faire la différence entre un disque bien optimisé et un autre source de problèmes. Dans le prochain chapitre, on verra comment monter proprement ce FS et automatiser son utilisation.

Une fois le système de fichiers ext4 créé, il faut le monter pour pouvoir l’utiliser. Le montage consiste à rattacher la partition formatée à un point de montage dans l’arborescence Linux, comme /mnt/data ou /home.

Voici comment procéder manuellement, puis comment automatiser ce montage au démarrage de la machine.

Pour monter manuellement un système de fichiers ext4 :

  1. Créer un point de montage :
Fenêtre de terminal
sudo mkdir -p /mnt/data
  1. Monter le système de fichiers :
Fenêtre de terminal
sudo mount /dev/sdb1 /mnt/data
  1. Vérifier le résultat :
Fenêtre de terminal
mount | grep /mnt/data

ou

Fenêtre de terminal
df -h /mnt/data

Ce montage est temporaire : il sera perdu au prochain redémarrage si on ne le rend pas persistant.

Utiliser un identifiant stable permet d’éviter les erreurs si l’ordre des disques change. On peut monter un système ext4 en utilisant :

  • le label :
Fenêtre de terminal
sudo mount -L data_disk /mnt/data
  • l’UUID :
Fenêtre de terminal
sudo mount UUID=xxxx-xxxx /mnt/data

Pour obtenir ces informations :

Fenêtre de terminal
sudo blkid
/dev/sdd: UUID="f3c5ec06-c60b-40f8-9717-55fc44cbeaef" BLOCK_SIZE="4096" TYPE="ext4"
/dev/sdb: UUID="9b34f3f3-e2ae-41ea-9143-642edfd89671" TYPE="swap"
/dev/sdc: UUID="17c85290-9b0c-42d5-9fbf-166cc94b8b82" BLOCK_SIZE="4096" TYPE="ext4"
/dev/sda: BLOCK_SIZE="4096" TYPE="ext4"

Pour rendre un montage permanent, on ajoute une ligne dans /etc/fstab. Exemple avec un UUID :

Fenêtre de terminal
UUID=f3c5ec06-c60b-40f8-9717-55fc44cbeaef /mnt/data ext4 defaults 0 2

Explication :

  • UUID : identifiant unique du système de fichiers,
  • /mnt/data : point de montage,
  • ext4 : type de FS,
  • defaults : options par défaut,
  • 0 : pas de dump,
  • 2 : ordre de vérification (1 pour /, 2 pour les autres FS).

Tester sans redémarrer :

Fenêtre de terminal
sudo mount -a

Le système de fichiers ext4 propose plusieurs options de montage qui permettent d’en ajuster le comportement selon les besoins : performance, intégrité des données, ou sécurité. Ces options peuvent être spécifiées à la commande mount, ou ajoutées dans /etc/fstab pour qu’elles s’appliquent automatiquement.

Voyons les plus courantes et leur utilité.

  • noatime : Cette option désactive la mise à jour de l’heure d’accès (atime) à chaque lecture de fichier. Cela réduit les écritures inutiles et améliore les performances, surtout pour les systèmes de fichiers très sollicités.
UUID=xxxx /mnt/data ext4 defaults,noatime 0 2
  • data=writeback | ordered | journal : Contrôle le mode de journalisation des données :
    • ordered (par défaut) : les données sont écrites avant les métadonnées (équilibre sécurité/performance),
    • writeback : performance maximale mais risque de corruption,
    • journal : journalisation complète, plus sûre mais plus lente.

Exemple pour un disque de test :

UUID=xxxx /mnt/test ext4 defaults,data=writeback 0 2
  • nodev : Interdit la création de fichiers spéciaux (périphériques) sur ce système de fichiers
  • nosuid : Empêche l’exécution de fichiers avec le bit SUID/SGID, limitant l’élévation de privilèges.
  • noexec: Interdit l’exécution de tout binaire présent sur la partition.

Ces options sont utiles sur des points de montage comme /tmp, /home ou des disques externes.

UUID=xxxx /tmp ext4 defaults,nodev,nosuid,noexec 0 2
  • errors=remount-ro : Si une erreur est détectée sur le système de fichiers, il est automatiquement remonté en lecture seule, ce qui évite une corruption supplémentaire.
UUID=xxxx /mnt/data ext4 defaults,errors=remount-ro 0 2
  • discard : Active la commande TRIM pour les disques SSD, libérant l’espace effacé.
UUID=xxxx /mnt/ssd ext4 defaults,discard 0 2
  • barrier=0 : Désactive les barrières d’écriture (à éviter sauf cas spécifiques, car cela peut compromettre l’intégrité des données).

Les options de montage ext4 sont puissantes : bien choisies, elles améliorent la performance, renforcent la sécurité et limitent les conséquences des incidents. Adapter ces options selon l’usage de chaque point de montage est une habitude que tout bon administrateur système devrait adopter.

OptionObjectifRecommandé pour
noatimeRéduire les écrituresSystèmes à forte lecture
data=orderedÉquilibre perf/sécuritéPar défaut, suffisant
nodevSécuriser le montage/home, /tmp, USB
nosuidÉviter l’élévation de privilègesPoints de montage utilisateurs
noexecInterdire l’exécutionPartitions non-systèmes
errors=remount-roPrévenir la corruptionTous les systèmes critiques

Même si ext4 est un système de fichiers robuste et journalisé, il peut arriver qu’une erreur se produise : coupure brutale, corruption de blocs, ou disque défectueux. Dans ces cas, l’outil à connaître absolument, c’est fsck, pour file system check. Il permet de détecter, vérifier et réparer les erreurs dans un système ext4.

On utilise fsck :

  • après un arrêt brutal ou une coupure d’alimentation,
  • si le système signale une erreur de lecture ou d’écriture,
  • si un système est monté en lecture seule automatiquement,
  • ou de manière préventive, selon un calendrier défini.

Important : fsck s’utilise uniquement sur un système de fichiers démonté. Ne jamais l’utiliser sur une partition montée en écriture.

Pour lancer une vérification :

Fenêtre de terminal
sudo fsck /dev/sdb1

Pour forcer une vérification même si le journal semble propre :

Fenêtre de terminal
sudo fsck -f /dev/sdb1

En ajoutant l’option -y, on demande à fsck de réparer automatiquement tout ce qui peut l’être, sans confirmation manuelle :

Fenêtre de terminal
sudo fsck -y /dev/sdb1

Utile en script ou lors d’une maintenance non interactive.

Le système peut être configuré pour lancer fsck à intervalles réguliers.

Afficher les paramètres :

Fenêtre de terminal
sudo tune2fs -l /dev/sdb1 | grep -i 'mount count\|check interval'

Modifier ces paramètres :

  • Tous les 30 montages :
Fenêtre de terminal
sudo tune2fs -c 30 /dev/sdb1
  • Tous les 3 mois :
Fenêtre de terminal
sudo tune2fs -i 3m /dev/sdb1
  1. Démarrer sur un live CD.
  2. Identifier la partition corrompue avec lsblk.
  3. Lancer :
Fenêtre de terminal
sudo fsck -y /dev/sda1
  1. Redémarrer normalement.

Surveillance et tuning du système de fichiers ext4

Section intitulée « Surveillance et tuning du système de fichiers ext4 »

Un système de fichiers, ce n’est pas une simple boîte de stockage. Même après sa création, il mérite qu’on le surveille, qu’on l’ajuste et qu’on le tune au besoin. Avec ext4, plusieurs outils permettent de suivre son état et d’optimiser son comportement selon l’usage réel du disque.

Afficher les paramètres du système de fichiers avec tune2fs

Section intitulée « Afficher les paramètres du système de fichiers avec tune2fs »

La commande tune2fs permet de consulter et modifier de nombreux réglages d’un système ext4.

Pour voir tous les paramètres :

Fenêtre de terminal
sudo tune2fs -l /dev/sda
tune2fs 1.47.0 (5-Feb-2023)
Filesystem volume name: <none>
Last mounted on: <not available>
Filesystem UUID: <none>
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: ext_attr sparse_super2 filetype extent flex_bg large_file huge_file extra_isize read-only
Default mount options: (none)
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 12800
Block count: 99438
Reserved block count: 0
Free blocks: 0
Free inodes: 1
First block: 0
Block size: 4096
Fragment size: 4096
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 3200
Inode blocks per group: 200
Flex block group size: 2147483648
Last mount time: n/a
Last write time: Thu Jan 1 01:00:00 1970
Mount count: 0
Maximum mount count: 0
Last checked: Thu Jan 1 01:00:00 1970
Check interval: 0 (<none>)
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256
Required extra isize: 24
Desired extra isize: 24

Parmi les infos utiles :

  • nombre de montages avant vérification (Mount count, Max mount count),
  • intervalle de vérification (Check interval),
  • nombre total d’inodes,
  • pourcentage réservé au superutilisateur,
  • présence ou non du journal.

Par défaut, ext4 réserve 5% de l’espace au superutilisateur (root). Sur un disque de données, ce n’est pas nécessaire.

Réduire ce pourcentage à 1% :

Fenêtre de terminal
sudo tune2fs -m 1 /dev/sdb1

Ou le supprimer complètement :

Fenêtre de terminal
sudo tune2fs -m 0 /dev/sdb1

Changer le nombre de montages entre chaque vérification automatique :

Fenêtre de terminal
sudo tune2fs -c 30 /dev/sdb1

Changer la durée entre deux vérifications forcées :

Fenêtre de terminal
sudo tune2fs -i 6m /dev/sdb1

(ici, tous les 6 mois)

  • Espace disque global :
Fenêtre de terminal
df -h
  • Utilisation des inodes :
Fenêtre de terminal
df -i
  • Répertoires les plus volumineux :
Fenêtre de terminal
du -sh /var/*

Accéder aux informations du système de fichiers avec dumpe2fs

Section intitulée « Accéder aux informations du système de fichiers avec dumpe2fs »

Cette commande donne des informations détaillées sur la structure interne du système ext4 :

Fenêtre de terminal
dumpe2fs 1.47.0 (5-Feb-2023)
Filesystem volume name: <none>
Last mounted on: <not available>
Filesystem UUID: <none>
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: ext_attr sparse_super2 filetype extent flex_bg large_file huge_file extra_isize read-only
Default mount options: (none)
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 12800
Block count: 99438
Reserved block count: 0
Free blocks: 0
Free inodes: 1
First block: 0
Block size: 4096
Fragment size: 4096
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 3200
Inode blocks per group: 200
Flex block group size: 2147483648
Last mount time: n/a
Last write time: Thu Jan 1 01:00:00 1970
Mount count: 0
Maximum mount count: 0
Last checked: Thu Jan 1 01:00:00 1970
Check interval: 0 (<none>)
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256
Required extra isize: 24
Desired extra isize: 24
Groupe 0 : (Blocs 0-32767)
superbloc Primaire à 0, Descripteurs de groupes à 1-1
Bitmap de blocs à 99430 (bg #3 + 1126)
Bitmap d'i-noeuds à 99431 (bg #3 + 1127)
Table d'i-noeuds à 98630-98829 (bg #3 + 326)
0 blocs libres, 0 i-noeuds libres, 339 répertoires
Blocs libres :
I-noeuds libres :
Groupe 1 : (Blocs 32768-65535)
Bitmap de blocs à 99432 (bg #3 + 1128)
Bitmap d'i-noeuds à 99433 (bg #3 + 1129)
Table d'i-noeuds à 98830-99029 (bg #3 + 526)
0 blocs libres, 0 i-noeuds libres, 357 répertoires
Blocs libres :
I-noeuds libres :
Groupe 2 : (Blocs 65536-98303)
Bitmap de blocs à 99434 (bg #3 + 1130)
Bitmap d'i-noeuds à 99435 (bg #3 + 1131)
Table d'i-noeuds à 99030-99229 (bg #3 + 726)
0 blocs libres, 0 i-noeuds libres, 498 répertoires
Blocs libres :
I-noeuds libres :
Groupe 3 : (Blocs 98304-99437)
Bitmap de blocs à 99436 (+1132)
Bitmap d'i-noeuds à 99437 (+1133)
Table d'i-noeuds à 99230-99429 (+926)
0 blocs libres, 1 i-noeuds libres, 259 répertoires
Blocs libres :
I-noeuds libres : 12800

On peut y voir :

  • les emplacements des superblocs de secours,
  • les blocs de journalisation,
  • la configuration des groupes de blocs,
  • etc.

Certains réglages peuvent être modifiés sans reformater :

  • activer ou désactiver certaines options ext4 (has_journal, extents, dir_index, etc.),
  • changer le label :
Fenêtre de terminal
sudo e2label /dev/sdb1 nouvelle_etiquette

Ext4 journalise les erreurs dans dmesg et /var/log/syslog.

Pour détecter les soucis :

Fenêtre de terminal
dmesg | grep ext4

Ou :

Fenêtre de terminal
journalctl -k | grep ext4

Même si ext4 est un système de fichiers fiable et simple à prendre en main, il y a plusieurs bonnes pratiques à adopter pour tirer le meilleur parti de ses fonctionnalités. Ces pratiques permettent d’éviter les problèmes, d’optimiser les performances et de garantir une maintenance fluide dans le temps.

Par défaut, mkfs.ext4 utilise des blocs de 4 Ko, ce qui convient à la plupart des cas. Mais si on sait que le disque va contenir beaucoup de petits fichiers ou à l’inverse de très gros fichiers, on peut ajuster :

  • blocs plus petits = gain d’espace pour des millions de petits fichiers,
  • blocs plus grands = meilleures performances pour des fichiers volumineux.

À définir au moment du formatage :

Fenêtre de terminal
sudo mkfs.ext4 -b 4096 /dev/sdb1

Par défaut, ext4 réserve 5 % de l’espace disque au superutilisateur. Cela peut être utile sur / pour éviter un plantage si un utilisateur remplit le disque, mais sur une partition de données, c’est souvent superflu.

On peut le désactiver :

Fenêtre de terminal
sudo tune2fs -m 0 /dev/sdb1

Ou le réduire :

Fenêtre de terminal
sudo tune2fs -m 1 /dev/sdb1

On peut améliorer les performances ou renforcer la sécurité avec des options comme :

  • noatime : évite d’écrire à chaque lecture de fichier,
  • data=ordered : mode par défaut, bon compromis sécurité/performance,
  • errors=remount-ro : empêche la corruption en cas de problème.

Exemple dans /etc/fstab :

UUID=xxxx /mnt/data ext4 defaults,noatime,errors=remount-ro 0 2

Ext4 stocke automatiquement plusieurs copies du superbloc à différents emplacements du disque. En cas de corruption du principal, ces copies permettent une récupération.

On peut les visualiser avec :

Fenêtre de terminal
sudo dumpe2fs /dev/sdb1 | grep -i superblock

Et les utiliser en cas de problème avec fsck :

Fenêtre de terminal
sudo fsck -b 32768 /dev/sdb1

Même si le journal réduit le besoin de fsck, il reste utile de programmer une vérification complète périodique.

Exemple : tous les 30 montages ou tous les 6 mois :

Fenêtre de terminal
sudo tune2fs -c 30 -i 6m /dev/sdb1

Ext4 gère bien la fragmentation, mais dans certains cas (volumes très remplis ou fichiers souvent modifiés), cela peut devenir un souci. L’outil e4defrag permet d’analyser et de défragmenter :

Fenêtre de terminal
sudo e4defrag -c /mnt/data
sudo e4defrag /mnt/data

Comme pour tout élément critique d’un système, il est bon de documenter :

  • les UUID et labels utilisés,
  • les options de montage choisies,
  • les points de sauvegarde,
  • les paramètres modifiés avec tune2fs.

Un simple fichier texte dans /root ou /etc peut suffire pour ne pas chercher en urgence le jour où un problème survient.

En appliquant ces bonnes pratiques spécifiques à ext4, on renforce la fiabilité, la performance et la résilience de l’environnement. Ext4 ne demande pas de supervision constante, mais il mérite une configuration soignée. Un peu d’attention à l’installation évite bien des complications plus tard.

Contrôle de connaissances

Validez vos connaissances avec ce quiz interactif

10 questions
5 min.
80% requis

Informations

  • Le chronomètre démarre au clic sur Démarrer
  • Questions à choix multiples, vrai/faux et réponses courtes
  • Vous pouvez naviguer entre les questions
  • Les résultats détaillés sont affichés à la fin

Lance le quiz et démarre le chronomètre

Le système de fichiers ext4 reste aujourd’hui une valeur sûre pour toute administration Linux. Facile à mettre en place, robuste, bien documenté et compatible avec tous les outils standards, il offre un excellent compromis entre performance, fiabilité et simplicité de gestion.

On a vu dans ce guide comment :

  • comprendre ses fonctionnalités internes (journalisation, extents, options de montage),
  • le créer proprement sur une partition ou un volume logique,
  • le monter manuellement ou automatiquement avec les bonnes options,
  • le vérifier, le réparer et même le tuner finement selon les usages.

Ext4 n’offre peut-être pas toutes les fonctionnalités avancées de Btrfs ou ZFS, mais pour la grande majorité des cas, c’est un choix solide et pragmatique. Dans les chapitres suivants, on explorera d’autres systèmes de fichiers comme XFS et Btrfs, afin de comparer leurs comportements, leurs cas d’usage et leurs outils d’administration spécifiques.