Extent pour macOS
Obtenir
Un guide des disques Linux

ext4, ext3 et ext2, expliqués.

Ce que sont les systèmes de fichiers Linux, comment ils disposent les fichiers sur un disque, ce que protège le journal, quelles fonctions et limites comptent aujourd’hui, et comment ouvrir un disque ext4 sur un Mac ou un PC Windows.

Dernière vérification

Ce que sont ext2, ext3 et ext4

ext2, ext3 et ext4 sont les deuxième, troisième et quatrième systèmes de fichiers étendus (extended file systems) – les formats que Linux utilise pour ses propres disques depuis plus de trente ans. Un système de fichiers décide comment les fichiers, dossiers, noms, droits et dates sont disposés sur un disque, pour que tout ordinateur qui connaît le format puisse les retrouver.

Aujourd’hui, c’est l’ext4 que vous rencontrez. Debian, Ubuntu et Raspberry Pi OS formatent leurs disques avec lui, c’est le choix habituel pour le disque de données d’un serveur Linux, et Google y a fait passer les téléphones Android en 2010. Une clé USB ou une carte SD préparée sous Linux est presque toujours en ext4.

Les trois forment une famille plutôt que trois formats différents. Chaque génération a gardé la structure de la précédente en l’enrichissant ; c’est pourquoi les noyaux Linux actuels lisent et écrivent les trois avec un seul pilote ext4.

Un bref historique

  1. 1992

    ext, le système de fichiers étendu

    Rémy Card l’écrit pour Linux 0.96c afin de remplacer le système de fichiers Minix des débuts de Linux, dont les limites de taille de disque et de noms de fichiers étaient déjà trop étroites.

  2. 1993

    ext2

    Une refonte en janvier 1993 pour Linux 0.99, reprenant des idées du Fast File System de BSD : le disque découpé en groupes de blocs, des dates distinctes d’accès, de changement et de modification. Il reste la norme de Linux jusqu’à la fin de la décennie.

  3. 2001

    ext3 ajoute un journal

    L’ext3 de Stephen Tweedie entre dans le noyau principal avec Linux 2.4.15 en novembre 2001. La structure est celle d’ext2 : un disque ext2 devient ext3 par l’ajout d’un journal, mais un plantage n’impose plus une longue vérification de tout le disque.

  4. 2006

    Début des travaux sur ext4

    Theodore Ts’o annonce le projet le 28 juin 2006, en s’appuyant sur des extensions développées pour le système de fichiers en cluster Lustre. Une version de développement, ext4dev, apparaît dans Linux 2.6.19.

  5. 2008

    ext4 est déclaré stable

    Linux 2.6.28, publié le 25 décembre 2008, apporte les extents, des numéros de bloc sur 64 bits, l’allocation différée et des dates à la nanoseconde.

  6. 2013–2021

    Sommes de contrôle, chiffrement, casse

    Les noyaux suivants ajoutent les données en ligne (3.8), les sommes de contrôle des métadonnées (3.18), le chiffrement (4.1), les dossiers insensibles à la casse (5.2), verity (5.4), les fast commits (5.10) et l’orphan file (5.15).

Comment ext4 organise un disque

Les blocs. ext4 attribue l’espace par blocs, le plus souvent de 4 Kio ; la taille est choisie au formatage et peut aller de 1 Kio à 64 Kio. Même un fichier d’un octet occupe un bloc entier, sauf si le disque utilise les données en ligne.

Les groupes de blocs. Le disque est découpé en groupes de blocs – avec des blocs de 4 Kio, 32 768 blocs soit 128 Mio chacun. Chaque groupe a deux bitmaps, l’une pour ses blocs occupés et l’autre pour ses inodes, plus sa part de la table des inodes. Garder les données d’un fichier près de son inode évite à la tête du disque de voyager. La fonction flex_bg regroupe les bitmaps et tables d’inodes de plusieurs groupes, pour que les gros fichiers puissent franchir les limites de groupe d’un seul tenant.

