Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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