Samba-Papierkorb

Automatisches Löschen des Samba-Papierkorbs auf einem FreeNAS/NAS4Free Server

Samba kann auf Netzwerkfreigaben einen Papierkorb, ähnlich dem Windows-Papierkorb, einrichten. Auch in FreeNAS und NAS4Free kann diese Funktion mittels Samba in der Web-Administration unter Dienste|CIFS/SMB|Freigaben aktiviert werden.

Dorthin werden alle gelöschten Dateien und Ordner einer Freigabe verschoben.  Im Vergleich zum z.B. Windows-Papierkorb kann die maximale Größe nicht eingestellt werden, so dass im Laufe der Zeit die Größe deutlich zunimmt. Da alte Dateien nicht automatisch gelöscht werden, kann u.U. der Samba-Papierkorb die gesamte Freigabe belegen.

Um das zu verhindern, kann man mittels Cron-Job und einem kleinen Shell-Skript den Papierkorb regelmäßig und automatisch bereinigen.

Im Dateisystem von FreeNAS/NAS4free ist der Samba-Papierkorb im versteckten Ordner .recycle repräsentiert. Dort findet man alle gelöschten Dateien und Ordner einer Freigabe von allen Anwendern. Die nachfolgende Methode löscht Dateien und Ordner endgültig aus diesem Ordner, die vor einer anzugebenden Anzahl von Tagen dorthin verschoben (gelöscht) wurden.

  1. Neue Datei, z.B. delrecycle.sh, erzeugen
  2. delrecycle.sh mit folgendem Inhalt füllen:

    #!/bin/sh
    find /mnt/[Einhängepunkt]/.recycle/* -atime +[Alter] -exec rm -rf '{}' \; 
    find /mnt/[Einhängepunkt]/.recycle/ -depth -type d -empty -exec rmdir {} \;

    Passe [Einhängepunkt] und [Alter] (Alter der Dateien im Papierkorb in Tagen, die gelöscht werden sollen) an.

    Update 12.07.2015: „gilada“ wies mich in einem Kommentar auf eine Fehlermeldung hin, die bei der Anwendung dieses Skripts auftrat: find: missing argument to `-exec'. Offensichtlich muss man bei aktuellen UNIX-Versionen das Semikolon (;) am Ende jeder Zeile mit eine Backslash (\) maskieren. Bei meiner alten FreeNAS-Version war das nicht nötig. Ich habe die Skripte entsprechend angepasst. Danke an „gilada“ für den Hinweis.

    Beispiel: Ist dein Einhängepunkt netzwerk und du willst, dass alle Dateien im Papierkorb gelöscht werden, die vor 90 Tagen oder vorher dorthin verschoben wurden, sieht das Skript delrecycle.sh wie folgt aus:

    #!/bin/sh
    find /mnt/netzwerk/.recycle/* -atime +90 -exec rm -rf '{}' \;
    find /mnt/netzwerk/.recycle/ -depth -type d -empty -exec rmdir {} \;

    Bei mehreren Freigaben muss das obige Skript entsprechend erweitert werden: Heißt ein weiterer Einhängepunkt network2, sieht das Skript wie folgt aus:

    #!/bin/sh
    find /mnt/netzwerk/.recycle/* -atime +90 -exec rm -rf '{}' \;
    find /mnt/netzwerk/.recycle/ -depth -type d -empty -exec rmdir {} \;
    find /mnt/netzwerk2/.recycle/* -atime +90 -exec rm -rf '{}' \;
    find /mnt/netzwerk2/.recycle/ -depth -type d -empty -exec rmdir {} \;
  3. Das Skript delrecycle.sh auf eine Freigabe hochladen.
  4. Cronjob unter System|Erweitert|Cron mit root-Rechten erstellen, der folgenden Befehl täglich ausführt:
    sh /Pfad/zum/Einhängepunkt/delrecycle.sh

    Nach dem obigen Beispiel lautet der Befehl:

    sh /mnt/netzwerk/delrecycle.sh
    Cronjob-Dialog in FreeNAS

    Cronjob in FreeNAS

    Im Screenshoot wird der o.g. Befehl am ersten und fünfzehnten Tag jeden Monats um 0:00 Uhr ausgeführt.

Besonderheiten des Samba-Papierkorbs

Da der Samba-Papierkorb deutlich anders aufgebaut und zu benutzen ist, wie die Desktop-Papierkörbe von Windows, Mac OS X und Linux, kann der Artikel Besonderheiten des Samba-Papierkorbs weiterhelfen.

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert