Ext4 (Français)
Extrait de Ext4 - Linux Kernel Newbies :
- Ext4 est l'évolution du système de fichiers Linux le plus utilisé, Ext3. A bien des égards, Ext4 est une amélioration plus profonde d'Ext3 que Ext3 ne l'était d'Ext2. Ext3 consistait principalement à ajouter la journalisation à Ext2, mais Ext4 modifie des structures de données importantes du système de fichiers telles que celles destinées à stocker les données des fichiers. Le résultat est un système de fichiers avec une conception améliorée, de meilleures performances, une meilleure fiabilité et de meilleures fonctionnalités.
Créer un nouveau système de fichiers ext4
Pour formater une partition, faites :
# mkfs.ext4 /dev/partition
- Consultez mke2fs(8) pour plus d'options ; modifiez
/etc/mke2fs.conf
pour afficher/configurer les options par défaut. - Si elles sont prises en charge, vous pouvez vouloir activer les métadonnées de contrôle.
Ratio d'octets par noeud
Extrait de mke2fs(8) :
- mke2fs crée un inode pour chaque bytes-per-inode d'espace sur le disque. Plus le ratio bytes-per-inode est élevé, moins il y aura d'inodes créés.
La création d'un nouveau fichier, répertoire, lien symbolique, etc. nécessite au moins un inode libre. Si le nombre d'inodes est trop faible, aucun fichier ne peut être créé sur le système de fichiers, même s'il reste de la place.
Comme il n'est pas possible de modifier le ratio octets par inode ou le nombre d'inodes après la création du système de fichiers, mkfs.ext4
utilise par défaut un ratio assez faible d'un inode tous les 16384 octets (16 KiB) pour éviter cette situation.
Cependant, pour les partitions dont la taille est de l'ordre de centaines ou de milliers de Go et dont la taille moyenne des fichiers est de l'ordre du mégaoctet, le nombre d'inodes est généralement beaucoup trop élevé car le nombre de fichiers créés n'atteint jamais le nombre d'inodes.
Il en résulte un gaspillage d'espace disque, car tous ces inodes inutilisés occupent chacun 256 octets sur le système de fichiers (ceci est également défini dans /etc/mke2fs.conf
mais ne devrait pas être modifié). 256 * plusieurs millions = pas mal de gigaoctets gaspillés en inodes inutilisés.
Cette situation peut être évaluée en comparant les chiffres de Use%
et IUse%
fournis par df
et df -i
:
$ df -h /home
Filesystem Size Used Avail Use% Mounted on /dev/mapper/lvm-home 115G 56G 59G 49% /home
$ df -hi /home
Filesystem Inodes IUsed IFree IUse% Mounted on /dev/mapper/lvm-home 1.8M 1.1K 1.8M 1% /home
Pour spécifier un ratio octets-par-inode différent, vous pouvez utiliser l'option -T usage-type
qui donne des indications sur l'utilisation attendue du système de fichiers en utilisant les types définis dans /etc/mke2fs.conf
. Parmi ces types, on trouve les plus gros largefile
et largefile4
qui offrent des ratios plus pertinents d'un inode tous les 1 MiB et 4 MiB respectivement. Il peut être utilisé comme tel :
# mkfs.ext4 -T largefile /dev/device
Le ratio d'octets par inode peut également être défini directement via l'option -i
: e.g. utiliser -i 2097152
pour un ratio de 2 MiB et -i 6291456
pour un ratio de 6 MiB.
news
(un inode pour chaque 4096). (un inode pour 4096 octets) ou small
. (même chose mais avec des tailles d'inodes et de blocs plus petites).Blocs réservés
Par défaut, 5 % des blocs du système de fichiers sont réservés au super-utilisateur, pour éviter la fragmentation et "permettre aux daemons appartenant à l'utilisateur root de continuer à fonctionner correctement après que les processus non privilégiés aient été empêchés d'écrire dans le système de fichiers" (mke2fs(8)).
Pour les disques modernes de grande capacité, cette valeur est plus élevée que nécessaire si la partition est utilisée comme archive à long terme ou si elle n'est pas cruciale pour le fonctionnement du système (comme /home
). Consultez ce courriel pour connaître l'opinion du développeur ext4 Ted Ts'o sur les blocs réservés et cette réponse sur superuser pour obtenir des informations générales sur ce sujet.
Il est généralement sûr de réduire le pourcentage de blocs réservés pour libérer de l'espace disque lorsque la partition est soit :
- Très grande (par exemple > 50G)
- Utilisée comme archive à long terme, c'est-à-dire où les fichiers ne seront pas supprimés et créés très souvent.
L'option -m
des utilitaires liés à ext4 permet de spécifier le pourcentage de blocs réservés.
Pour empêcher totalement la réservation de blocs à la création du système de fichiers, utilisez :
# mkfs.ext4 -m 0 /dev/device
Pour le changer à 1% par la suite, utilisez :
# tune2fs -m 1 /dev/device
Pour définir le nombre d'espace-bloc réservé à une taille absolue en gigaoctets, utilisez -r
:
# tune2fs -r $((ngigs * 1024**3 / blocksize)) /dev/device
blocksize
est la taille de bloc du système de fichiers en octets. C'est presque toujours 4096, mais vous pouvez vérifier pour être sûr :
# tune2fs -l /dev/device | grep 'Block size:'
Block size: 4096
La syntaxe $(())
est destinée à l'expansion mathématique. Cette syntaxe fonctionne dans bash et zsh, mais elle ne fonctionnera pas dans fish. Pour fish, voici la syntaxe :
# tune2fs -r (math 'ngigs * 1024^3 / blocksize') /dev/device
Ces commandes peuvent être appliquées aux systèmes de fichiers actuellement montés, les changements prenant effet immédiatement. Vous pouvez utiliser findmnt(8) pour trouver le nom du périphérique :
# tune2fs -m 1 "$(findmnt -no SOURCE /the/mount/point)"
Pour demander le nombre actuel de blocs réservés :
# tune2fs -l /dev/mapper/proxima-root | grep 'Reserved block count:'
Nombre de blocs réservés : 2975334
Il s'agit du nombre de blocs, il faut donc le multiplier par la taille de bloc du système de fichiers pour obtenir le nombre d'octets ou de gigaoctets : 2975334 * 4096 / 1024**3 = 11.34 GiB
.
Migrer de ext2/ext3 vers ext4
Montage de partitions ext2/ext3 en ext4 sans conversion
Justification
Un compromis entre la conversion complète en ext4 et le maintien de ext2/ext3 est de monter les partitions en ext4.
Pour:
- Compatibilité (le système de fichiers peut continuer à être monté en ext3) – Cela permet aux utilisateurs de lire le système de fichiers à partir d'autres systèmes d'exploitation qui ne prennent pas en charge ext4 (par exemple Windows avec des pilotes ext2/ext3).
- Amélioration des performances (mais pas autant qu'une partition ext4 entièrement convertie) [1] [2]
Contre :
- Moins de fonctionnalités de ext4 sont utilisées (seulement celles qui ne changent pas le format du disque comme l'allocation multibloc et l'allocation retardée).
Procédure
- Editez
/etc/fstab
et changez le 'type' de ext2/ext3 en ext4 pour toutes les partitions que vous souhaitez monter en ext4. - Remontez les partitions concernées.
Conversion des partitions ext2/ext3 en ext4
Raison d'être
Pour profiter des avantages de ext4, un processus de conversion irréversible doit être effectué.
Pour:
Contre :
- Les partitions qui contiennent principalement des fichiers statiques, comme une partition
/boot
, peuvent ne pas bénéficier des nouvelles fonctionnalités. De plus, l'ajout d'un journal (qui est sous-entendue lors de la migration d'une partition ext2 vers ext3/4) entraîne toujours une surcharge impactant les performances. - Irréversible (les partitions ext4 ne peuvent pas être "rétrogradées" vers ext2/ext3. Elles sont toutefois rétrocompatibles jusqu'à ce que l'option extent et d'autres options uniques soient activées).
Procédure
Ces instructions ont été adaptées de la documentation du noyau et d'un fil BBS.
- Si vous convertissez le système de fichiers racine du système, assurez-vous que l'initramfs 'de secours' est disponible au redémarrage. Alternativement, ajoutez
ext4
conformément à Mkinitcpio (Français)#MODULES et régénérez l'initramfs avant de démarrer. - Si vous décidez de convertir une partition
/boot
séparée, assurez-vous que le chargeur d'amorçage prend en charge le démarrage à partir d'ext4.
Dans les étapes suivantes, /dev/sdxX
désigne le chemin d'accès à la partition à convertir, comme /dev/sda1
.
- Sauvegardez toutes les données sur les partitions ext3 qui doivent être converties en ext4. Un paquet utile, spécialement pour les partitions racine, est clonezilla.
- Editez
/etc/fstab
et changez le 'type' de ext3 à ext4 pour toutes les partitions qui doivent être converties en ext4. - Démarrez le support «live» (si nécessaire). Le processus de conversion avec e2fsprogs doit être effectué lorsque le lecteur n'est pas monté. Si vous convertissez une partition racine, la façon la plus simple d'y parvenir est de démarrer à partir d'un autre support «live».
- Assurez-vous que la partition est non montée.
- Si vous voulez convertir une partition ext2, la première étape de conversion consiste à ajouter un journal en exécutant
tune2fs -j /dev/sdxX
en tant que root ; ce qui en fait une partition ext3. - Exécutez
tune2fs -O extent,uninit_bg,dir_index /dev/sdxX
en tant que root. Cette commande convertit le système de fichiers ext3 en ext4 (de manière irréversible). - Exécutez
fsck -f /dev/sdxX
en tant que root.- Cette étape est nécessaire, sinon le système de fichiers sera illisible. Cette exécution de fsck est nécessaire pour remettre le système de fichiers dans un état cohérent. Elle trouvera des erreurs de somme de contrôle dans les descripteurs de groupe - c'est normal. L'option
-f
demande à fsck de forcer la vérification même si le système de fichiers semble propre. L'option-p
peut être utilisée en plus pour "réparer automatiquement" (sinon, l'utilisateur sera invité à saisir des données pour chaque erreur).
- Cette étape est nécessaire, sinon le système de fichiers sera illisible. Cette exécution de fsck est nécessaire pour remettre le système de fichiers dans un état cohérent. Elle trouvera des erreurs de somme de contrôle dans les descripteurs de groupe - c'est normal. L'option
- Recommandé : monter la partition et exécuter
e4defrag -c -v /dev/sdxX
en tant que root.- Même si le système de fichiers est maintenant converti en ext4, tous les fichiers qui ont été écrits avant la conversion ne profitent pas encore de l'option extent de ext4, qui améliorera les performances des gros fichiers et réduira la fragmentation et le temps de vérification du système de fichiers. Afin de tirer pleinement parti de ext4, tous les fichiers devraient être réécrits sur le disque. Utilisez e4defrag pour résoudre ce problème.
- Redémarrage
Améliorer les performances
Désactiver la mise à jour du temps d'accès
Le système de fichiers ext4 enregistre des informations sur le dernier accès à un fichier et il y a un coût associé à cet enregistrement. Avec l'option noatime
, les horodatages d'accès sur le système de fichiers ne sont pas mis à jour.
/etc/fstab
/dev/sda5 / ext4 defaults, noatime 0 1
Faire ainsi casse les applications qui comptent sur le temps d'accès, consultez Fstab (Français)#Options atime pour des solutions possibles.
Augmentation de l'intervalle de commit
L'intervalle de synchronisation des données et des métadonnées peut être augmenté en fournissant un délai plus élevé à l'option commit
.
Le délai par défaut de 5 secondes signifie qu'en cas de coupure de courant, on perd autant que les 5 dernières secondes de travail.
Cela force une synchronisation complète de toutes les données/journaux sur un support physique toutes les 5 secondes. Le système de fichiers ne sera cependant pas endommagé, grâce à la journalisation.
Le fstab (Français) suivant illustre l'utilisation de commit
:
/etc/fstab
/dev/sda5 / ext4 defaults,noatime, commit=60 0 1
Désactiver les barrières
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 l'énergie. Cela a un coût en termes de performances, en particulier pour les applications qui utilisent beaucoup fsync ou qui créent et suppriment de nombreux petits fichiers. Pour les disques dont le cache d'écriture est alimenté par une batterie d'une manière ou d'une autre, la désactivation des barrières peut améliorer les performances en toute sécurité.
Pour désactiver les barrières, ajoutez l'option barrier=0
au système de fichiers souhaité. Par exemple :
/etc/fstab
/dev/sda5 / ext4 noatime, barrier=0 0 1
Désactiver la journalisation
Désactiver la journalisation avec ext4 peut être fait avec la commande suivante sur un disque non monté :
# tune2fs -O "^has_journal" /dev/sdXN
Utiliser un journal externe pour optimiser les performances
Pour ceux qui se soucient à la fois de l'intégrité des données et des performances, la journalisation peut être accélérée de manière significative avec l'option de montage journal_async_commit
. Notez que cette option ne fonctionne pas avec la valeur par défaut équilibrée de data=ordered
, elle n'est donc recommandée que lorsque le système de fichiers utilise déjà prudemment data=journal
.
Vous pouvez alors formater un périphérique dédié à la journalisation avec mke2fs -O journal_dev /dev/journal_dev
. Utilisez tune2fs -J device=/dev/journal_device /dev/ext4_fs
pour affecter le journal à un périphérique existant, ou remplacez tune2fs
par mkfs.ext4
si vous créez un nouveau système de fichiers.
Trucs et astuces
Utilisation du chiffrement basé sur les fichiers
Depuis Linux 4.1, ext4 prend nativement en charge le chiffrement des fichiers, consultez l'article fscrypt. Le chiffrement est appliqué au niveau du répertoire, et différents répertoires peuvent utiliser différentes clés de chiffrement. Ceci est différent à la fois de dm-crypt, qui est un chiffrement au niveau des blocs, et de eCryptfs, qui est un système de fichiers cryptographique empilé.
Activation des sommes de contrôle des métadonnées dans les systèmes de fichiers existants
Lorsqu'un système de fichiers a été créé avec e2fsprogs 1.43 (2016) ou une version ultérieure, les sommes de contrôle des métadonnées sont activées par défaut. Les systèmes de fichiers existants peuvent être convertis pour prendre en charge les sommes de contrôle des métadonnées.
Si l'unité centrale prend en charge SSE 4.2, assurez-vous que le module du noyau crc32c_intel
est chargé afin d'activer l'algorithme CRC32C accéléré par le matériel [5]. Sinon, chargez le module crc32c_generic
à la place.
Pour en savoir plus sur les sommes de contrôle des métadonnées, consultez le wiki ext4.
dumpe2fs
pour vérifier les fonctionnalités qui sont activées sur le système de fichiers :
# dumpe2fs -h /dev/path/to/disk
La partition doit d'abord être vérifiée et optimisée à l'aide de e2fsck
:
# e2fsck -Df /dev/path/to/disk
Convertissez le système de fichiers en 64 bits :
# resize2fs -b /dev/path/to/disk
Enfin, prenez en charge les sommes de contrôle :
# tune2fs -O metadata_csum /dev/path/to/disk
Pour vérifier :
# dumpe2fs -h /dev/path/to/disk | grep features:
Caractéristiques du système de fichiers : has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg sparse_super large_file huge_file dir_nlink extra_isize metadata_csum.
Activation de fast_commit dans les systèmes de fichiers existants
À partir du noyau 5.10, ext4 peut bénéficier d'une augmentation des performances en activant l'option fast_commit
:
# tune2fs -O fast_commit /dev/drivepartition
Pour clarifier la configuration actuelle ou les changements :
# tune2fs -l /dev/drivepartition | grep features
Voir aussi
- wiki officiel Ext4
- Ext4 Disk Layout décrit dans son wiki
- Ext4 Encryption article LWN
- Commits du noyau pour le chiffrement ext4 [6] [7]
- e2fsprogs Changelog
- Somme de contrôle des métadonnées Ext4
- Ext4 fast commits