Wiki Ubuntu-it

Indice
Partecipa
FAQ
Wiki Blog
------------------
Ubuntu-it.org
Forum
Chiedi
Chat
Cerca
Planet
  • Pagina non alterabile
  • Informazioni
  • Allegati

Versione 1 del 08/09/2007 13.00.02

Nascondi questo messaggio

Controllare lo stato di frammentazione del File System

Lo script descritto di seguito, che fa un uso iterativo del comandofilefrag, permette di verificare lo stato di frammentazione del vostro file system, restituendo i seguenti dati:

  • percentuale di file non contigui
  • numero medio di frammenti per file

E' ovvio che minori sono questi valori, migliori saranno le prestazioni del vostro file system. Lo script è stato testato su file systemExt3eRaiserFS, ma dovrebbe funzionare su tutti i file system supportati dal comandofilefrag.

NB: In Linux, e in particolare per il filesystemExt3, non è necessario deframmentare perchè per costruzione il file system tiene sotto controllo il problema. RaiserFS invece tende a frammentare i propri file, quindi questo script ha molto più valore.

Lo script, scritto in PERL:

#this script search for frag on a fs
use strict;

#number of files
my $files = 0;
#number of fragment
my $fragments = 0;
#number of fragmented files
my $fragfiles = 0;

#search fs for all file
open (FILES, "find -xdev -type f |");

while (defined (my $file = <FILES>)) {
        #quote some chars in filename
        $file =~ s/!/\\!/g;
        $file =~ s/#/\\#/g;
        $file =~ s/&/\\&/g;
        $file =~ s/>/\\>/g;
        $file =~ s/</\\</g;
        $file =~ s/\$/\\\$/g;
        $file =~ s/\(/\\\(/g;
        $file =~ s/\)/\\\)/g;
        $file =~ s/\|/\\\|/g;
        $file =~ s/'/\\'/g;
        $file =~ s/ /\\ /g;
        #nb of fragment for the file
        open (FRAG, "filefrag $file |");
        my $res = <FRAG>;
        if ($res =~ m/.*:\s+(\d+) extents? found/) {
                my $fragment = $1;
                $fragments+=$fragment;
                if ($fragment > 1) {
                        $fragfiles++;
                }
                $files++;

        } else {
                print ("$res : not understand for $file.\n");
        }
        close (FRAG);
}
close (FILES);

print ( $fragfiles / $files * 100 . "% non contiguous files, " . $fragments / $files . " average fragments.\n");

nella vostra directory home, o in qualsiasi altra directory del vostro utente, create il file che conterrà lo script con il comando:

gedit fragck.pl

nell'editor di testo copiato lo script, e salvate il file.

A questo punto, è necessario dare i permessi di esecuzione al file appena creato:

chmod u+x fragck.pl

A questo punto, eseguite lo script con i permessi di root tramite sudo:

sudo fragck.pl

E dopo pochi secondi, avrete lo stato del vostro file system:

11.4397649363369% non contiguous files, 1.62370225269344 average fragments