web-dev-qa-db-fra.com

Comment convertir ext3 en ext4 avec le support e4defrag?

J'ai deux systèmes de fichiers ext3 qui sont très anciens et qui ont été remplis à 99% pendant longtemps, ce qui conduit à la fragmentation. En outre, ils ont été utilisés pour exécuter des machines virtuelles avec des images de disque dynamiques et d'autres charges de travail génératrices de fragmentation.

J'ai récemment converti les systèmes de fichiers en ext4 en utilisant les instructions ici , en particulier en exécutant:

# tune2fs -O extents,uninit_bg,dir_index /dev/DEV
# e2fsck -fDC0 /dev/DEV

Cependant, les systèmes de fichiers ne supportent toujours pas e4defrag:

Failed to defrag with EXT4_IOC_MOVE_EXT ioctl:Operation not supported   [ NG ]

Je suppose que la commande tune2fs manque une option, mais googler ne m'a pas aidé à comprendre ce que cela pourrait être.

4
otus

J'ai eu le même problème. J'ai trouvé ce qui a eu la réponse:

https://wiki.archlinux.org/index.php/Ext4#Migrating_files_to_extents

Migration de fichiers à des degrés divers

Avertissement: N'utilisez PAS la méthode suivante avec le référentiel Mercurial qui a été cloné localement, car cela corromprait le référentiel. Cela pourrait également corrompre d'autres liens matériels dans le système de fichiers.

Même si le système de fichiers est maintenant converti en ext4, tous les fichiers écrits avant la conversion ne tirent pas encore parti des nouvelles extensions de ext4, qui amélioreront les performances des fichiers volumineux et réduiront la durée 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. Un utilitaire appelé e4defrag est en cours de développement et se chargera de cette tâche. Cependant, il n'est pas encore prêt pour la production.

Heureusement, il est possible d'utiliser le programme chattr, ce qui obligera le noyau à réécrire le fichier en utilisant des extensions. Il est possible d'exécuter cette commande sur tous les fichiers et répertoires d'une partition (par exemple, si /home se trouve sur une partition dédiée): (Doit être exécuté en tant que root)

find /home -xdev -type f -print0 | xargs -0 chattr +e
find /home -xdev -type d -print0 | xargs -0 chattr +e

Il est recommandé de tester d'abord cette commande sur un petit nombre de fichiers, puis de vérifier si tout va bien. Il peut également être utile de vérifier le système de fichiers après la conversion.

En utilisant la commande lsattr, il est possible de vérifier que les fichiers utilisent maintenant des étendues. La lettre 'e' doit apparaître dans la liste des attributs des fichiers listés.

-

Remarque: j'avais supposé que e4defrag pouvait convertir les fichiers pour utiliser des étendues. L'ioctl échoué est celui qui le fait autant que je sache, donc je ne comprends pas trop pourquoi cela ne fonctionne pas, mais chattr +e a fonctionné pour moi. Une fois que vous avez chattr +e les fichiers, vous pouvez ensuite utiliser e4defrag. Évidemment, assurez-vous d'avoir une sauvegarde, etc. au cas où (j'aurais pensé que c'était sécuritaire, mais vous ne le savez jamais - il y a un avertissement concernant les liens physiques, mais je ne trouve aucune autre référence aux problèmes connus liés aux liens matériels).

4
Jools