AA_123rf-27433898_alphaspirit-123RF.jpg

© alphaspirit, 123RF

Dateisystem aufräumen mit Fslint

Müllabfuhr

,
Fslint hilft, Problemquellen im Dateisystem aufzuspüren und sie zu beheben oder zumindest abzumildern. Nebenbei entschlackt es auch noch die Festplatte.

Bei Dateisystemen handelt es sich im Prinzip um große, nicht sonderlich intelligente Datenbanken. Wie die klassischen Datenbanken neigen auch Dateisysteme dazu, mit der Zeit eine Menge virtuellen Staub und Fusseln (englisch: "lint") anzusetzen. Damit sie funktionsfähig bleiben, ist es gute Praxis, sie von Zeit zu Zeit zu überprüfen und gegebenenfalls zu reparieren.

Zum einen geschieht dies auf einer elementaren Ebene beim Systemstart mittels Fsck. Während dieses als Wrapper für die diversen speziellen Tools fungiert, die Dateisysteme auf der untersten (Block-)Ebene bearbeiten, berücksichtigt es keinerlei Probleme, die mit der logischen (Verzeichnis-)Struktur zu tun haben – dabei können diese Probleme beinahe ebensogroßen Schaden anrichten. Zu den typischen Problemen in der Verzeichnisschicht von Dateisystemen zählen "dangling links" (symbolische Links, die auf eine nicht mehr existierende Datei zeigen) oder Dateinamen, die auf ganz unterschiedliche Weise problematisch gewählt wurden, aber es gibt noch vieles mehr.

Eine Reihe von Entwicklern beschäftigen sich schon längere Zeit damit, Probleme auf Dateisystemebene aufzuspüren. Padraig Brady verdanken wir die recht einfach anzuwendende Lösung Fslint [1]. Die leicht verständliche Oberfläche fslint-gui vereinigt und vereinheitlicht die Benutzung von einem guten Dutzend Tools, die jeweils eine bestimmte Aufgabe adressieren (siehe Tabelle "Fslint-Werkzeuge"). Alle Tools lassen sich auch unabhängig von der Oberfläche einsetzen, was zum einen automatisierte Anwendungen ermöglicht und zum anderen effektives Arbeiten auf der Shell ermöglicht.

Fslint-Werkzeuge

Name Funktion
findup finde Dateiduplikate
findnl finde Dateien mit problematischen Namen
findu8 finde Dateien mit ungültigen UTF8-Kodierungen
findbl finde problematische Symlinks ("bad links")
findsn finde unterschiedliche Dateien mit identischen Namen ("same name")
finded finde leere Verzeichnisse ("empty directories")
findid finde Dateien unbekannter User ("dead user IDs")
findns finde ungestrippte Programme ("non-stripped executables")
findrs finde Dateien mit redundanten Leerzeichen ("redundant whitespace")
findtf finde temporäre Dateien
findul finde (vermutlich) ungenutzte Libraries ("unused libraries")
zipdir verkleinert Ext2/3-Verzeichnisse
Support-Skripte unter supprt/
md5sum_approx erzeugt MD5-Prüfsummen für Dateiteile
getffp erzeugt Pfade im Find-Format
getffl erzeugt Library-Pfade im Find-Format
fslver Fehlerbehandlung
rmlint Zusammenführen von Dateien
Support-Skripte unter fstool/
lS nach Dateigrößen sortierte Ausgabe
edu spezielle Ermittlung der Verzeichnisgröße
dupwaste von zu löschenden Dateien verschwendeter Speicherplatz
dir_size spezielle Ermittlung der Verzeichnisgröße

Fslint einrichten

Ärgerlicherweise bringen nur wenige Distributionen Fslint in ihren Repositories mit. Die meisten davon installieren Fslint im Verzeichnis /usr/share/fslint/ (so auch Ubuntu 14.04 LTS) oder in einem im Pfad ($PATH) enthaltenen Verzeichnis. In den meisten Fällen müssen Sie aber den Tarball von der Fslint-Homepage herunterladen (Listing 1). Eine Installation im engeren Sinn kann entfallen, da es sich um eine Kombination aus Python-Code (GUI) und Shell-Skripten (Tools) handelt.

