Login Logout

Astuces FileSystem Ext

ext3/4

Journalisation

La journalisation est présente dans ext3/4 elle permet de … blabla … Cela permet notamment de garantir une intégrité du système de fichiers alors que celui-ci à subit une opération brute, comme un hard reboot.

Il peut être intéressent de la désactiver ou de changer la méthode pour augmenter les performances du FS.

Changer la méthode de journalisation

data=ordered

Le mode ordered permet de…

Dans le fstab :

data=ordered,noatime,nodiratime
data=writeback

Le mode writeback permet de…

Dans le fstab :

data=writeback,noatime,nodiratime
# tune2fs -o journal_data_writeback /dev/sdXY

Réduire le nombres de commits

Le commit est la période à laquelle le kernel va effectuer l’écriture du journal.

Dans le fstab, la valeur par défaut est de 4 secondes.

commit=60

Désactiver la journalisation

Pour ext4 seulement :

# tune2fs -O ^has_journal /dev/sdXY
# e2fsck -f /dev/sdXY

Pour ext3, désactiver la journalisation revient à monter le FS en ext2.

Redimensionner/Resize une partition

Faites un backup de la table de partition avec sfdisk.

Selon la position de votre partition (espace libre avant ou après), plusieurs cas.

Agrandir une partition

Supprimer la avec cfdisk, puis la recréer avec sa nouvelle taille. Ensuite il faut faire un fsck, et lancer l’utilitaire resize2fs.

# cfdisk /dev/sdxY
# e2fsck -f /dev/sdxY
# resize2fs /dev/sdxY

On peut avoir une erreur de taille de table de partition ou si la taille de l’espace libre n’est pas reconnue dans cfdisk ou cgdisk il faut réparer la table de partition avec :

# sgdisk -e /dev/sdx

Puis redémarrer la machine.

Rétrécir une partition

Pour rétrécir une partition, il faut d’abord rétrécir son système de fichier, avant de la supprimer puis de la recréer avec sa nouvelle taille.

# resize2fs dev/sdxY XG
# cfdisk /dev/sdxY
# resize2fs dev/sdxY
# e2fsck -f /dev/sdxY

Vérification du FS

Lister les valeurs du superblock du système de fichier

# tune2fs -l /dev/sdxY

fsck sera exécuté au prochain reboot lorsque les valeurs Maximum mount count et Next check after seront atteintes. Pour modifier ces seuils on exécutera :

# tune2fs -c <maximum_mount_count> -i <interval_between_check> /dev/sdxY

Avoir des infos sur une partition

# dumpe2fs -h /dev/sda1 | less

L’option -h permettant d’avoir rapidement les infos importantes.

Ajuster la place réservée

Pour voir le nombre de blocs réservés :

# tune2fs -l /dev/sda1 | grep -E "(Reserved block count|Block count)"

Pour connaître le pourcentage de blocs réservés, il faut faire le calcul à la main :

mount_point="/home"
dev=$(findmnt --noheadings "$mount_point" | head -n1 | awk '{ print $2 }')
blocs=$(tune2fs -l "$dev" | grep "Block count" | cut -d':' -f2 | xargs)
reserved_blocs=$(tune2fs -l "$dev" | grep "Reserved block count" | cut -d':' -f2 | xargs)
LC_NUMERIC="en_US.UTF-8" printf "Reserved blocs: %.0f%%\n" $(echo "scale=2; 100 * $reserved_blocs / $blocs" | bc)

Réduire à 1% le nombre de blocs réservé sur une partition ext3/4 :

# tune2fs -m 1 /dev/sda1
Setting reserved blocks percentage to 1% (328560 blocks)

FSCK au démarrage

Un éventuel fsck au démarrage s’active dans la dernière colonne du fstab (mettre 0 pour le désactiver).

Par défaut, un “check” est programmé tous les 6 mois ou à partir d’environ 30 montages sans vérification. Ces paramètres peuvent bien sûr être changé via :

# tune2fs -c 140 -i 1000d /dev/sda1
tune2fs 1.42.12 (29-Aug-2014)
Setting maximal mount count to 140
Setting interval between checks to 86400000 seconds

Cela évite des reboots trop longs dès que l’on dépasse 6 mois d’uptime. En complément, on pourra utiliser un script avertissant qu’un fsck est conseillé…

Si on veut désactiver le fsck de manière ponctuelle, il faut dans le menu de Grub, rajouter aux paramétres du noyau fsck.mode=skip.

Aux dernières nouvelles, la technique de désactiver le fsck en créant le fichier /fastboot fonctionne toujours :

# touch /fastboot

Note 1 : le fichier /fastboot sera supprimé au prochain démarrage

Note 2 : attention, cette technique est dépréciée depuis 2010

On a le même principe pour forcer un fsck :

# touch /forcefsck

Copier le contenu d’un dossier à la création du système de fichier

Il est possible de copier directement le contenu d’un répertoire à la création du système de fichier (ce contenu devient alors le contenu à la racine du système de fichier créé) avec l’argument -d de mke2fs (mkft -t ext4).

# mkfs -t ext4 -d /home /dev/vdb

Cette commande ne nécessite que les droits de lecture sur le contenu du dossier et les droits d’écriture sur le disque. Le “disque” peut être un simple fichier (il n’y a pas besoin de losetup dans ce cas).

Benchmark

Se reporter à HowtoBenchmarks.

FAQ

Erreur too many links ?

Cela signifie que vous avez plus de 215 (~= 32k) répertoires dans un répertoire. Il faut envisager de structurer le répertoire différemment pour obtenir une hiérarchie plus profonde, avec moins d’éléments dans chaque répertoire.

Chercher le répertoire contenant le plus de répertoires = + de inodes/inode : TipsShell#lister-les-répertoires-ayant-le-plus-de-fichiers-max-inode