Le superbloc. La première chose sur le disque après 1 Kio de marge : la taille du système de fichiers, sa taille de bloc, les fonctions utilisées et s’il a été démonté proprement. Des copies se trouvent dans plusieurs groupes de blocs, si bien qu’un superbloc endommagé peut être restauré depuis une sauvegarde.

Les inodes. Chaque fichier et chaque dossier a un inode, de 256 octets par défaut. Il contient le propriétaire, les droits, les dates, la taille et l’emplacement des données – tout sauf le nom. Le nombre d’inodes est fixé au formatage : un disque rempli de minuscules fichiers peut manquer d’inodes alors qu’il lui reste de la place.

Les dossiers. Un dossier est un fichier spécial qui associe des noms à des numéros d’inode. Un nom peut atteindre 255 octets. Les petits dossiers sont une simple liste ; les grands reçoivent un index, un arbre haché (dir_index, « htree »), pour que trouver un nom parmi cent mille demande quelques lectures de blocs et non un parcours complet.

Des extents au lieu de listes de blocs. ext2 et ext3 notent chaque bloc d’un fichier un par un : douze pointeurs directs dans l’inode, puis des blocs remplis de pointeurs, des pointeurs vers ceux-ci et encore des pointeurs vers ces derniers. ext4 note des plages. Un extent dit « tant de blocs, à partir d’ici », jusqu’à 32 768 blocs (128 Mio avec des blocs de 4 Kio) par entrée. Quatre extents tiennent dans l’inode lui-même ; un fichier plus long et plus fragmenté reçoit un arbre d’extents jusqu’à cinq niveaux. Un gros fichier contigu se décrit ainsi en une poignée d’entrées au lieu de milliers.

Les petits fichiers peuvent loger dans leur inode. Avec la fonction inline_data, jusqu’à 60 octets d’un fichier sont stockés dans l’inode lui-même, et un peu plus dans son espace d’attributs étendus, sans utiliser aucun bloc.

Le journal et ce qu’il protège

Modifier un système de fichiers n’est jamais une seule écriture. Créer un fichier touche une bitmap, un inode, un dossier et un compteur dans le descripteur de groupe. Si le courant coupe entre deux de ces écritures, le disque reste à moitié modifié – et ext2 ne pouvait le découvrir qu’en vérifiant tout le disque avec e2fsck, ce qui prenait longtemps sur un gros disque.

ext3 et ext4 tiennent un journal : une zone réservée du disque, en général l’inode 8, où les changements sont écrits avant d’avoir lieu. Un changement passe par trois étapes. D’abord, les nouveaux blocs vont dans le journal. Puis un enregistrement de commit marque la transaction comme complète. Ensuite seulement, les blocs sont écrits à leur vraie place – le checkpoint. Si le courant coupe à n’importe quel moment, le montage suivant rejoue le journal : les transactions arrivées à leur commit sont réappliquées, et tout ce qui n’en a pas est abandonné. Le système de fichiers redevient cohérent en quelques secondes.

Les trois modes de données du journal d’ext3 et d’ext4
ModeCe qui passe par le journalAprès un plantage
data=ordered (par défaut)Les métadonnées seulement, mais les données d’un fichier sont écrites avant que les métadonnées qui pointent vers elles soient validées.La structure est cohérente ; un fichier en cours d’écriture peut contenir des données plus anciennes.
data=journalLes métadonnées et les données des fichiers.Le plus sûr et le plus lent : les données arrivées à un commit sont là.
data=writebackLes métadonnées seulement, sans ordre pour les données.La structure est cohérente, mais un fichier modifié récemment peut montrer un contenu périmé.

Le journal n’est pas une sauvegarde. Il garde la structure du système de fichiers intacte et garantit ce qui a été validé ; il ne ramène pas un changement qui était en route et ne protège pas d’un disque défaillant. ext4 peut aussi écrire des fast commits (Linux 5.10) : de petits enregistrements des seules métadonnées modifiées entre deux commits complets, pour rendre moins coûteux les appels fréquents à fsync.

