J’ai récemment été confronté à une incompatibilité ext4 : un système de fichiers récent refusait de se monter sur un serveur avec une version de Linux plus ancienne. TL;DR : il existe des possibilités de conversion ou de formatage pour garantir cette compatibilité.

Imaginez le scénario suivant : vous remplissez un disque dur de serveur localement dans le but d’aller l’installer par la suite dans un serveur quelconque. Pour cela vous utilisez le système de fichiers ext4 comme d’habitude, qui existe depuis 2008 et qui ne devrait donc pas poser trop de soucis.

Seul problème : le FS ext4 a été formaté sous Debian 9.3 (Linux 4.9.0-4 et e2fslibs 1.43.4-2) alors que le serveur cible tourne sous Debian 6 (Linux 2.6.32-5 et e2fslibs 1.41.12-4stable1) ou encore RHEL 6.10 (Linux 2.6.32-754 et e2fsprogs-libs-1.41.12-24)

Première incompatibilité : l’attribut metadata_csum

Lors du montage si vous obtenez le message d’erreur (ou de log) suivant, c’est l’option metadata_csum de ext4 qui est en cause (plus d’informations). Cette option est apparue dans Linux 3.6 et elle n’est pas reconnue avec les versions antérieures.

On peut convertir un FS ext4 existant dans le but de le rendre compatible avec un système plus ancien. Bien entendu, les opérations de conversion doivent se faire sur un système récent.

ll faut commencer par faire une vérification disque, puis désactiver l’option en question.

Seconde incompatibilité : le journal 64 bits

Le message d’erreur suivant indique un problème de compatibilité du journal JBD utilisé par ext4. Plus d’informations sur le wiki ext4.

Ce message n’est pas très parlant mais une lecture des informations du superblock avec dumpe2fs -h /dev/sdX1 montre que le journal JBD a la fonctionnalité journal_64bits et ext4 a la fonctionnalité 64bit.

La désactivation de l’option ext4 64bit ne se fait pas comme précédemment comme on peut le voir avec la tentative infructueuse ci-dessous.

Il faut plutôt procéder comme suit. C’est une opération irréversible, il ne sera plus possible d’activer 64bit à nouveau.

Comment éviter cette mésaventure

A mon avis une manière très simple de soumettre des données à un système obsolète est d’employer ext3 au lieu de ext4. Cette version du filesystem a été introduite en 2001 et elle devrait normalement avoir été figée plus tôt au niveau de ses fonctionnalités.

Si toutefois vous souhaitez formater un périphérique en ext4 sans metadata_csum et sans 64bit, pour garantir sa compatibilité avec un système obsolète, vous pouvez le faire ainsi. De cette manière aucune conversion n’est requise sur un système de fichiers rempli.

Pour finir, il est bien évident que la mise à jour des serveurs et des appliances (routeurs, NAS, etc) est importante pour utiliser les dernières versions de paquets qui comprennent très souvent des correctifs de sécurité. Si vous utilisez RedHat Entreprise Linux 6.10, sachez que sa date de fin de support se rapproche (fin 2020) donc une mise à jour de l’OS ou une migration est à envisager. Et pour cela, peut-être qu’il vous sera utile de lire et d’écrire sur un disque dur ext4 formaté récemment ?