Einige der in diesem Beitrag geteilten Links sind Affiliate-Links. Wenn du auf den Link klickst und etwas kaufst, erhalten wir eine Affiliate-Provision ohne zusätzliche Kosten für dich.
Das effiziente Management von Speicherplatz ist für viele Nutzer eines Synology NAS (Network Attached Storage) eine wichtige Aufgabe. Im Laufe der Zeit sammeln sich auf einem NAS viele Dateien an, die nicht mehr benötigt werden und wertvollen Speicherplatz belegen. Eine Lösung hierfür ist die automatisierte Bereinigung von Dateien anhand ihres Alters und ihrer Größe. In diesem Artikel zeigen wir dir, wie du mithilfe eines Bash-Skripts auf deinem Synology NAS Dateien in Abhängigkeit vom Alter automatisiert löschen kannst.
Ich selber habe meinen Downloads Ordner von meinen Windows Clients auf meine Synology RS1221+ ausgelagert. Genau dafür habe ich auch das Script geschrieben.
Warum Dateien automatisiert löschen?
Durch das regelmäßige Löschen unnötiger Dateien kannst du sicherstellen, dass immer ausreichend Speicherplatz zur Verfügung steht und die Leistung deines Synology NAS nicht durch veraltete oder überflüssige Dateien beeinträchtigt wird. Darüber hinaus hilft es, die Verwaltung der gespeicherten Daten effizienter zu gestalten und eine bessere Übersicht zu behalten.
Anforderungen für die Automatisierung
Um das Löschen von Dateien zu automatisieren, benötigen wir ein Bash-Skript, das mithilfe des Synology Task Schedulers in regelmäßigen Abständen ausgeführt wird. Das Skript wird so konfiguriert, dass es:
- Dateien, die älter als 6 Monate sind und größer als 10 MB, löscht.
- Dateien, die kleiner oder gleich 10 MB sind und älter als 12 Monate, löscht.
- .exe und .msi Dateien, die älter als 2 Monate sind, löscht.
Natürlich können die Zeiträume und die Datei Typen angepasst werden.
Zusätzlich soll das Skript die Anzahl und die Gesamtgröße der gelöschten Dateien pro Kategorie sowie eine Gesamtausgabe der Anzahl und Größe aller gelöschten Dateien ausgeben.
Das Bash-Skript
Hier ist das Bash-Skript, das die beschriebenen Anforderungen erfüllt:
#!/bin/bash
# Verzeichnis, das überprüft werden soll
DIR="/home/user.name/Devices/PC-01/Downloads"
# Zähler für die Anzahl und Größe der gelöschten Dateien
deleted_large_files=0
deleted_small_files=0
deleted_exe_msi_files=0
deleted_large_files_size=0
deleted_small_files_size=0
deleted_exe_msi_files_size=0
# 1. Lösche Dateien, die älter als 6 Monate sind und größer als 10 MB
for file in $(find "$DIR" -type f -size +10M -mtime +180); do
file_size=$(du -m "$file" | cut -f1) # Größe der Datei in MB
rm "$file"
((deleted_large_files++))
((deleted_large_files_size+=file_size))
done
# 2. Lösche Dateien, die kleiner oder gleich 10 MB sind und älter als 12 Monate
for file in $(find "$DIR" -type f -size -10M -mtime +365); do
file_size=$(du -m "$file" | cut -f1) # Größe der Datei in MB
rm "$file"
((deleted_small_files++))
((deleted_small_files_size+=file_size))
done
# 3. Lösche .exe und .msi Dateien, die älter als 2 Monate sind
for file in $(find "$DIR" -type f \( -name "*.exe" -o -name "*.msi" \) -mtime +60); do
file_size=$(du -m "$file" | cut -f1) # Größe der Datei in MB
rm "$file"
((deleted_exe_msi_files++))
((deleted_exe_msi_files_size+=file_size))
done
# Berechnung der Gesamtanzahl und -größe der gelöschten Dateien
total_deleted_files=$((deleted_large_files + deleted_small_files + deleted_exe_msi_files))
total_deleted_size=$((deleted_large_files_size + deleted_small_files_size + deleted_exe_msi_files_size))
# Ausgabe der Anzahl und Größe der gelöschten Dateien
echo "Anzahl der gelöschten Dateien größer als 10 MB und älter als 6 Monate: $deleted_large_files"
echo "Gesamtgröße der gelöschten Dateien größer als 10 MB und älter als 6 Monate: ${deleted_large_files_size} MB"
echo "Anzahl der gelöschten Dateien kleiner oder gleich 10 MB und älter als 12 Monate: $deleted_small_files"
echo "Gesamtgröße der gelöschten Dateien kleiner oder gleich 10 MB und älter als 12 Monate: ${deleted_small_files_size} MB"
echo "Anzahl der gelöschten .exe und .msi Dateien älter als 2 Monate: $deleted_exe_msi_files"
echo "Gesamtgröße der gelöschten .exe und .msi Dateien älter als 2 Monate: ${deleted_exe_msi_files_size} MB"
# Gesamtausgabe der Anzahl und Größe der gelöschten Dateien
echo "--------------------------------------------------------"
echo "Gesamtanzahl der gelöschten Dateien: $total_deleted_files"
echo "Gesamtgröße der gelöschten Dateien: ${total_deleted_size} MB"
- “/home/user.name/Devices/PC-01/Downloads” muss durch den entsprechenden Pfad ersetzt werden
- Die Zahlen +180 sind das Mindestalter der Dateien die gelöscht werden sollen.
- -name “.exe” -o -name “.msi” Hier können die Dateitypen definiert werden.
Installation und Automatische Ausführung mit dem Synology Task Scheduler
Mit dem Synology Task Scheduler können unter anderem Bash Scripte vollautomatisch ausgeführt werden.
Schritt 1: Script Abspeichern
Erst einmal muss das Script in einem Ordner abgespeichert werden. Ich habe für diesen Zweck den Ordner “Scripte” in dem Home Ordner meines Adminaccounts angelegt.
Das zweite “update_blocklist.sh” Script importiert übrigens alle 10 Minuten die IPs von Angreifern und pflegt diese automatisch in die entsprechende Datenbank der Synology ein. So werden die Angreifer direkt blockiert. Es ist quasi CrowdSec für Synology.
Hinweis: Ausschließlichen Admin Account nutzten
Es ist empfehlenswert, einen Admin Account nur für administrative Zwecke zu benutzten. Der Account der für die normale Nutzung verwendet wird sollte keine Admin Rechte haben.
Über die File Station können wir die Datei ganz einfach dort hochladen oder eine Datei erstellen und das Script dort einfügen.
Schritt 2: Task anlegen
Um das Script automatisch auszuführen, legen wir eine Aufgabe im Synology Task Scheduler an. Dafür rufen wir das Task Scheduler Menü im Control Center auf.
Dort gehen wir über “Create” -> “Scheduled Task” -> “User Definded Script”
Dort muss dann ein Name und der ausführende User angegeben werden.
Unter dem Tab “Schedule” kann der Zeitplan angelegt werden. Bei mir läuft das Script einmal Täglich um 1 Uhr Nachts.
Unter den “Task Settings” müssen wir den Befehl hinterlegen, der das Script ausführt:
/bin/bash /volume1/homes/admin/Scripte/cleanup.sh
Natürlich muss der Pfad angepasst werden. Mit einem klick auf “OK” Speichern wir die Ausgabe. Nun werden die Daten nach Alter und Dateityp gelöscht.
Durch die Verwendung dieses Bash-Skripts und den Synology Task Scheduler kannst du den Speicherplatz auf deinem NAS effizient verwalten und unnötige Dateien basierend auf ihrer Größe und ihrem Alter automatisch löschen lassen. Diese Automatisierung spart Zeit, hält dein System sauber und sorgt dafür, dass dein Synology NAS immer optimale Leistung bietet.