Une carte retirée d’un Raspberry Pi en marche est exactement ce cas. Son journal contient encore des transactions validées qui n’ont jamais atteint leur place, et le superbloc indique « needs recovery ». Linux le rejoue au montage suivant ; un logiciel qui lit la carte ailleurs doit le rejouer aussi, sinon il montre les fichiers tels qu’ils étaient avant ces transactions.

ext2 vs ext3 vs ext4

Les trois générations côte à côte (blocs de 4 Kio)
ext2ext3ext4
Dans Linux depuis1993 (0.99)2001 (2.4.15)2008 (2.6.28)
JournalNonOuiOui, avec fast commits depuis Linux 5.10
Façon de noter les blocs d’un fichierListes de blocsListes de blocsExtents
Plus grand fichier2 Tio2 Tio16 Tio
Plus grand système de fichiers16 Tio16 Tio1 Eio en pratique (64 bits)
DatesSecondes, jusqu’en 2038 (inodes de 128 octets)Secondes, jusqu’en 2038 (inodes de 128 octets)Nanosecondes, jusqu’en 2446
Grands dossiers indexésNonOui (dir_index)Oui, trois niveaux avec large_dir
Sommes de contrôle des métadonnéesNonNonOui (metadata_csum)

En pratique : ext4 pour tout ce qui est nouveau. ext3 n’a plus de raison d’être sur un disque neuf, et ext2 survit là où l’on ne veut pas de journal – une petite partition de démarrage, ou une mémoire flash à écrire le moins possible. Un disque ext3 se convertit en ext4 sur place, mais les fichiers déjà présents gardent leurs listes de blocs jusqu’à ce qu’ils soient réécrits.

Les fonctions sur les vrais disques

Plutôt qu’un numéro de version, un disque ext porte des indicateurs de fonctions dans son superbloc, et chacun appartient à l’une de trois catégories. Une fonction compatible peut être ignorée par un logiciel qui ne la connaît pas. Une fonction compatible en lecture seule signifie qu’un tel logiciel peut lire le disque mais pas y écrire. Une fonction incompatible signifie qu’il ne doit pas y toucher du tout. C’est grâce à cette règle qu’un outil plus ancien refuse un disque plus récent au lieu de l’abîmer.

Fonctions ext4 courantes
FonctionCe qu’elle faitDans Linux depuis
extentFichiers décrits par des extents au lieu de listes de blocs.2.6.28
64bitNuméros de bloc sur plus de 32 bits, pour les systèmes de fichiers de plus de 16 Tio.2.6.28
flex_bgMétadonnées de plusieurs groupes de blocs regroupées.2.6.28
metadata_csumUne somme de contrôle CRC32C sur toutes les métadonnées, pour détecter les dégâts.3.18
metadata_csum_seedLa graine des sommes de contrôle stockée dans le superbloc, pour pouvoir changer l’UUID.4.4
inline_dataMinuscules fichiers stockés dans leur inode.3.8
encryptChiffrement par dossier du contenu et des noms des fichiers.4.1
casefoldDossiers qui ignorent majuscules et minuscules dans les noms.5.2
verityFichiers en lecture seule dont le contenu est vérifié par un arbre de hachage.5.4
fast_commitPetits enregistrements du journal entre deux commits complets.5.10
orphan_fileSuivi plus rapide des fichiers supprimés alors qu’ils étaient encore ouverts.5.15

Où on les trouve : le mke2fs actuel active metadata_csum et 64bit par défaut, et e2fsprogs 1.47 a ajouté orphan_file et metadata_csum_seed, que certaines distributions désactivent pour que les anciens chargeurs d’amorçage puissent encore lire le disque. L’image de Raspberry Pi OS est créée sans 64bit. Un Steam Deck formate ses cartes microSD avec casefold, et Android utilise encrypt.

Pour savoir quelles fonctions utilise un disque, lisez son superbloc sous Linux avec sudo dumpe2fs -h /dev/sdX1 et regardez la ligne « Filesystem features ».

Limites

