Risposte:
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
sudo tune2fs -C 16000 /dev/sda1
e riavvia.
La moderna famiglia di file system ext prende in considerazione il bilanciamento e la contiguità durante l'allocazione dei file. In ext3 ed ext4 il bilanciamento è generalmente curato applicando le voci di giornale in ordine, e in ext4 in particolare, pre-allocando le estensioni del file system per aumentare i blocchi contigui. L'inseguimento di livelli di frammentazione inferiori al 20% potrebbe non valere la pena, specialmente se il sistema accede ripetutamente a pochi file. Suggerisco di perseguire queste tattiche per aumentare la velocità di lettura per un sistema a disco singolo:
aumentare la ram: questo aumenta la cache del filesystem
aumentare la dimensione del blocco: passando da 1k a 4k dimensioni del blocco, si ottengono migliori prestazioni in lettura per file vicini o più grandi della dimensione del blocco
se sei pedante, puoi organizzare file di grandi dimensioni e piccoli file in partizioni in base alla loro dimensione di blocco, potresti voler fare questo solo se hai archiviato foto, video e codice sorgente in directory separate
aumentare le impostazioni read-ahead usando hdparm e / o l'utility in modalità laptop
eseguire il backup e il ripristino del file system in modo lineare, ad esempio con tar
Se hai più dischi e stai usando lo striping raid e / o LVM, devi considerare altri fattori, come la dimensione dello striping.
Sì, esiste un fsck
richiamo specifico (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 il trucco:
#!/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");
È quindi possibile eseguirlo nella directory (o mount point) in questione:
$ frag_check.pl $HOME/
1.32410691664555% non contiguous files, 1.05380668862427 average fragments.
È possibile utilizzare uno strumento come e2defrag per ottenere queste informazioni.
Ricorda che a causa della natura dei file system Linux, la deframmentazione non è normalmente necessaria.
e4defrag -c
, ma non ha funzionato.
-c
opzione come ultimo argomento. E ... "non ha funzionato"? Qual è l'errore che ricevi?