Seafile – Speicherplatz gelöschter Daten freigeben

Die „File Sync and Share“ Lösung Seafile, welche sich prima als Private Cloud auf einem Raspberry Pi betreiben lässt, nutzt Daten Deduplizierung, um Speicherplatz zu sparen. Vereinfacht gesagt, werden identische Datenblöcke nur einmalig abgespeichert. Je mehr Bibliotheken es gibt oder Dateiaktionen durchgeführt werden, desto mehr ungenützte Datenblöcke gibt es. Um diese wieder freizugeben muss ein „Garbage Collector“ Tool ausgeführt werden.

Seit Seafile 4.1.1 wurde dieser Vorgang vereinfacht, indem ein fertiges Shell Skript mit ausgeliefert wird. Bevor das Skript ausgeführt werden kann, muss Seafile beendet werden. Danach kann das Skript ausgeführt werden.

./seafile-server-latest/seaf-gc.sh

Wer auf Nummer Sicher gehen möchte, startet das Skript nicht direkt mit „–dry-run“. Hierbei wird nur analysiert, ohne tatsächlich etwas zu löschen. Als fauler Mensch möchte man diese Aktion natürlich nicht regelmäßig von Hand ausführen. Also werden diese Aktionen in ein kleines Skript gepackt, welches per Cron Job automatisch ausgeführt wird. Wie sich Seafile per Skript sauber starten und stoppen lässt, habe ich in einem älteren Beitrag schon einmal beschrieben. Das wird jetzt als Grundlage benötigt. Klick Das Skript, um den Speicherplatz wieder freizugeben, kann z.B. unter „/usr/local/bin“ gespeichert werden und sieht folgendermaßen aus:

sudo nano /usr/local/bin/weekly_seafile_cleanup.sh
#!/bin/sh
#
# stop service
systemctl stop seafile.service
#
# run garbage collector script
#
/home/seafile/seafile-server-latest/seaf-gc.sh
#
# start service
systemctl start seafile.service

Sollte Seafile nicht unter „/home/seafile“ installiert sein, muss der Pfad entsprechend angepasst werden. Das fertige Skript kann nur per Cron Job einmal pro Woche ausgeführt werden. Die ausgeführten Aktionen werden zusätzlich in ein Logfile unter „/var/log“ geschrieben.

sudo crontab –e
# execute cleanup script every Sunday at 02:00 am
00 2 * * 7 sh /usr/local/bin/weekly_seafile_cleanup.sh > /var/log/weekly_seafile_cleanup.log 2>&1