Puoi tranquillamente eseguire fsck.ext2 su un filesystem ext2 ext3 o ext4 anche se è montato in questo modo
sudo fsck.ext2 -fn /dev/sdXY
Se l'unità è montata, genererà molti errori, ma l'argomento -n gli dice di non toccare l'unità.
$ sudo fsck.ext2 -fn /dev/sda1
e2fsck 1.42 (29-Nov-2011)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Ubuntu_Rescue: 291595/1222992 files (0.2% non-contiguous), 1927790/4882432 blocks
La moderna famiglia di filesystem ext prende in considerazione il bilanciamento e la contiguità durante l'allocazione dei file. In ext3 ed ext4 il bilanciamento viene generalmente curato applicando voci di giornale in ordine, e in ext4 in particolare, pre-allocando le estensioni del file system per aumentare i blocchi contigui. Inseguire livelli di frammentazione inferiori al 20% potrebbe non valere la pena, soprattutto se il tuo sistema accede ripetutamente ad alcuni file. Suggerisco di perseguire queste tattiche per aumentare la velocità di lettura per un sistema a disco singolo:
-
aumenta la ram:aumenta la cache del filesystem
-
aumenta la dimensione del blocco:passando da 1k a 4k dimensioni del blocco, ottieni prestazioni migliori nelle letture per file vicini o più grandi della dimensione del tuo blocco
-
se sei pedante, puoi organizzare file grandi e piccoli in partizioni in base alla dimensione del blocco, potresti volerlo fare solo se hai archiviato foto, video e codice sorgente in directory separate
-
aumentare l'impostazione read-ahead utilizzando hdparm e/o l'utility in modalità laptop
-
eseguire il backup e il ripristino del filesystem in modo lineare, ad esempio con tar
Se hai più dischi e stai usando raid striping e/o LVM, devi considerare altri fattori, come la dimensione dello stripe.
Sì, c'è un fsck
specifico invocazione (come root o sudo):
$ fsck /dev/sdXY
Sostituisci X e Y con i parametri corretti per il tuo caso (ad es. /dev/sda1
).
NON ESEGUIRE QUESTO SU UNA PARTIZIONE MONTATA! Può danneggiare seriamente il tuo filesystem.
Per ulteriori informazioni su Linux e la deframmentazione, vedere la mia risposta qui.
Se non hai bisogno di eseguire specificamente fsck, ma vuoi solo controllare la frammentazione del tuo disco, il seguente script (preso da qui) dovrebbe fare al caso tuo:
#!/usr/bin/perl -w
#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 '$ARGV[0]' -xdev -type f -print0");
$/ = "\0";
while (defined (my $file = <FILES>)) {
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");
Puoi quindi eseguirlo sulla directory (o punto di montaggio) in questione:
$ frag_check.pl $HOME/
1.32410691664555% non contiguous files, 1.05380668862427 average fragments.