Festplatte Aufräumen #
Grundsätzlich heisst es ja, das man Ein Linux-Dateisystem nicht aufzuräumen braucht, weil es keine Fragmentierung erzeugen würde. Einerseits ist diese Aussage nicht so ganz wahr außerdem gibt es ja immer was aufzuräumen... Deshalb möchte ich hier einen Platz schaffen, um Dinge zu diesem Thema zusammenzuführen.
Sparse Files #
Siehe auch SparseFiles. Ein Programm, das ein vorhandenes Dateisystem nach Dateien absucht, in die man Sparse Bereiche einfügen kann und dieses automatisch macht, ist zum aus dem perforate Paket.
Dubletten finden #
Es kann oft vorkommen, das in einem Dateisystem mehrere identische Dateien existieren. Diese kann man u.U durch Hardlinks zusammenführen und so eine Menge Platz sparen. INsbesondere auf meinem BackupServer, der mit rsnapshot arbeitet, sammeln sich sehr viele identische Dateien aus den unterschiedlichen gesicherten Systemen an.
Ich habe zum Thema drei Debian-Pakete gefunden: fdupes, perforate und hardlink. Eine schöne Übersicht über noch eine ganze Schar anderer Programme findet sich auf der Wikipedia-Seite zu fdupes.
Die Programme, die ich getestet habe, arbeiten vom Prinzip her in zwei Schritten: Zuerst werden Dubletten gesucht und dann werden diese durch Links ersetzt. Der erste Schritt dauerte z.B. bei einem 150 GB-Verzeichnis mit 5 verwandten Backups ca. 2-4 Stunden.
fdupes macht eigentlich nur den ersten Schritt. Allerdings gibt es im Internet einige Skripte, die den zweiten sogleich erledigen. Nach dem Lesen der Dokumentation ist fdupes das einzige Programm, das vorhandene Hardlinks nicht als identisch betrachtet. Das ist insbesondere bei rsnapshot interessant, aber vor allem auch, wenn man das Programm von Zeit zu Zeit öfters anwenden will. Es findet ansonsten immer wieder die gleichen Dateien, die schon längst ge-hardlinkt wurden. Das ist ja dann auch nicht Sinn der Sache...
Nachdem ich mir die Debian-Pakete angesehen hatte, habe ich die Webseite von freedup gefunden. Das scheint sehr ausgereift zu sein und erlaubt u.a. auch, nur Dateien zu verlinken, die identische User, Persmissions und Timestamps haben. Auch erlaubt es, Dateien erst ab einer bestimmten Größe zu bearbeiten. Dadurch ergeben sich natürlich weniger Unterschiede zum Original. Insbesondere fand ich dann auch einen guten Artikel über rsnapshot und freedup.
Wer sich bei einem rsnapshot-Backup ärgert, weil durch die Hardlinks natürlich schon ein Teil der Struktur der Daten verloren geht, dem sei gesagt, das rsnapshot normalerweise die (recht aufwendige) "-H" Option von rsync nicht benutzt und deshalb sowieso alle Hardlinks zerstört wurden. Nach dem Hardlinken von Dupletten sollte man also beim Rücksichern immer so kopieren, das die Hardlinks nicht als solche mitkopiert werden, sondern als eigene Dateien.
Zu beachten ist natürlich immer, das ein Hardlink nicht einfach nur Speicher spart, sondern das Schicksal der gelinkten Dateien immer auch zusammenknüpft. Das heisst, alle Hardlinks haben das gleiche Datum, den gleichen Inhaber, die gleichen Berechtigungen und wenn eine davon geändert wird, werden alle geändert. Daher ist es also durchaus sinnvoll, wirklich in zwei Schritten zu arbeiten und die Dateiliste nochmals zu prüfen und zu bearbeiten, bevor man in seinem Filesystem alles zusammenlinkt, was nicht schnell genug auf den Bäumen ist...
Links #
- http://www.perlmonks.org/?node_id=703460 - eine kurze Lösung in Perl mit interessanter Diskussion über die Probleme
- http://liw.fi/dupfiles/ - dupfiles ist ebenfalls ein Programm, das Duplikate erkennt
- http://elonen.iki.fi/code/misc-notes/remove-duplicate-files/ - Lösung des Problems als reines Shell-Skript
- http://www.junauza.com/2010/01/how-to-find-and-clean-up-duplicate.html - fslint hat sogar eine GUI
- http://liw.fi/dupfiles/ - ein kleiner (nicht-repräsentativer) Benchmark
- http://pmatch.rubyforge.org/index.html - PMatch scheint gut durchdacht, erkennt aber scheinbar auch keine vorhandenen Hardlinks. Links zu vielen ähnlichen Projekten