Limites d’ext4 selon la taille de bloc (documentation du noyau Linux)
Taille de blocGroupe de blocsPlus grand fichierPlus grand système de fichiers (32 bits)Plus grand système de fichiers (64 bits)
1 Kio8 Mio4 Tio4 Tio16 Zio
2 Kio32 Mio8 Tio8 Tio32 Zio
4 Kio (courant)128 Mio16 Tio16 Tio64 Zio
64 Kio32 Gio256 Tio256 Tio1 Yio

Les valeurs 64 bits indiquent ce que le format peut adresser ; le format des extents et les outils limitent les vrais systèmes de fichiers à environ 1 Eio. D’autres limites comptent plus souvent :

  • Un nom de fichier ou de dossier : 255 octets – moins de caractères dans les écritures qui en demandent plus d’un octet par caractère.
  • Liens physiques vers un même fichier : 65 000, donc au plus 64 998 sous-dossiers dans un dossier.
  • Dates : précision à la nanoseconde, valables jusqu’en mai 2446 avec des inodes de 256 octets ; les inodes de 128 octets s’arrêtent en janvier 2038.
  • Inodes : fixés au formatage, un par fichier ou dossier, environ quatre milliards au plus.

Vérifier et réparer un disque ext4

Vérifier et réparer les systèmes de fichiers ext est le travail d’e2fsck, fourni avec e2fsprogs sous Linux. Il travaille sur un disque non monté ; le lancer sur un système de fichiers monté peut l’endommager.

sudo dumpe2fs -h /dev/sdX1      # superbloc : fonctions, état, dernière vérification
sudo e2fsck -fn /dev/sdX1        # vérification complète en lecture seule : signale, ne change rien
sudo e2fsck -f /dev/sdX1         # vérification complète avec réparations, demande avant chacune
sudo tune2fs -l /dev/sdX1        # le même résumé du superbloc
sudo mkfs.ext4 -L DATA /dev/sdX1 # un nouveau système de fichiers ext4 (efface la partition)

Remplacez /dev/sdX1 par la partition concernée – lsblk les liste. Après un arrêt brutal, il n’y a généralement rien à faire : le montage suivant rejoue le journal. Une vérification complète vaut la peine quand Linux a noté une erreur dans le superbloc, quand des sommes de contrôle échouent, ou quand le disque était dans un appareil qui a planté à plusieurs reprises.

ext4 et les autres systèmes de fichiers

Où chaque système de fichiers est chez lui, et qui le lit sans logiciel supplémentaire
Système de fichiersProtection contre les plantagesChez lui surmacOSWindows
ext4JournalLinux, AndroidNonNon
BtrfsCopy-on-write, sommes de contrôle aussi sur les donnéesLinux (par défaut sur Fedora)NonNon
XFSJournalServeurs LinuxNonNon
APFSCopy-on-writeMac, iPhoneOuiNon
NTFSJournalWindowsLecture seuleOui
exFATAucuneClés USB, cartes SD, appareils photoOuiOui

Pour un disque qui circule entre Linux, Mac et Windows sans rien installer, exFAT est le terrain commun – au prix des droits Linux, des propriétaires, des liens symboliques et de toute protection si le câble est retiré en pleine écriture. ext4 conserve tout cela, et demande un logiciel supplémentaire sur Mac comme sous Windows.

Lire l’ext4 sur Mac ou sous Windows

macOS ne lit aucun des systèmes de fichiers ext. Branchez un disque Linux et macOS indique qu’il ne peut pas lire le disque, en proposant Initialiser, Ignorer et Éjecter. Initialiser efface le disque ; choisissez Ignorer ou Éjecter.

Depuis macOS 15.4, FSKit d’Apple permet à un système de fichiers de tourner comme une simple extension d’app, hors du noyau, comme les systèmes de fichiers récents d’Apple eux-mêmes. C’est la voie qui ne demande ni extension de noyau ni sécurité abaissée. Les autres voies sont une extension de noyau, une couche en espace utilisateur comme FUSE, ou une machine virtuelle Linux à laquelle on confie le disque.

