In Linux, come si controlla se un disco è frammentato?


28

All'avvio, a volte fsck riporta l'attrito per un disco: "5,3% non contiguo".

Come posso ottenere queste informazioni da solo? Esiste una specifica chiamata fsck?

Risposte:


27

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

Grazie! fsck.ext2 ha trovato diversi errori nella mia partizione home. Ora vorrei ripararlo. Questo pone la domanda: come posso riparare la mia partizione home, che devo tenere montata per accedere?
Michael,

3
@Michael Se l'unità è montata, eseguendo un segno di spunta segnalerà sempre errori. Ad ogni modo, se vuoi controllare il filesystem al prossimo riavvio, esegui questo sudo tune2fs -C 16000 /dev/sda1e riavvia.
Rucent88,

1
fsck controlla cosa c'è sul disco / memoria, ma se montato allora ci saranno cose in corso (scritte per metà). Ecco perché vedrai errori, non sono errori reali, sono errori falsi. Ignorali.
ctrl-alt-delor,

8

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.


4

Sì, esiste un fsckrichiamo 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.

Questo è solo chiamare fsck sulla partizione e, come sappiamo entrambi, distruggerà una partizione montata. Esiste un modo per usare fsck in un modo di sola lettura, dimmi come è frammentato il mio disco?
Peltier,

Per quanto ne so, @Peltier. Stavo pensando che puoi avviare un runlevel inferiore, smontare il disco in questione ed eseguire fsck. In ogni caso, sul serio, puoi quasi certamente ignorare la frammentazione sulla maggior parte dei sistemi Linux.
terdon,

@Peltier, vedi la mia risposta aggiornata.
terdon,

1
Sì, è lento. Intendiamoci, ci sono voluti ~ 2-3 minuti sulla mia partizione da 500 GB / home /. Ancora una volta, sottolineo, guidare la frammentazione non è più un problema. Soprattutto se si utilizza un filesystem EXT3-4.
Terdon,

1
@KentFredric Ah! Si Certamente. Capisco cosa intendi adesso. Ho modificato di conseguenza, grazie. Eliminiamo i commenti per rimuovere il disordine.
terdon,

0

È 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.


Ti dispiacerebbe dettagliare la tua risposta? Ho provato a ottenere queste informazioni e4defrag -c, ma non ha funzionato.
Peltier,

@Peltier Puntalo su un punto mozzo Ext3 o Ext4 dopo l' -copzione come ultimo argomento. E ... "non ha funzionato"? Qual è l'errore che ricevi?
gertvdijk,

Dice "Fatto". Tuttavia, non l'ho puntato direttamente sul dispositivo, ma sul punto di montaggio. Sto provando di nuovo con il dispositivo.
Peltier,

Nota che ci vuole molto tempo, mentre fsck è molto veloce.
Peltier,

Ho appena provato di nuovo con il dispositivo, dice solo "Fine".
Peltier,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.