Système de fichiers volumineux Le système de fichiers ext4 peut prendre en charge des volumes d’une taille allant jusqu’à 1 exbibyte (EiB) et des fichiers uniques d’une taille allant jusqu’à 16 tebibytes (TiB) avec la taille de bloc standard de 4 KiB. Les limites de taille maximale des fichiers, des répertoires et du système de fichiers augmentent au moins proportionnellement à la taille de bloc du système de fichiers, jusqu’à la taille de bloc maximale de 64 KiB disponible sur les CPU ARM et PowerPC/Power ISA. Extents Les extents remplacent le schéma traditionnel de mappage de blocs utilisé par ext2 et ext3. Une étendue est une gamme de blocs physiques contigus, ce qui améliore les performances des fichiers volumineux et réduit la fragmentation. Un seul extent dans ext4 peut mapper jusqu’à 128 MiB d’espace contigu avec une taille de bloc de 4 KiB. Il peut y avoir quatre extents stockés directement dans l’inode. Quand il y a plus de quatre extents à un fichier, le reste des extents sont indexés dans un arbre. Rétrocompatibilité ext4 est rétrocompatible avec ext3 et ext2, ce qui permet de monter ext3 et ext2 comme ext4. Cela améliorera légèrement les performances, car certaines nouvelles fonctionnalités de l’implémentation ext4 peuvent également être utilisées avec ext3 et ext2, comme le nouvel algorithme d’allocation de blocs, sans affecter le format sur le disque. ext3 est partiellement compatible avec ext4. Pratiquement, ext4 ne montera pas comme un système de fichiers ext3 hors de la boîte, à moins que certaines nouvelles fonctionnalités soient désactivées lors de sa création, comme ^extent
, ^flex_bg
, ^huge_file
, ^uninit_bg
, ^dir_nlink
et ^extra_isize
. Pré-affectation persistante ext4 peut pré-allouer de l’espace sur le disque pour un fichier. Pour faire cela sur la plupart des systèmes de fichiers, des zéros seraient écrits au fichier lors de sa création. Dans ext4 (et certains autres systèmes de fichiers tels que XFS) fallocate()
, un nouvel appel système dans le noyau Linux, peut être utilisé. L’espace alloué serait garanti et probablement contigu. Cette situation a des applications pour le streaming média et les bases de données. Allocation retardée ext4 utilise une technique de performance appelée allocate-on-flush, également connue sous le nom d’allocation retardée. C’est-à-dire, ext4 retarde l’allocation de bloc jusqu’à ce que les données soient vidées sur le disque. (En revanche, certains systèmes de fichiers allouent les blocs immédiatement, même lorsque les données vont dans un cache d’écriture). L’allocation retardée améliore les performances et réduit la fragmentation en allouant efficacement de plus grandes quantités de données à la fois. Nombre illimité de sous-répertoires ext4 ne limite pas le nombre de sous-répertoires dans un seul répertoire, sauf par la limite de taille inhérente du répertoire lui-même. (Dans ext3 un répertoire peut avoir au plus 32.000 sous-répertoires.) Pour permettre de plus grands répertoires et la performance continue, ext4 dans Linux 2.6.23 et plus tard active des index HTree (une version spécialisée d’un B-tree) par défaut, qui permet à des répertoires jusqu’à approximativement 10-12 millions d’entrées d’être stockées dans l’index HTree à 2 niveaux et la taille limite de répertoire de 2 GB pour la taille de bloc de 4 KiB, selon la longueur de nom de fichier. Dans Linux 4.12 et plus, la fonctionnalité largedir
a activé un HTree à 3 niveaux et des tailles de répertoire supérieures à 2 Go, permettant environ 6 milliards d’entrées dans un seul répertoire. Sommes de contrôle du journal ext4 utilise des sommes de contrôle dans le journal pour améliorer la fiabilité, puisque le journal est l’un des fichiers les plus utilisés du disque. Cette fonctionnalité a un avantage secondaire : elle peut éviter en toute sécurité une attente d’E/S sur le disque pendant la journalisation, ce qui améliore légèrement les performances. La somme de contrôle du journal a été inspirée par un article de recherche de l’Université du Wisconsin, intitulé IRON File Systems (plus précisément, la section 6, appelée « sommes de contrôle des transactions »), avec des modifications dans le cadre de la mise en œuvre des transactions composées effectuées par le système de fichiers IRON (proposé à l’origine par Sam Naghshineh lors du sommet RedHat). Somme de contrôle des métadonnées Depuis le noyau Linux 3.5 publié en 2012 Vérification plus rapide du système de fichiers Dans ext4, les groupes de blocs non alloués et les sections de la table des inodes sont marqués comme tels. Cela permet à e2fsck de les ignorer entièrement et de réduire considérablement le temps nécessaire à la vérification du système de fichiers. Linux 2.6.24 met en œuvre cette fonctionnalité.
Allocateur multiblocs Lorsque ext3 ajoute à un fichier, il appelle l’allocateur de blocs, une fois pour chaque bloc. Par conséquent, s’il y a plusieurs écrivains simultanés, les fichiers peuvent facilement devenir fragmentés sur le disque. Cependant, ext4 utilise l’allocation différée, ce qui lui permet de mettre en mémoire tampon les données et d’allouer des groupes de blocs. Par conséquent, l’allocateur multibloc peut faire de meilleurs choix pour allouer les fichiers de manière contiguë sur le disque. L’allocateur multibloc peut également être utilisé lorsque les fichiers sont ouverts en mode O_DIRECT. Cette fonctionnalité n’affecte pas le format du disque. Timestamps améliorés Comme les ordinateurs deviennent plus rapides en général, et comme Linux devient plus utilisé pour les applications critiques, la granularité des timestamps basés sur la seconde devient insuffisante. Pour résoudre ce problème, ext4 fournit des horodatages mesurés en nanosecondes. En outre, 2 bits du champ de l’horodatage étendu sont ajoutés aux bits les plus significatifs du champ des secondes des horodatages pour reporter le problème de l’année 2038 de 408 ans supplémentaires. ext4 ajoute également un support pour les horodatages basés sur l’heure de création. Mais, comme le souligne Theodore Ts’o, s’il est facile d’ajouter un champ supplémentaire de date de création dans l’inode (permettant ainsi techniquement la prise en charge de ces horodatages dans ext4), il est plus difficile de modifier ou d’ajouter les appels système nécessaires, comme stat() (qui nécessiterait probablement une nouvelle version) et les diverses bibliothèques qui en dépendent (comme glibc). Ces changements nécessiteront la coordination de nombreux projets. Par conséquent, la date de création stockée par ext4 n’est actuellement disponible que pour les programmes utilisateurs sous Linux via l’APIstatx()
. Quotas de projet La prise en charge des quotas de projet a été ajoutée dans le noyau Linux 4.4 le 8 janvier 2016. Cette fonctionnalité permet d’attribuer des limites de quotas de disque à un ID de projet particulier. L’ID de projet d’un fichier est un numéro de 32 bits stocké sur chaque fichier et est hérité par tous les fichiers et sous-répertoires créés sous un répertoire parent avec un ID de projet attribué. Cela permet d’attribuer des limites de quotas à une arborescence de sous-répertoires particulière, indépendamment des autorisations d’accès au fichier, comme les quotas d’utilisateurs et de projets qui dépendent de l’UID et du GID. Bien que cela soit similaire à un quota de répertoire, la principale différence est que le même ID de projet peut être attribué à plusieurs répertoires de premier niveau et n’est pas strictement hiérarchique. Cryptage transparent La prise en charge du cryptage transparent a été ajoutée dans le noyau Linux 4.1 en juin 2015. Initialisation paresseuse La fonctionnalité lazyinit permet de nettoyer les tables d’inodes en arrière-plan, accélérant l’initialisation lors de la création d’un nouveau système de fichiers ext4. Elle est disponible depuis 2010 dans la version 2.6.37 du noyau Linux. Barrières d’écriture ext4 active les barrières d’écriture par défaut. Cela garantit que les métadonnées du système de fichiers sont correctement écrites et ordonnées sur le disque, même lorsque les caches d’écriture perdent de la puissance. Cela a un coût en termes de performance, en particulier pour les applications qui utilisent fortement fsync ou qui créent et suppriment de nombreux petits fichiers. Pour les disques avec un cache d’écriture soutenu par une batterie, la désactivation des barrières (option ‘barrier=0’) peut améliorer les performances en toute sécurité.