Sous Windows 11, WSL 2 peut monter un disque Linux : wsl --mount \\.\PHYSICALDRIVE2 --partition 1 --type ext4 dans un terminal administrateur, après quoi les fichiers apparaissent dans l’Explorateur sous \\wsl$\ et dans le dossier /mnt/wsl de la distribution. Cela ne marche qu’avec des disques reliés directement au PC, pas avec des disques USB ni des lecteurs de cartes SD ; ceux-ci doivent d’abord être transmis à WSL par USB/IP.

Comment fonctionne un système de fichiers FSKit dans Extent : l’extension indique à macOS où se trouve un fichier sur le disque, et les données du fichier circulent directement entre le disque et macOS.

Extent est notre propre système de fichiers FSKit pour ext2, ext3 et ext4 sur macOS 27. Un disque Linux apparaît dans le Finder comme n’importe quel autre ; la lecture est gratuite, et l’écriture sur ext4 passe par le journal du disque, comme sous Linux. Une carte retirée d’un Pi sans arrêt est lue avec son journal rejoué en mémoire.

Questions fréquentes

ext4 est-il meilleur qu’ext3 ?

Pour un disque neuf, oui. Il décrit les fichiers par des extents au lieu de listes de blocs, gère des fichiers jusqu’à 16 Tio et des systèmes de fichiers bien plus grands, garde des dates à la nanoseconde au-delà de 2038, protège ses métadonnées par des sommes de contrôle et attribue l’espace en plages plus longues et moins fragmentées. Linux lit de toute façon les disques ext3 avec le pilote ext4.

Un Mac peut-il lire l’ext4 ?

Pas tout seul : macOS ne lit aucun système ext et propose d’initialiser – donc d’effacer – un disque Linux. Il faut une extension de système de fichiers ; sur macOS 27, Extent monte ext2, ext3 et ext4 dans le Finder grâce à FSKit d’Apple.

Windows peut-il lire l’ext4 ?

Pas l’Explorateur à lui seul. Sous Windows 11, WSL 2 monte un disque Linux relié directement avec wsl --mount, et ses fichiers s’ouvrent ensuite dans l’Explorateur sous \\wsl$\. Les disques USB et lecteurs de cartes SD doivent d’abord être transmis à WSL par USB/IP.

Une clé USB doit-elle être en ext4 ou en exFAT ?

En exFAT si elle doit fonctionner sur n’importe quel ordinateur sans logiciel supplémentaire. En ext4 si elle sert surtout avec Linux ou un Raspberry Pi, ou si les droits, les liens symboliques et un journal comptent – le journal garde le système de fichiers cohérent quand la clé est retirée en pleine écriture.

Que se passe-t-il si je débranche un disque ext4 sans l’éjecter ?

Le journal garde le système de fichiers cohérent. Les changements arrivés à un commit sont rejoués au montage suivant ; ceux qui étaient en route sont perdus. D’ici là, le superbloc indique qu’une récupération est nécessaire.

Comment savoir quelles fonctions utilise mon disque ext4 ?

Sous Linux, sudo dumpe2fs -h /dev/sdX1 ou sudo tune2fs -l /dev/sdX1, à la ligne « Filesystem features ». Sur Mac, Extent indique les principales – journal, extents, 64 bits, sommes de contrôle – dans le détail d’un disque.

Peut-on convertir ext3 en ext4 ?

Oui, sur place avec tune2fs puis une vérification par e2fsck, sans reformater. Les fichiers déjà présents gardent leurs listes de blocs ; seuls les fichiers écrits ensuite utilisent des extents. Sauvegardez le disque d’abord.

Quelle est la taille maximale d’un fichier sur ext4 ?

16 Tio avec les blocs habituels de 4 Kio, jusqu’à 256 Tio avec des blocs de 64 Kio. Le plus grand système de fichiers est d’environ 1 Eio avec la fonction 64bit.

Des disques Linux sur Mac, lus et écrits.

Extent monte ext2, ext3 et ext4 dans le Finder sur macOS 27. La lecture est gratuite ; l’écriture sur ext4 est un achat unique.

Sources

Les faits de cette page ont été vérifiés dans ces documents (en anglais).