Pages : 1
#1 Le 17/12/2008, à 17:27
- Hoper
Defragmenter les fichiers tres volumineux
Suite à une discussion ici :
http://forum.ubuntu-fr.org/viewtopic.php?id=277342
Il s'avère que ext3 n'est pas super performant pour tout ce qui est gros (ou très gros) fichier, et qu'il a une fâcheuse tendance à les découper plus que nécessaire.
Le petit script suivant (je l'ai appelé sdefrag comme simple defrag, mais vous lui donnez le nom que vous voulez) vérifie les fichier dans le répertoire indiqué, et si ils semblent très fragmentés, tente d'améliorer les choses en les recopiant.. tout simplement. Pour que cela ai une petite chance de fonctionner, il faut qu'il reste un maximum d'espace libre dans la partition en question (plus que 10 Go quoi... et si possible beaucoup plus).
Cette méthode est très aléatoire... Dans la plupart des cas elle devrait arranger la situation, mais d'apres mes tests il arrive aussi que la situation de certains fichiers empirent au contraire...
A utiliser évidement avec sudo, et a vos risques et péril...
Dernier conseil, ne faites pas ça sur des fichiers en cours d'utilisation !!!
#!/bin/bash
## Syntaxe
if [ $# -ne 1 -o ! -d "$1" ]
then
echo " "
echo " Syntaxe : $0 repertoire"
echo " ex : $0 /home/toto/documents"
echo " "
exit 1
fi
## Creation de la liste des fichiers a traiter
find "$1" -mount -type f -print > /tmp/sdefrag.lst
## Verification de la presence de filefrag
which filefrag >/dev/null
if [ $? -ne 0 ]
then
echo " "
echo " Impossible de trouver la commande filefrag !"
echo " Sur ubuntu cette commande se trouve dans le paquet e2fsprogs..."
echo " "
exit 2
fi
FF=`which filefrag`
IFS="
"
for i in `cat /tmp/sdefrag.lst`
do
RESULT=`$FF "$i" | cut -d ':' -f 2`
NBREALEXT=`echo $RESULT | awk '{print $1}'`
NBPERFECTEXT=`echo $RESULT | awk '{print $7}'`
if [ ! -z "$NBPERFECTEXT" ]
then
# Le fichier est fragmente
if [ "$NBREALEXT" -ge `expr $NBPERFECTEXT \* 10` ]
then
echo "$i semble tres fragmente ("$NBREALEXT" extends) "
cp "$i" "$i"tmp
rm "$i"
mv "$i"tmp "$i"
echo "resultat apres recopie : `$FF "$i" | cut -d ':' -f 2 | awk '{print $1 $2}'` "
echo " "
fi
fi
done
rm /tmp/sdefrag.lst
Dernière modification par Hoper (Le 17/12/2008, à 17:29)
Mes tutos et coups de gueule :
http://hoper.dnsalias.net/atdc/
Mastodon: @hoper@framapiaf.org
Hors ligne
#2 Le 17/12/2008, à 17:41
- Jardiland
Re : Defragmenter les fichiers tres volumineux
Sinon, le plus simple est encore d'utiliser un système de fichier adapté aux gros fichiers, comme xfs.
Réinstaller son système au moindre soucis est un réflexe de windowsien.
Sous linux, tous les problèmes peuvent être résolu sans réinstaller
---
Votre ordinateur s'ennuie ? Faites le participer à la recherche contre le cancer !
Hors ligne
#3 Le 17/12/2008, à 17:43
- contremaitre
Re : Defragmenter les fichiers tres volumineux
qu'est ce que vous appellez "gros" ?
Hors ligne
#4 Le 17/12/2008, à 17:55
- Hoper
Re : Defragmenter les fichiers tres volumineux
Sinon, le plus simple est encore d'utiliser un système de fichier adapté aux gros fichiers, comme xfs.
Je le ferai si XFS pouvait etre shrinké. Or ce n'est pas le cas.. Et ca c'est suffisament grave pour que j'en reste à des fs comme ext3 ou reiserfs.
qu'est ce que vous appellez "gros" ?
Plusieurs dizaines à plusieurs centaines de Mo, et évidement tout ce qui dépasse le Go
Mes tutos et coups de gueule :
http://hoper.dnsalias.net/atdc/
Mastodon: @hoper@framapiaf.org
Hors ligne
Pages : 1