5 votes

Comment faire pour que ext3 converti en ext4 supporte e4defrag ?

J'ai deux systèmes de fichiers ext3 qui sont très vieux et qui ont été remplis à 99 % pendant longtemps, ce qui entraîne une fragmentation. De plus, ils ont été utilisés pour exécuter des machines virtuelles avec des images de disque dynamiques et d'autres charges de travail provoquant la fragmentation.

J'ai récemment converti les systèmes de fichiers en ext4 en utilisant les instructions suivantes aquí en particulier en courant :

# 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 le tune2fs Il manque une option à la commande, mais la recherche sur Google ne m'a pas aidé à trouver laquelle.

5voto

Himanshu Shah Points 1

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

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

Migration de fichiers vers des extents

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

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 des nouveaux extents d'ext4, ce 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 profiter pleinement de ext4, tous les fichiers devraient être réécrits sur le disque. Un utilitaire appelé e4defrag est en cours de développement et s'occupera de cette tâche ; cependant, il n'est pas encore prêt pour la production.

Heureusement, il est possible d'utiliser le chattr qui fera en sorte que le noyau réécrive le fichier en utilisant les extents. Il est possible d'exécuter cette commande sur tous les fichiers et répertoires d'une partition (par exemple si /home est 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, et de vérifier si tout se passe bien. Il peut également être utile de vérifier le système de fichiers après la conversion.

Utilisation de la lsattr il est possible de vérifier que les fichiers utilisent désormais des extents. La lettre 'e' doit apparaître dans la liste des attributs des fichiers listés.

--

Note : J'avais supposé que e4defrag pouvait convertir les fichiers pour utiliser les extents. L'ioctl qui a échoué est celui qui fait cela afaik, donc je suis un peu confus sur la raison pour laquelle il ne fonctionne pas, mais chattr +e a fonctionné pour moi. Après avoir chattr +e les fichiers, vous pouvez alors utiliser e4defrag sur eux. Assurez-vous évidemment d'avoir une sauvegarde, etc., juste au cas où (j'aurais pensé que c'est sans danger, mais on ne sait jamais - il y a un avertissement ici concernant les hardlinks, mais je ne trouve aucune autre référence à des problèmes connus avec les hardlinks).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X