Ich möchte eine Karte erstellen, welche Dateien wo auf die Festplatte geschrieben werden. Es sollte so etwas wie einen Verzeichnisbaum ausgeben und für jede Datei eine Liste von Sektoren ([10-20], [80-90], [60-70]), die zusammen die gesamte Datei bilden. zB um eine Visualisierung wie den alten Windows-Defragmentierer zu erstellen:
Gibt es dafür Tools?
linux
hard-drive
Scott
quelle
quelle
Disk Usage Analyser
(baobab
). Dabei wird keine Fragmentierung angezeigt. Für einzelne Dateien (keine Verzeichnisse) können Sie jedoch die Sektoren anzeigen, die sie mit einem der in dieser Antwort beschriebenen Tools belegen . Ich kenne kein GUI-Tool.Antworten:
Das Standardwerkzeug für Debian-Ableitungen ist
Disk Usage Analyser
(baobab
), dies zeigt jedoch keine Fragmentierung.Die einzige Möglichkeit, Fragmentierung anzuzeigen, besteht darin, einen Befehlszeilenprozess Datei für Datei mit einem der in dieser Antwort beschriebenen Tools zu verwenden .
Zu diesem Zweck schrieb ich ein Skript mit
hdparm --fibmap
:Beachten Sie, dass Sie, obwohl ich das Skript so dokumentiert habe, dass es eine ganze Disc von ihrem Einhängepunkt aus scannt, die sortierten Ergebnisse für ein bestimmtes Verzeichnis erhalten können. Ich empfehle, dies zunächst in einem kleinen Verzeichnis zu tun, um sicherzustellen, dass es sinnvolle Ergebnisse liefert.
Der Prozess ist ziemlich langsam und die Sortierung bedeutet, dass Sie keine Ergebnisse erhalten, bis jede Datei gescannt wurde. Ich habe daher eine Diagnose hinzugefügt, sobald jede zu meldende Datei
stderr
gefunden wurde. Die Escape-Sequenz ist fürxterm
und setzt voraus,$COLUMNS
dass sie vonshopt -s checkwinsize; export COLUMNS
in~/.bashrc
(oder einer anderen Initialisierungsdatei) festgelegt wird. Durch das Vermeiden von Zeilenumbrüchen wird das Skript durch Scrollen verlangsamt.Ich habe
[ ... ] &&
stattif [ ... ]; then
verwendet, um die Verschachtelung zu reduzieren und das Skript abzukürzen. Diereturn 1 2>/dev/null; exit 1;
Sequenz ist ein Trick, mit dem ich einen Fehlercode zurückgegeben habe, unabhängig davon, ob das Skript normal oder von einem.
/source
-Befehl aufgerufen wird .quelle
find
Befehl gerade einen wichtigen Parameter hinzugefügt :-mount
Stoppt das Durchlaufen anderer gemounteter Dateisysteme, was insbesondere auf gemounteten Netzwerkfreigaben zu Fehlern führt./
und auf anderen physischen Bereitstellungen, z. B./boot/efi
auf Netzwerkfreigaben oder auf bestimmten Dateisystemtypen, z. B., einwandfrei funktionierttmpfs
. Ich weiß nicht, wie ich damit umgehen soll, oder gebe zumindest eine Fehlermeldung aus, dass das Dateisystem nicht unterstützt wird.Normalerweise schreibe ich in Python. Wenn also jemand an einer Python-Version der Antwort von AFH interessiert ist. Meins hängt vom
filefrag
Befehl ab. Dabei wird der Verzeichnisbaum beginnend mit dem Argument cli durchlaufenroot
und der Dateiname, die Dateigröße und die Blockgröße erfasst. Es kann nützlich sein, Argumente hinzuzufügen, um die Blockgröße und dergleichen anzugeben, falls erforderlich.quelle