Wie prüft man unter Linux, ob eine Festplatte fragmentiert ist?

28

Beim Booten meldet fsck manchmal die Fragmentierung für eine Festplatte: "5,3% nicht zusammenhängend".

Wie kann ich diese Informationen selbst erhalten? Gibt es einen bestimmten fsck-Aufruf?

Peltier
quelle

Antworten:

27

Sie können fsck.ext2 sicher auf einem ext2 ext3- oder ext4-Dateisystem ausführen, auch wenn es so eingehängt ist

sudo fsck.ext2 -fn /dev/sdXY

Wenn das Laufwerk gemountet ist, werden viele Fehler ausgegeben, aber das Argument -n weist es an, das Laufwerk nicht zu berühren.

$ 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
Rucent88
quelle
Vielen Dank! fsck.ext2 hat auf meiner Home-Partition mehrere Fehler gefunden. Jetzt möchte ich es reparieren. Dies wirft die Frage auf: Wie repariere ich meine Home-Partition, die ich für die Anmeldung bereithalten muss?
Michael
3
@Michael Wenn Ihr Laufwerk aktiviert ist, werden beim Ausführen einer Überprüfung immer Fehler gemeldet. Wenn Sie beim nächsten Neustart das Dateisystem überprüfen möchten, führen Sie dies aus sudo tune2fs -C 16000 /dev/sda1und starten Sie den Computer neu.
Rucent88
1
fsck prüft, was sich auf der Festplatte / im Speicher befindet, aber wenn es gemountet ist, wird gerade etwas geschrieben (halb geschrieben). Deshalb werden Sie Fehler sehen, es handelt sich nicht um echte Fehler, es handelt sich um falsche Fehler. Ignoriere sie.
Strg-Alt-Delor
8

Die moderne ext-Familie von Dateisystemen berücksichtigt bei der Zuweisung von Dateien das Gleichgewicht und die Kontinuität. In ext3 und ext4 wird der Ausgleich im Allgemeinen durch Anwenden von Journaleinträgen in der angegebenen Reihenfolge und in ext4 durch Vorbelegung von Dateisystem-Extents zur Erhöhung zusammenhängender Blöcke sichergestellt. Das Verfolgen von Fragmentierungsstufen unter 20% ist Ihre Zeit möglicherweise nicht wert, insbesondere wenn Ihr System wiederholt auf einige Dateien zugreift. Ich schlage vor, diese Taktiken zu befolgen, um die Lesegeschwindigkeit für ein einzelnes Plattensystem zu erhöhen:

  • RAM vergrößern: Dies vergrößert den Cache des Dateisystems

  • Erhöhen Sie die Blockgröße: Durch Verschieben von 1 KB auf 4 KB erhalten Sie eine bessere Leseleistung für Dateien, die sich Ihrer Blockgröße nähern oder größer sind

  • Wenn Sie pedantisch sind, können Sie große und kleine Dateien nach ihrer Blockgröße in Partitionen unterteilen. Dies ist möglicherweise nur dann sinnvoll, wenn Sie Fotos, Videos und Quellcode in separaten Verzeichnissen gespeichert haben

  • Erhöhen Sie die Vorausleseeinstellung mit dem Dienstprogramm hdparm und / oder im Laptop-Modus

  • Sichern und Wiederherstellen Ihres Dateisystems auf lineare Weise, z. B. mit tar

Wenn Sie über mehrere Festplatten verfügen und RAID-Striping und / oder LVM verwenden, müssen Sie andere Faktoren berücksichtigen, z. B. die Stripe-Größe.

memnoch_proxy
quelle
4

Ja, es gibt einen bestimmten fsckAufruf (als root oder sudo):

$ fsck /dev/sdXY

Ersetzen Sie X und Y durch die richtigen Parameter für Ihren Fall (z /dev/sda1. B. ).

NICHT AUF EINER MONTIERTEN TEILUNG LAUFEN! Dies kann Ihr Dateisystem ernsthaft beschädigen.

Weitere Informationen zu Linux und zur Defragmentierung finden Sie in meiner Antwort hier .


Wenn Sie fsck nicht speziell ausführen müssen, sondern nur die Fragmentierung Ihres Laufwerks überprüfen möchten, sollte das folgende Skript (von hier übernommen ) den Trick ausführen:

#!/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"); 

Sie können es dann in dem betreffenden Verzeichnis (oder Mount-Punkt) ausführen:

$ frag_check.pl $HOME/
  1.32410691664555% non contiguous files, 1.05380668862427 average fragments.
terdon
quelle
Das ruft einfach fsck auf der Partition auf und wie wir beide wissen, zerstört es eine gemountete Partition. Gibt es eine Möglichkeit, fsck schreibgeschützt zu verwenden?
Peltier
Nicht so weit ich weiß, @Peltier. Ich dachte, Sie können in einem niedrigeren Runlevel booten, die entsprechende Festplatte aushängen und fsck ausführen. Im Ernst, Sie können die Fragmentierung auf den meisten Linux-Systemen mit ziemlicher Sicherheit ignorieren.
Terdon
@ Peltier, siehe meine aktualisierte Antwort.
Terdon
1
Ja, es ist langsam. Wohlgemerkt, es dauerte ca. 2-3 Minuten auf meiner 500 GB / home / Partition. Ich betone erneut, dass Laufwerksfragmentierung kein Problem mehr darstellt. Vor allem, wenn Sie ein EXT3-4-Dateisystem verwenden.
Terdon
1
@ KentFredric Ah! Ja in der Tat. Ich verstehe, was du jetzt meinst. Ich habe dementsprechend editiert, danke. Löschen wir die Kommentare, um die Unordnung zu beseitigen.
Terdon
0

Sie können ein Tool wie e2defrag verwenden, um diese Informationen abzurufen.

Beachten Sie, dass aufgrund der Beschaffenheit von Linux-Dateisystemen ein Defragmentieren normalerweise nicht erforderlich ist.

Lucas Kauffman
quelle
Würde es Ihnen etwas ausmachen, Ihre Antwort zu präzisieren? Ich habe versucht, diese Informationen zu erhalten e4defrag -c, aber es hat nicht funktioniert.
Peltier
@Peltier Zeigen Sie auf einen Ext3- oder Ext4-Punkt nach der -cOption als letztes Argument. Und ... "hat nicht funktioniert"? Was ist der Fehler, den Sie bekommen?
Gertvdijk
Es heißt "Fertig". Ich habe es jedoch nicht direkt auf das Gerät gerichtet, sondern auf den Mount-Punkt. Ich versuche es erneut mit dem Gerät.
Peltier
Beachten Sie, dass es viel Zeit in Anspruch nimmt, während fsck sehr schnell ist.
Peltier
Habe es gerade nochmal mit dem Gerät versucht, es steht nur "Fertig".
Peltier