Skip to content

Doppelte Dateien suchen ...

linux Festplatten haben das Geheimnis eingebaut, immer zu klein zu sein. Oder andersherum Daten verhalten sich wie ideale Gase, sie nutzen den zur Verfügung stehenden Platz optimal aus. Um rechtzeitig einzugreifen, habe ich gestern begonnen, unser NAS aufzuräumen.

Das Programm fdupes hat mir dabei gute Dienste erwiesen. Es durchsucht ein Verzeichnis und listet die dort enthaltenen doppelten Dateien auf, dazu vergleicht es zu erst die Grösse, dann die md5-Prüfsummen und zuletzt werden die Dateien noch Bit-für-Bit miteinander verglichen. Das dauert zwar relativ lange, ist dafür aber auch sehr zuverlässig.

Der Parameter, für das ich das Programm "liebe", ist -L. Damit werden Hardlinks von doppelten Dateien erstellt. Die Dateien sind dann mehrfach auf der Festplatte verfügbar, aber nur ein einziges Mal gespeichert. (Hardlinks funktionieren nur innerhalb eines Dateisystems).

fdupes -rL <verzeichnis>

Durchsucht das verzeichnis nach doppelten Dateien und erstellt die Links. Faszinierend, was man damit an Platz sparen kann.

Das Durchsuchen von rund einem Terrabyte auf dem NAS hat gestern rund zehn Stunden gedauert und reichlich Platz gespart.

fdupes ist in nahezu jeder Linuxdistribution verfügbar.

Trackbacks

Keine Trackbacks

Kommentare

Ansicht der Kommentare: Linear | Verschachtelt

The Compiler am :

*Hui! fdupes hab ich bisher schon gekannt, -L jedoch nicht. Klingt jedenfalls verdammt praktisch!

Jedoch hat mein fdupes in Archlinux kein -L... jedoch scheint hier 1.4 in den Quellen zu sein, obwohl 1.5 schon raus ist. Gleich mal gucken, wen ich da am besten nerve, damit 1.5 auch in die Quellen kommt ;-)

Auf der anderen Seite könnt ich mir auch einfach kurz ein Skript schreiben das dasselbe macht. Hm, mal gucken was schneller geht :-P

Dirk Deimeke am :

*Huch, da bin ich jetzt aber verblüfft, dass in Ubuntu LTS (Basis von Bodhi) eine Prerelease-Version (1.50-PR2-3) zu finden ist.

Seraphyn am :

*Auch in Wheezy findet sich die Version fdupes 1.50-PR2
ohne -L als Option.
Hatte mich schon gewundert, kannte Hardlinks unter fdupes auch noch nicht.

Dirk Deimeke am :

*Ich wollte fdupes benutzen, um doppelte zu finden und bin mehr oder weniger "per Zufall" auf die Option gestossen.

Das klappt echt grossartig.

Andreas Abendroth am :

*Verhält sich fdupes rekursiv, d. h., untersucht es alle Unterverzeichnisse gleich mit oder bleibt es im Verzeichnis, in dem es gestartet wurde?

Andreas Abendroth am :

*Oh, habe ich übersehen! Danke für den Hinweis!

Dirk Deimeke am :

*Stell Dich auf eine lange Laufzeit ein, wenn das externe Dateisysteme (NFS, USB, ...) sind.

Andreas Abendroth am :

*Danke für den Hinweis, dies wäre ein primärer Einsatzzweck für mich.

The Compilerr am :

*Die prerelease ist sogar in Debian Stable zu finden...

Hab jetzt nochmals nachgeforscht, auch die Option -L ist ein Debian-Patch, somit wird das mit nicht-debian-distris nicht so gehen.

Hab ausserdem noch https://github.com/sahib/rmlint gefunden, was angeblich viel schneller sein soll, allerdings per default auch keine bit-für-bit-überprüfung macht. Dafür räumt es wahlweise auch noch anderes auf.

Dirk Deimeke am :

*RMLint sieht auch gut aus. Interessant wäre es, wie schnell fdupes im Vergleich zu rmlint mit "paranoid"-Option ist. Alles andere ist Augenwischerei ...

Christian Pasold am :

*Hallo Dirk, mich würde interessieren wie das mit den Hardlinks im Detail abläuft. Welche der Dateien, wenn sie mehrfach vorhanden sind, bleibt als Datei erhalten und in welchem Verzeichnis existiert dann nur ein Link darauf?

Dirk Deimeke am :

*Weisst Du was Hardlinks sind und wie ein Linux-Dateisystem funktioniert?

Kurz:

Softlinks sind ein Verweis auf einen anderen Verzeichniseintrag, die funktionieren auch Filesystemübergreifend. Wenn Du hier die verlinkte Datei löscht, ist sie nicht mehr verfügbar.

Hardlinks Verweisen auf den gleichen inode, an dem eine Datei beginnt. Die funktionieren nur im gleichen Dateisystem. Wenn Du hier die verlinkte Datei löscht, ist sie immer noch verfügbar bis der letzte Link auch gelöscht ist.

Probiere das einmal mit einer Datei selber aus.

echo "test" > test.txt
ln test.txt link.txt
ls -l test.txt link.txt
cat test.txt
rm test.txt
cat link.txt

Sebastian hat in der August-Ausgabe von RadioTux das Prinzip ausführlich erläutert.

Christian Pasold am :

*Super, vielen Dank für die Erklärung und auch für den Link.

Emanuel am :

*Klingt ja ganz toll das nette fDupes aber kann man sich nicht mindestens einen Schritt sparen?

Filename, Fileattribute und MD5-Checksum/Sha-Checksum zu vergleichen sollte doch ausreichen?

Vorallem halt deswegen, weil bei Inkonsistenz der Datei doch sowieso die Checksum sich ändert? Lg
;-)

Dirk Deimeke am :

*Genau diese Annahme trifft das Florian gefundene rmlint. Mir macht dieses zusätzliche Mass an Sicherheit nichts aus. Ganz im Gegenteil, auch wenn es unnötig scheint.

Peter Wein am :

*Ich habe Ubuntu 14.04, kann aber die Option -L nicht finden, ich bräuchte die aber dringend. Eigentlich auch für meine Synology...


apt-cache policy fdupes
fdupes:
Installiert: 1.51-1
Installationskandidat: 1.51-1
Versionstabelle:
*** 1.51-1 0
500 http://de.archive.ubuntu.com/ubuntu/ trusty/main amd64 Packages
100 /var/lib/dpkg/status

Es sieht also aus, als wenn sie die Option wieder herausgenommen haben. Ich brauche die genaue Source mit revision, damit ich es versuchen kann selbst zu bauen...

Vielen Dank im Voraus!

Dirk Deimeke am :

*In Debian Squeeze ist der Link noch drin, Version 1.50-PR2-3. Das Paket müsstest Du direkt einspielen können.

Warof am :

*Heißt aber auch, dass wenn eine Datei geändert wird, sich das auf die andere auswirkt, weil es im Prinzip die selbe Datei ist.

Dirk Deimeke am :

*Damit hast Du selbstverständlich Recht. Das ist allerdings bei Softlinks genauso.

Kommentar schreiben

Gravatar, Favatar, Pavatar, Identica, Twitter, MyBlogLog Autoren-Bilder werden unterstützt.
BBCode-Formatierung erlaubt
Umschließende Sterne heben ein Wort hervor (*wort*), per _wort_ kann ein Wort unterstrichen werden.
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.
:'(  :-)  :-|  :-O  :-(  8-)  :-D  :-P  ;-) 
Formular-Optionen