Pour s'en servir, il faut recopier le code dans un fichier, le rendre exécutable et le lancer (dans une console) en mode administrateur en donnant en paramètre un dossier.
sudo ./n_defrag.sh ~/Documents/
Deux options sont disponibles:
-t: qui permet de spécifier le nombre d'essais pour chaque fichier. En effet, même après recopie, un fichier peut parfois être encore fragmenté. Le script recommence alors plusieurs fois jusqu'à défragmentation complète, ou jusqu'à ce que la limite -t soit atteinte. Par défaut, t vaut 10.
Utiliser
-t 0 fait que le script analyse uniquement la fragmentation du dossier, et ne cherche pas à le défragmenter. Utile pour avoir une idée de la fragmentation du dossier sans prendre de risques.
sudo ./n_defrag.sh -t 20 ~/Documents/
-r: lance un mode de récupération. Si une précédente défragmentation a été interrompue, il est TRES FORTEMENT recommandé de s'en servir. Vous pourriez sinon perdre le fichier qui était en cours d'analyse.
sudo ./n_defrag.sh -r
Pendant l'analyse, vous verrez défiler les noms des fichiers fragmentés, et les tentatives successives pour les défragmenter:
/home/user/Document/monfichier1.doc 4 ... ok
/home/user/Document/monfichier2.doc 12 .......... 5
Le premier étant un fichier défragmenté avec succes, le second étant un fichier qui n'a pas pu être défragmenté. Le premier chiffre indique le nombre de fragments avant la tentative de fragmentation. Le second chiffre indique le nombre de fragment après, ok voulant dire un seul fragment. Il peut arriver que le second chiffre soit plus important que le premier, autrement dit, le fichier est alors plus fragmenté qu'au début, même si vous aviez beaucoup de place libre sur votre disque. Je ne sais pas à quoi cela est dû.
A la fin de la défragmentation, le programme affiche un petit résumé:
sudo ./n_defrag.sh ~/Documents/
[...]
Analyse results for ~/Documents/
30570 files: 0 f/Mo (before: .01 f/Mo)
2 files have not been analysed
43 files were fragmented: 9.60 f/Mo
28 files are still fragmented: 1.87 f/Mo
Les fichiers non analysés sont liés à un bug de filefrag qui plante en lisant les fichiers commençant par "-" comme par exemple "-monfichier.doc". Le créateur a dû se planter dans la manière de parser l'option "-s" du programme.
L'unité f/Mo signifie en quelque sorte "fragmentation par Mega Octet". Plus précisément, si un fichier de taille X Mo est fragmenté en N morceaux, alors la fragmentation par Mega Octet se calcule ainsi:
fragmentation par Mega Octet = (N-1)/X
Et par conséquent, un fichier non fragmenté a 0 f/Mo. Les futures versions de ce script devront permettre de fixer un seuil minimal de f/Mo au dessous duquel le script n'essaye pas de défragmenter le fichier. En effet, qu'un fichier de 700Mo (une image iso par exemple) soit fragmenté en 4 morceaux (0,004 f/Mo) n'est pas vraiment problématique, car le temps de déplacement de la tête de lecture du disque entre les morceaux sera certainement négligeable devant le temps de lecture complet des données. Donc inutile d'essayer de le défragmenter, opération lourde vu la taille du fichier, et qui peut tout simplement être impossible si il n'y a pas sur la partition 700Mo d'espace libre contigu. Par contre, on aura tout intérêt à défragmenter un fichier de 5Mo fragmenté en plus de 20 morceaux (3,8 f/Mo).
J'ai fait de mon mieux pour éviter les mauvaises surprises, il y a plein de vérifications partout. Cependant, je n'ai pas l'habitude du bash, et je suis sûr que beaucoup d'améliorations pourraient être faites, ou bien certaines parties du code ré-écrites proprement.
Je l'ai lancé sur mon répertoire racine et je n'ai pas eu de problèmes, mais je ne peux pas garantir à tout le monde que ce sera pareil, donc prudence. Prudence en particulier si vous voulez l'utiliser sur les données vitales du système (le noyau dans le dossier
/boot par exemple). Le risque étant un plantage du système (si le système cherche à accéder à des fichiers fragmentés en cours de défragmentation) et dans le pire des cas, l'impossibilité de redémarrer le système (si le système a planté au mauvais moment). Utilisez le paramètre
-t 0 dans un premier temps pour vérifier si ces données ont réellement besoin d'être défragmentées.
Je l'ai aussi testé sur des partions FAT et NTFS, et ça n'a pas posé pas de problèmes non plus. Donc apparemment ce script peut être utilisé pour défragmenter vos partitions Windows.
Les fichiers souvent fragmentés sont par exemple:
* Les fichiers téléchargés, quand plusieurs fichiers sont téléchargés en même temps depuis des logiciels qui ne réservent pas la place avant le début du téléchargement. Ça me semble être le cas d'Amule et Firefox entre autre (à confirmer).
* Les fichiers sur des partitions partagées avec Windows. Donc les clefs USB et disques externes.