Ext4 (Français)

É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.
Related articles
File systems
Ext3
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
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:
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
.
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).
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
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
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