Juste pour préciser parceque je me suis posé la question, ce que rapporte filefrag c'est le nombre de fois où il faut aller chercher un block à un nouvel emplacement (donc pas juste après le précédent). Sur un fichier non fragmenté, comme il l'indique dans ce qu'il affiche, ça ferait "1".
Ce nombre (disons N) est donc à comparer avec le nombre des blocks occupés par le fichier (disons M). Le ratio de fragmentation du fichier est donc à la louche un truc du genre (N-1)/(M-1).
D'où le petit script suivant pour faire plus joli :
% cat fragmentation.sh
#!/bin/bash
filesize=$(ls -s --block-size=4KB "${1}" | cut -d\ -f1)
if [[ ${filesize} -gt 1 ]] ; then
extents=$(/sbin/filefrag "${1}" | sed -n 's/.*: \([0-9]\+\) extents.*/1円/p')
fragmentation=$(bc <<<"scale=1;100*(${extents}-1)/${filesize}" )
else
# pas de division par zero...
extents=${filesize}
fragmentation=0
fi
echo "${1}: ${filesize} blocks, ${extents} extents, ${fragmentation}% fragmentation"
[^] # Re: Comment ?
Posté par tgl . En réponse au journal Fait n°1 : Linux n'est pas sujet à la fragmentation.... Évalué à 4.
Ce nombre (disons N) est donc à comparer avec le nombre des blocks occupés par le fichier (disons M). Le ratio de fragmentation du fichier est donc à la louche un truc du genre (N-1)/(M-1).
D'où le petit script suivant pour faire plus joli :
% cat fragmentation.sh
#!/bin/bash
filesize=$(ls -s --block-size=4KB "${1}" | cut -d\ -f1)
if [[ ${filesize} -gt 1 ]] ; then
extents=$(/sbin/filefrag "${1}" | sed -n 's/.*: \([0-9]\+\) extents.*/1円/p')
fragmentation=$(bc <<<"scale=1;100*(${extents}-1)/${filesize}" )
else
# pas de division par zero...
extents=${filesize}
fragmentation=0
fi
echo "${1}: ${filesize} blocks, ${extents} extents, ${fragmentation}% fragmentation"
% sudo ./fragmentation.sh linux-2.6.14.tar.bz2
linux-2.6.14.tar.bz2: 9805 blocks, 492 extents, 5.0% fragmentation
Enfin, en espérant que j'ai pas tout compris de travers et que mon raisonnement n'est pas foireux :)