InfluxDB ist eine Time-Series Datenbank, also eine Datenbank die dafür entwickelt wurde, um zeitbasierte Daten zu speichern und für Abrufe bereitzustellen. Zeitbasierte Daten, das können beispielsweise die Messwerte von Temperaturfühler sein, oder aber die Festplattenauslastung auf dem eigenen Home-Server – eben einfach alles, was einen Wert hat, der zu einem bestimmten Zeitstempel gehört.
Ich nutze InfluxDB, um die Messwerte aus Home Assistant dauerhaft zu speichern. Die HA-eigene SQLite Datenbank speichert bei mir nur für 90 Tage die Daten, kopiert jedoch jeden Messwert auch zu meinem InfluxDB-Server, wo sie dauerhaft gespeichert werden sollen. Nun war die virtuelle Disk aber nur 40GiB groß und da war auch noch Ubuntu Server drauf installiert, schließlich blieben für Influx dann nur noch ca. 17 oder 18 GiB übrig, um langfristig Daten speichern zu können.
Das mir der Festplattenspeicher mal ausgehen könnte, hatte ich Anfangs gar nicht auf dem Schirm, jedoch passierte das sogar relativ früh – nach etwa 3 Wochen Laufzeit. Also musste eine Lösung her, und ich entschied mich dafür, eine zweite virtuelle Disk mit 200G zu der VM hinzuzufügen und diese ausschließlich als Datenplatte für InfluxDB zu verwenden.
Auto-Mount der neuen Disk in Ubuntu Server
Damit die neu angelegte Disk beim System start automatisch gemounted wird, benötigen wir als erstes die UUID der Hard Disk.
$ lsblk -f
In meinem Fall hieß die Disk „vdb“. Die UUID notierte ich mir zwischenzeitlich irgendwo. Nun öffnen wir die Datei /etc/fstab
in unserem lieblings Texteditor und fügen die folgende neue Zeile hinzu
# Mount der neuen InfluxDB-Disk im Verzeichnis /var/appdata
/dev/disk/by-uuid/897ff6a-fa38-497c-88b6-d27320898bf1 /var/appdata ext4 defaults 0 1
Die neue Disk formattieren
Damit die neue Hard Disk überhaupt genutzt werden kann, muss sie noch formatiert werden. Dazu nutzte ich den folgenden Befehl:
# mkfs -t ext4 /dev/vdb
Anschließend einen kurzen Systemreboot durchführen und testen, ob der neue Mountpoint in /var/appdata
genutzt werden kann.
# touch /var/appdata/testfile.txt
Wenn die Datei erfolgreich erstellt werden konnte, hat das Mounten der neuen Disk geklappt.
InfluxDB Datenbank verschieben und Permissions anpassen
Standardmäßig befinden sich die Influx-Daten im Verzeichnis /var/lib/influxdb/
– Dies kann jedoch kontrolliert (und angepasst) werden, wenn man sich die Datei /etc/influxdb/config.toml
anschaut.
Bevor wir nun die Daten verschieben können, müssen/sollten wir InfluxDB vorher stoppen, um eine Korruption der Datenbankdateien zu vermeiden. Außerdem legen wir noch einen Unterordner ‚influxdb‘ an, in dem wir die Dateien hineinverschieben werden.
# systemctl stop influxd
# mkdir /var/appdata/influxdb
# cp -r /var/lib/influxdb/* /var/appdata/influxdb/
Wir schauen uns nun die File Permissions der Original-Dateien mittels ls -l
an und übernehmen den Besitzer und die Gruppe in die neuen Dateien. In meinem Fall war der Besitzer und die Gruppe beides influxdb, entsprechend gebe ich folgenden Befehl ein, um dies auf die kopierten Dateien zu übertragen:
# chown -R influxdb: /var/appdata/influxdb
Der -R
Parameter gibt an, dass wir chown rekursiv ausführen möchten, dass heißt das auch alle Unterordner mit einbezogen werden. Beim Benutzer:Gruppe-Parameter habe ich nur den Benutzer und ein Doppelpunkt angegeben. Das ist ausreichend, wenn wenn die Gruppe zu dem gleichen Wert geändert werden soll wie der Benutzername, also ebenfalls ‚influxdb‚.
Anschließend muss die vorher genannte config.toml angepasst werden:
bolt-path = "/var/appdata/influxdb/influxd.bolt"
sqlite-path = "/var/appdata/influxdb/influxd.sqlite"
engine-path = "/var/appdata/influxdb/engine"
Und zu guter letzt starten wir den Service für InfluxDB wieder:
systemctl start influxd
Und das sollte es auch schon gewesen sein. Den Status kann ich mit systemctl status influxd
einsehen, bzw. kann ich auch einfach die Weboberfläche von InfluxDB öffnen um zu sehen, ob alles funktioniert. Wenn die Datenbank läuft wie erwartet, können die original-Dateien in /var/lib/influxdb/
gelöscht werden. Damit ist die Verschiebung entültig abgeschlossen.