Sie entpacken das Archiv einfach in ein beliebiges Verzeichnis, das Sie dann in $PATH aufnehmen – hier bietet sich aus Konsistenzgründen /usr/share/fslint/ an. Um die korrekte Lokalisierung zu erhalten, wechseln Sie anschließend in fslint/po/ und rufen dort make auf. Anschließend müssen Sie noch den Pfad entsprechend ergänzen, um das Programm aufrufen zu können. Zum Ausprobieren genügt die Variante aus der vorletzten Zeile von Listing 1; für eine dauerhafte Änderung müssen Sie diese Zeile in der ~/.bashrc ergänzen oder editieren.

Listing 1

$ cd /usr/share/
$ sudo wget http://www.pixelbeat.org/fslint/fslint-2.44.tar.gz
$ sudo tar xf fslint-2.44.tar.gz
$ cd fslint-2.44/po/
$ sudo make
$ cd ../..
$ sudo rm fslint-2.44.tar.gz
$ PATH=$PATH:/usr/share/fslint-2.44/ && export PATH
$ fslint-gui &

Um Fslint in die Paketverwaltung des genutzten Systems zu integrieren, müssen Sie es selbst paketieren. Anweisungen dazu für viele gängige Distributionen bieten die Fslint-Homepage sowie die FAQ des Tools [2].

Unter der Haube

Es lohnt, die jeweils als Shell-Skript realisierten Tools des Fslint-Pakets einmal näher anzusehen. So dient beispielsweise findup dazu, Duplikate von Dateien aufzufinden. Das Skript erweist sich als hervorragend strukturiert und gut dokumentiert (Listing 2). Es verfügt über eine Reihe von interessanten Details, etwa, um die Dateiduplikate aus dem Strom von Dateinamen herauszufiltern.

Listing 2

[...]
# The following optional block, md5sums a small sample of each file,
# which can help when there are many files of the same size,
# even more so if they are large. This usually adds a small amount of
# runtime, however it can save a large amount of time in certain situations.
if "$script_dir"/supprt/md5sum_approx </dev/null 2>/dev/null; then
    xargs -r0 "$script_dir"/supprt/md5sum_approx |
    sort |                     #group duplicate files together
    uniq --all-repeated -w32 | #pick just duplicates
    cut -d' ' -f3- |           #get filenames
    sort |                     #sort by paths to try to minimise disk seeks
    tr '\n' '\0'               #delimit names with \0
else
    cat
fi |
[...]

Weiterhin verfügen die Shell-Skripte über zusätzliche Optionen, die in der grafischen Oberfläche nur indirekt zur Verfügung stehen. So fügt -m ("merge") die gefundenen Dateien durch die Verwendung von Hardlinks zusammen, wohingegen -d ("delete") alle bis auf eine einzige Kopie identischer Dateien entfernt. Mit -t ("test") zeigt Findup die identischen Files an, ohne eine Aktion auszuführen. Die Ausgabe lässt sich mit dem Skript in eine externe Datei umleiten, manuell bearbeiten und anschließend weiterverwenden.

Links: Hart und weich

Verknüpfungen zwischen Dateien und Verzeichnissen lassen sich auf vier unterschiedliche Weisen erzeugen, wie die Manpage zu ln erklärt. Links auf bestehende Ziele lassen sich als harte (physikalische) Links – nur für Dateien innerhalb ein und desselben Dateisystems – anlegen und zeigen auf denselben Inode. Weiche oder symbolische Links dürfen Sie für beliebige Ziele erzeugen; das System interpretiert sie zur Laufzeit als relative Links relativ zum Elternverzeichnis. Symlinks dürfen auch auf Verzeichnisse zeigen und können die Grenzen des eigenen Dateisystems überschreiten.

Die Verwendung von find in den Skripten hat einen speziellen Vorteil: So lassen sich alle relevanten Optionen dieses Befehls – beispielsweise die Rekursionstiefe (-maxdepth und -mindepth) – beim Aufruf auf der Befehlszeile direkt übergeben. Das beschleunigt unter Umständen durch gezielte Einschränkungen die Bearbeitung erheblich oder schließt bestimmte Verzeichnisse und Dateien aus. Verzeichnisse lassen sich beispielsweise wie in der ersten Zeile von Listing 3 gezeigt ausschließen; für einzelne Dateien gelingt das wie in der zweiten Zeile gezeigt.

Listing 3

$ findup \( -path "*/.svn" \) -prune -o
$ findup \( ! -name "*.tex" \)

