Ext4 (Français)

From ArchWiki
État de la traduction: Cet article est la version francophone de Ext4. Date de la dernière traduction: 2022-09-05. Vous pouvez aider à synchroniser la traduction s'il y a eu des changements dans la version anglaise.

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

Installez e2fsprogs.

Pour formater une partition, faites :

# mkfs.ext4 /dev/partition
Astuce:
  • 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.

Astuce: Inversement, si vous mettez en place une partition dédiée à l'hébergement de millions de petits fichiers tels que des courriels ou des éléments de groupes de discussion, vous pouvez utiliser des valeurs de type d'utilisation plus petites telles que 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).
Attention: Si vous faites un usage intensif de liens symboliques, assurez-vous de maintenir le nombre d'inodes suffisamment élevé avec un faible ratio d'octets par inode, car sans prendre plus d'espace, chaque nouveau lien symbolique consomme un nouvel inode et le système de fichiers peut donc en manquer rapidement.

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).
Note: Sauf la nouveauté relative de ext4 (qui peut être vue comme un risque), il n'y a pas d'inconvénient majeur à cette technique.

Procédure

  1. Editez /etc/fstab et changez le 'type' de ext2/ext3 en ext4 pour toutes les partitions que vous souhaitez monter en ext4.
  2. 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:

  • Amélioration des performances et nouvelles fonctionnalités. [3] [4]

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.

Attention:
  • 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.

  1. 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.
  2. Editez /etc/fstab et changez le 'type' de ext3 à ext4 pour toutes les partitions qui doivent être converties en ext4.
  3. 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».
  4. Assurez-vous que la partition est non montée.
  5. 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.
  6. 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).
  7. 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).
  8. 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.
  9. 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

Attention: La désactivation des barrières pour les disques sans cache alimenté par batterie n'est pas recommandée et peut entraîner une grave corruption du système de fichiers et la perte de données.

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

Attention: L'utilisation d'un système de fichiers sans journalisation peut entraîner une perte de données en cas de démontage soudain, comme une panne de courant ou un blocage du noyau

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.

Astuce: Utiliser dumpe2fs pour vérifier les fonctionnalités qui sont activées sur le système de fichiers :
# dumpe2fs -h /dev/path/to/disk
Note: Le système de fichiers ne doit pas être monté.

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