Angesichts der hohen Auflösungen moderner IP-Kameras kann es vorkommen, das Speichermedien zu 100% belegt werden. Der interne Zoneminder Filter benötigt für Datenbankoperationen allerdings ein wenig freien Speicher auf der Festplatte. Wenn überhaupt kein Festplattenspeicher mehr verfügbar ist, ist die Datenbank wahrscheinlich ebenfalls eingefroren/nicht verfügbar.
Anzeigen Aller Aufnahmen
Um alle Aufnahmen von Zoneminder anzuzeigen ist folgender Befehl nötig:
1 |
sudo find /var/cache/zoneminder/events/ -mindepth 3 -maxdepth 3 -type d -exec ls -ld {} + |
Archivierte Ereignisse nicht löschen
Werde Aufnahmen archiviert, sollen diese in der Regel nicht gelöscht werden. Mit folgendem Befehl werden Archivierte Aufnahmen angezeigt:
1 2 3 4 5 6 |
sudo mysql -N -b -r -e "select Id from zm.Events where Archived = 1;" +-----+ | 280 | | 284 | | 386 | +-----+ |
Alle Aufnahmen außer den Archivierten ( .s obere Ausgabe des mysql Befehls ) werden wie folgt aufgelistet:
1 |
sudo find /var/cache/zoneminder/events/ -mindepth 3 -maxdepth 3 -type d ! -name ".280" ! -name ".284" ! -name ".386" -exec ls -ld {} + |
Die Ausgabe enthält zwei wichtige Informationen: die Ereignis-ID und den tatsächlichen Pfad.
1 |
/var/cache/zoneminder/events/5/18/12/14/.448512 -> 06/45/12 |
In diesem Fall ist .448512 der symbolische Link des Ereignisses, der auf die Unterordner 06/45/12 verweist. Der Name des symbolischen Links enthält auch die Ereignis-ID (448512). Durch Entfernen des symbolischen Links und Hinzufügen der Unterordner zum Pfad erhalten wir den tatsächlichen Pfad, in dem die Aufzeichnung gespeichert ist:
1 |
/var/cache/zoneminder/events/5/18/12/14/06/45/12 |
Löschen der Aufnahme und der Informationen in der Datenbank:
Nun, da der tatsächliche Pfad bekannt ist, kann er gelöscht werden:
1 |
sudo rm -rf /var/cache/zoneminder/events/5/18/12/14/06/45/12 |
Und der dazugehörige Link ebenfalls:
1 |
sudo rm -f /var/cache/zoneminder/events/5/18/12/14/.448512 |
Sowie die entsprechenden Tabellen in der Datenbank:
1 2 3 |
sudo mysql> DELETE FROM zm.Events WHERE Id = 448512; sudo mysql> DELETE FROM zm.Frames WHERE EventId = 448512; sudo mysql> DELETE FROM zm.Stats WHERE EventId = 448512; |
Script zum automatischen Löschen
Um nicht jede Aufnahme einzeln, wie in o.g. Schritten für jedes Event, löschen zu müssen existiert ein Script auf GitHub, das wie folgt heruntergeladen und ausführbar gemacht werden kann:
1 2 |
wget https://www.claudiokuenzler.com/downloads/scripts/zoneminder-event-cleanup.sh chmod 755 zoneminder-event-cleanup.sh |
Im Scriptheader müssen dem System entsprechend einige Anpassungen vorgenommen werden:
1 2 3 4 5 6 7 |
# User variables olderthan=2 # Defines the minimum age in days of the events to be deleted zmcache=/var/cache/zoneminder/events # Defines the path where zm stores events mysqlhost=localhost # Defines the MySQL host for the zm database mysqldb=zm # Defines the MySQL database name used by zm mysqluser=zmuser # Defines a MySQL user to connect to the database mysqlpass=secret # Defines the password for the MySQL user |
Das Script dann einfach ausgeführt werden:
1 |
sudo ./zoneminder-cleanup.sh |
Speefak | www.claudiokuenzler.com