Während die Fslint-Tools, deren Namen mit find beginnen, zum Auffinden von Dateien und Verzeichnissen dienen, übernehmen die Skripte im Verzeichnis fslint/supprt/ alle Aktionen. Für einige davon existieren gleich zwei Varianten: So löschen beziehungsweise vereinigen ("merge") sowohl fixdup.sh als auch fixdup die ausgewählten Dateien. Beide bedienen sich des durch findup erzeugten Formats, wobei es sich bei Fixdup um ein Python-Skript handelt, das etwas schneller als die Shell-Skript-Variante arbeitet. Unter fstool/ gibt es vier weitere interessante Skripts. Bei komplexen Ergebnismengen (Abbildung 1) kommen Sie eventuell über einen Umweg am besten zum Ziel.

Abbildung 1: In der Praxis erhalten Sie oft sehr inhomogene Ergebnislisten. Hier kann der Export in eine externe Datei, die Sie anschließend manuell bearbeiten, eine gute Alternative bieten.

Auf Find basierende Tools zum Systemcheck

Die Fslint-Tools basieren im Wesentlichen auf dem GNU-Befehl find. Dieser ist sehr leistungsfähig und liest Dateisysteme stückweise ein, ein Verzeichnis nach dem anderen. Idealerweise sollte dies im Single-User-Modus erfolgen, den Sie bereits beim Booten auswählen oder später als Superuser aktivieren. Lässt sich dieser Modus aus bestimmten Gründen nicht verwenden, weil beispielsweise ein Server weiter erreichbar sein muss, kann es zu Problemen kommen. So entstehen möglicherweise Dateidubletten in Verzeichnissen, die Fslint bereits durchlaufen hat, oder ein Benutzer modifiziert bereits erfasste Dateien.

So schön die Algorithmen der Fslint-Tools ausfallen, bei großen Dateisystemen kommen sie wie alle auf find basierenden Techniken an ihre Grenzen. Zum einen wächst die Ausführungszeit proportional zur Dateisystemgröße. Da steht bei den heutigen TByte-Platten unter Umständen Nachtarbeit an, und auch dann ist nicht sichergestellt, dass die Tools alle relevanten Dateien auch finden: Sie könnten ja zwischenzeitlich in bereits bearbeiteten Verzeichnissen entstehen. Schwer wiegt auch oft das zweite Manko: Nicht nur die Bearbeitungszeit wächst mit zunehmender Dateisystemgröße, dasselbe gilt auch für den benötigten Hauptspeicher. Im Zweifelsfall greift das System dann auf den Auslagerungsspeicher zurück, was die Bearbeitung weiter verlangsamt.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 7 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Hausputz
    Dateisysteme neigen im Laufe der Zeit zu Inkonsistenzen – da macht auch Linux keine Ausnahme. Doch mit Fslint halten Sie Ihr System stets taufrisch.
  • Gnomogramm
Kommentare

Infos zur Publikation

LU 12/2017: Perfekte Videos

Digitale Ausgabe: Preis € 5,95
(inkl. 19% MwSt.)

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

HINWEIS ZU PAYPAL: Die Zahlung ist ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!

Stellenmarkt

Aktuelle Fragen

Broadcom Adapter 802.11n nachinstallieren
Thomas Mengel, 31.10.2017 20:06, 2 Antworten
Hallo, kann man nachträglich auf einer Liveversion, MX Linux auf einem USB-Stick, nachträglich...
RUN fsck Manually / Stromausfall
Arno Krug, 29.10.2017 12:51, 1 Antworten
Hallo, nach Absturz des Rechners aufgrund fehlendem Stroms startet Linux nicht mehr wie gewohn...
source.list öffnet sich nicht
sebastian reimann, 27.10.2017 09:32, 2 Antworten
hallo Zusammen Ich habe das problem Das ich meine source.list nicht öffnen kann weiß vlt jemman...
Lieber Linux oder Windows- Betriebssystem?
Sina Kaul, 13.10.2017 16:17, 6 Antworten
Hallo, bis jetzt hatte ich immer nur mit
IT-Kurse
Alice Trader, 26.09.2017 11:35, 2 Antworten
Hallo liebe Community, ich brauche Hilfe und bin sehr verzweifelt. Ih bin noch sehr neu in eure...