SD-Karte Daten loggen

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

N1d45
Beiträge: 121
Registriert: 5. Jan 2020 14:26
Answers: 2

SD-Karte Daten loggen

Beitrag von N1d45 »

Ich habe openhabian auf einem Pi 4 laufen. Das Image ist auf einer SD-Karte.

Nun ist es ja nicht Ratsam die Daten (Temperatur, Schaltzustände etc.) zu loggen und auf der SD-Karte zu speichern, da diese den Vermehrten Schreibzugriff nicht gut findet und bei Zeiten kaputt geht.

Vor ca. 2 Jahren wo ich mein erstes openhabian installiert hatte, hatte ich eine Anleitung gefunden, wo die geloggten Daten im RAM zwischengespeichert werden, und nur zu bestimmten Zeitpunkten auf die SD-Karte geschrieben werden. (Zumindest habe ich das so verstanden)

https://www.youtube.com/watch?v=lCb0Zi23XYw
https://ratgeber.appandhome.de/skripte/ ... ersistence

Dies lief bis heute ohne Probleme, die SD-Karte hat es also gut zwei Jahre überlebt und lebt immernoch.

Jetzt bin ich auf das neuste openhabian mit openHAB3.2 gewechselt.

Da ich wieder gern die Daten loggen würde, um mir diese Daten in Graphen anzeigen zu lassen, und inzwischen etwas Zeit vergangen ist, wollte ich Fragen ob es inzwischen neuere, bessere Möglichkeiten gibt. Oder ob diese Anleitung oben auch einfach bei openHAB3.2 anwendbar ist. Bzw. welche Befehle und/oder Verzeichnisse angepasst werden müssen.

Als Alternativen fallen mir spontan ein:
* USB-Stick
* HDD USB Festplatte
* SSD Festplatte

USB Stick hätte ich da. Dort wird aber das gleiche Problem wie mit den SD-Karten vorhanden sein, oder?

HDD USB Festplatte (schon etwas älter) hätte ich rumliegen und die wird eigentlich nie sinnvoll gebraucht. Nur ist so eine große Platte ratsam? Wie ist das mit dem Stromverbrauch? Schafft der PI die Festplatte zusätzlich mit Strom zu versorgen? Gibt es eine Anleitung, wie ich die Festplatte für soetwas nutze?

SSD Festplatte müsste ich mir erst zulegen. Was bietet sich da an? Eine ganz kleine würde ja reichen. Gibt es SSD auch im USB-Stick Format? Die Anleitung sollte ja gleich wie die mit der HDD sein. Oder gibt es da Dinge zu beachten?

Oder gibt es noch andere Dinge die Möglich sind?

Vielleicht könnt ihr etwas Aufklärung bringen, Danke.

Benutzeravatar
udo1toni
Beiträge: 13982
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: SD-Karte Daten loggen

Beitrag von udo1toni »

openHABian bringt eine Software namens ZRAM mit, welche gewöhnlich auch aktiviert sein sollte. ZRAM sorgt dafür, dass jegliche Schreibzugriffe in eine RAM-Disk umgeleitet werden, wobei das ein Overlay dateisystem ist, wenn ich es richtig verstanden habe. das heißt, dass alle Daten verloren gehen, wenn der Rechner nicht korrekt runtergefahren wird :) Dabei schreibt ZRAM die Daten nämlich einmalig und am Stück auf die SD-Karte.

Ansosnten kann man den Pi 4 natürlich inzwischen problemlos von einer per USB angeschlossenen SSD booten, was dank USB3 auch noch wesentlich schneller ist, als von Micro-SD-Karte.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

N1d45
Beiträge: 121
Registriert: 5. Jan 2020 14:26
Answers: 2

Re: SD-Karte Daten loggen

Beitrag von N1d45 »

Danke udo1toni für das Stichwort.

Es gibt ja eine schöne Anleitung (ich hab es mal Übersetzen lassen)
Original in Englisch -> ZRAM status - Tutorials & Examples - openHAB Community

Was ist ZRAM und wie funktioniert es?
Das ZRAM-Konfigurationsprogramm für Swap, Directory & Log ist eine Betriebssystemerweiterung für IoT-/Maker-Projekte, um den Verschleiß von SD-, NAND- und eMMC-Blöcken zu reduzieren, der durch Schreibvorgänge wie Logging und Persistenz in openHAB verursacht wird. Es nutzt Komprimierung, um den wertvollen Speicherplatz zu minimieren und extrem seltene Schreibvorgänge und Arbeitsverzeichnisse mit annähernder RAM-Geschwindigkeit mit Speicherkomprimierungsverhältnissen, die von Ihren Daten und dem von Ihnen gewählten Komprimierungsalgorithmus abhängen.
ZRAM ist als Installationsoption in openHABian verfügbar, verwenden Sie Menüpunkt 38 zur Installation oder den nächsten (nicht nummerierten) Punkt zur Deinstallation.
ZRAM verwendet eine Tabelle in /etc/ztab, in der eine beliebige Kombination und Anzahl von ZRAM-Laufwerken erstellt werden kann. Bei dieser Implementierung wird ein OverlayFS-Mount mit ZRAM verwendet, so dass das Kopieren von Daten von der Festplatte in den RAM beim Booten nicht erforderlich ist. Dies sollte einen schnelleren Bootvorgang und größere Verzeichnisse ermöglichen, da keine komplette Verzeichniskopie erforderlich ist. Es ist alles der untere Mount im OverlayFS.

ZRAM ist standardmäßig für neue openHABian-Installationen aktiviert.
In einer openHABian-Implementierung werden swap, /var/log/* und /var/lib/openhab2/persistence in ZRAM ausgelagert. All das sind entbehrliche Daten, d.h. selbst wenn etwas schief gehen sollte, sollte Ihr openHAB-System weiterlaufen. Es gibt ein Protokoll in /usr/local/share/zram-config/log/.

Wir haben dies für neue openHABian-Einsätze geändert. Wenn Sie ZRAM für /var/lib/openhab2 verwendet haben, können Sie Ihre /etc/ztab bearbeiten, um diese Änderung auch auf Ihrem bestehenden System vorzunehmen. Danach ist ein Neustart erforderlich.

OverlayFS und Mounting
Beim ordnungsgemäßen Herunterfahren des Dienstes (zram-config stop oder reboot/shutdown) werden die von zram erstellten Verzeichnisse (OverlayFS) mit dem "unteren" Dateisystem synchronisiert (derselbe Verzeichnisname auf dem /-Dateisystem, das sich auf dem Standard-Bootmedium befindet) und das "obere" Dateisystem (der Teil im Speicher) wird "Lazy unmounted".
Lazy unmounting bedeutet, dass es immer noch Prozesse geben kann, die offene Dateien in diesem Verzeichnis haben. Das ist notwendig, um Systemprozesse zu starten (und am Laufen zu halten), die Verzeichnisse wie z.B. /var/log benutzen.

DOs und DON'Ts
• Sie dürfen Ihren openHABian-Server nicht ausschalten, bevor Sie ihn nicht ordnungsgemäß heruntergefahren haben. Dies ist eine Anforderung, die nichts mit ZRAM zu tun hat und im Grunde seit es UNIX gibt. Schließen Sie ihn außerdem an eine unterbrechungsfreie Stromversorgung (USV) an, um sich gegen Stromausfälle zu schützen.

• Verwenden Sie nicht zram-config sync (auch wenn es in Ihrer installierten Version vorhanden ist). Es ist bekannt, dass dies in einer Reihe von Situationen nicht funktioniert und zu Datenverlusten führen kann.

• Verwenden Sie eine Backup-Lösung wie Amanda 162, um tägliche Backups Ihrer zram'ed-Verzeichnisse (und natürlich auch des restlichen Systems) zu erstellen. ZRAM kann nicht vor Stromausfällen oder HW-Fehlern schützen.

• Überprüfen Sie Ihre OH-Protokolleinstellungen (log:get in der openHAB-Konsole) und stellen Sie sicher, dass nicht mehr Protokolle erzeugt werden, als Sie benötigen. Überprüfen Sie auch deren Anzahl und Größe: /var/lib/openhab/etc/log4j2.xml. Die gesammelten Logs müssen in das ZRAM-Verzeichnis passen, das in /etc/ztab definiert ist (beachten Sie, dass auch die Systemlogs dorthin gehören, aber standardmäßig ist das nur eine kleine Menge im Vergleich zu den OH-Logs).

• Sie sollten ZRAM nicht verwenden, es sei denn, Sie arbeiten mit einem SBC (kleiner "Einplatinen"-Computer wie Raspberry Pis), dessen Betriebssystem auf einem Flash-Speichermedium wie einer SD-Karte oder einem (!) USB-Stick läuft. USB-Sticks sind nicht besser oder sicherer als interne SD-Karten 51 - ein weiterer guter Grund für ZRAM.

• lassen Sie ZRAM nicht auf Maschinen laufen, die weniger als 1GB RAM haben, wie z.B. ein RPi Zero.

• lassen Sie es nicht auf Nicht-SBCs oder modifizierten SBCs laufen, um von "sicheren" Medien wie SSD oder HDD zu laufen. Nun, man kann es tun, aber es gibt nur einen vernachlässigbaren Vorteil dabei, so dass das Kosten/Risiko/Nutzen-Verhältnis schlecht ist.

• Wenn (und nur wenn) Sie ein SBC-System mit mehr als 1 GB haben, wie z.B. einen Raspi 4 mit 2,4 oder 8 GB oder einen anderen SBC mit 2 GB oder mehr, können Sie die Menge an RAM, die ZRAM zugewiesen ist, in /etc/ztab erhöhen, beginnend mit /var/lib/openhab2. Machen Sie sich keine Sorgen, dass ZRAM nicht die volle Maximalmenge belegen wird, wenn es nicht wirklich nötig ist.

• Sie können die Liste und die Größe der zu cachenden Verzeichnisse ändern, indem Sie die Einträge in /etc/ztab ändern. Wenn Sie es z.B. für zu riskant halten, die gesamte /var/lib/openhab2 aus dem ZRAM auszulagern, weil Sie z.B. nicht wollen, dass sich der Karaf-Cache dort befindet (da er sehr groß ist und so gut wie nur einmal beschrieben werden kann), können Sie ein Kommentarzeichen vor diese Zeile setzen oder sie durch zwei Zeilen für /var/lib/openhab2/jsondb und .../persistence ersetzen. Seien Sie sich aber bewusst, dass jede solche Änderung die Schreiblast auf Ihrer SD erhöht und damit die Wahrscheinlichkeit, dass Sie von Verschleiß betroffen sind. Siehe GitHub - mstormi/openhabian-zram: zram extensions for openHABian 67 für eine Erklärung der ztab-Felder.

• Es sind Statistiken verfügbar: Führen Sie zramctl ohne Optionen aus. Für erweiterte Statistiken enthält die Datei /sys/block/zram<id>/mm_stat alle Informationen, die Sie benötigen. Den kompletten Satz an Statistiken finden Sie in den Kernel-Dokumenten 11.

Bekannte Probleme
Sie könnten auf ein Fehlverhalten stoßen. Bitte lassen Sie es mich wissen, wenn dies der Fall ist, und teilen Sie mir die relevanten Details mit. Haben Sie in letzter Zeit etwas getan, das möglicherweise ein Auslöser war? Haben Sie eine .items- oder .rules-Datei bearbeitet? Eine Sache oder eine Bindung hinzugefügt, die zu einem Problem führen könnte ? Haben Sie die openHAB Version geändert (inkl. Milestones, Snapshot)?

Sie könnten auf Fehler bezüglich schreibgeschützter Dateien stoßen.
Wenn ja, rufen Sie zramctl auf und vergleichen Sie die Spalte TOTAL des ZRAM-Geräts für /var/lib/openhab2 (das ist normalerweise die zweite Zeile in der Ausgabe mit /dev/zram1).
Wenn dieser Wert größer oder gleich dem Wert ist, den Sie dieser Freigabe in /etc/ztab zugewiesen haben, passen selbst die komprimierten Daten nicht hinein. Weisen Sie mehr Platz zu. Er wird nur dann vom System verwendet, wenn ein Bedarf besteht Siehe OH-Upgrade-Verfahren.

• nach systemctl stop zram-config oder /usr/local/bin/zram-config stop bleibt möglicherweise ein ZRAM-Gerät /dev/zramX bestehen (X ist eine Zahl). Sie können versuchen, es mit zramctl -r /dev/zramX zu entfernen. Wenn das fehlschlägt, starten Sie neu, um es loszuwerden. Eventuell kann systemctl openhab2 vorher deaktivieren, damit es nicht automatisch nach dem Booten gestartet wird.

• Es kann sein, dass Sie Meldungen über verweigerte Zugriffsrechte sehen, die besagen, dass das System nicht in diese Verzeichnisse oder Dateien schreiben kann, weil sie schreibgeschützt sind. Dieses Problem wurde von den Benutzern nicht gemeldet, tauchte aber gelegentlich während der Tests auf. Es gibt viele mögliche Gründe dafür, und es wird noch untersucht, was der wahrscheinlichste/häufigste Grund dafür ist. ZRAM wird nie mit der Festplatte synchronisiert, es sei denn, Sie stoppen es (dabei werden alle Dateien synchronisiert, die in die ZRAM-Verzeichnisse gewechselt haben, und diese werden dann ausgehängt). Beim nächsten Start werden diese nicht mehr in den RAM kopiert, so dass der RAM-Verbrauch gering ist.

Genau wie auf der Festplatte muss die Menge an RAM, die ZRAM zur Verfügung haben muss, größer sein als die Menge an Daten, die dort gespeichert werden sollen, aber es ist etwas komplizierter als das, weil die Daten auch mit einem unterschiedlichen Komprimierungsfaktor komprimiert werden, so dass die genaue Menge an Rohdaten, die dort hineinpassen, unbekannt ist. Die Menge an Speicher, die ZRAM zur Verfügung steht, ist statisch (definiert in /etc/ztab).
Wenn nun etwas passiert, das mehr geänderte Daten in zram'ed-Verzeichnisse schreibt, als dort hineinpassen, ist "permission denied" (meistens) die Art und Weise, wie sich das System vor noch schwerwiegenderen Auswirkungen schützt.
Sie können versuchen, zram'ed-Daten zu löschen, aber normalerweise müssten Sie Ihr System herunterfahren (und das ist eindeutig die sicherere Methode).
Also verstehe ich das richtig, das ich keine Einstellungen mehr extra vornehmen muss, wenn ich eine SD-Karte Als Laufwerk für das Betriebssystem nutze?

Ein paar Punkte werfen aber Fragen auf:
• Überprüfen Sie Ihre OH-Protokolleinstellungen (log:get in der openHAB-Konsole) und stellen Sie sicher, dass nicht mehr Protokolle erzeugt werden, als Sie benötigen. Überprüfen Sie auch deren Anzahl und Größe: /var/lib/openhab/etc/log4j2.xml. Die gesammelten Logs müssen in das ZRAM-Verzeichnis passen, das in /etc/ztab definiert ist (beachten Sie, dass auch die Systemlogs dorthin gehören, aber standardmäßig ist das nur eine kleine Menge im Vergleich zu den OH-Logs).
Welche Größe hat denn die ZRAM Partition?
• Sie sollten ZRAM nicht verwenden, es sei denn, Sie arbeiten mit einem SBC (kleiner "Einplatinen"-Computer wie Raspberry Pis), dessen Betriebssystem auf einem Flash-Speichermedium wie einer SD-Karte oder einem (!) USB-Stick läuft.
Wenn man also nicht ein SD-Karte/USB-Stick nutzt, muss man ZRAM erst wieder deinstallieren?
• Wenn (und nur wenn) Sie ein SBC-System mit mehr als 1 GB haben, wie z.B. einen Raspi 4 mit 2,4 oder 8 GB oder einen anderen SBC mit 2 GB oder mehr, können Sie die Menge an RAM, die ZRAM zugewiesen ist, in /etc/ztab erhöhen, beginnend mit /var/lib/openhab2. Machen Sie sich keine Sorgen, dass ZRAM nicht die volle Maximalmenge belegen wird, wenn es nicht wirklich nötig ist.
Ich habe eine Raspberry Pi 4 mit 4GB RAM. Ich habe nicht genau verstanden wie ich den zugewiesenen RAM erhöhe. Kann mir das bitte jemand ausführlicher erklären?
Schließen Sie ihn außerdem an eine unterbrechungsfreie Stromversorgung (USV) an, um sich gegen Stromausfälle zu schützen.
OK, eine USV wollte ich für meine kleine Spielerei mit dem "Smart Home" eigentlich nicht aufbauen. Ist es nicht möglich, das die Daten z.B. täglich synchronisiert werden? Wäre ein täglicher Schreibzugriff zuviel für eine SD-Karte?

Leider sind meine Kenntnisse in Linux/Raspberry Pi 4 sehr gering. Aber vielleicht findet jemand erklärende/helfende Worte.

Danke

Benutzeravatar
udo1toni
Beiträge: 13982
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: SD-Karte Daten loggen

Beitrag von udo1toni »

Größe der ZRAM-Partition: Gute Frage. Eventuell verrät df -h hier etwas. Ich nutze openHABian nicht auf einem Raspberry, weshalb ich nicht selbst nachschauen kann.

ZRAM deinstalliern: Richtig. openHABian richtet automatisch ZRAM ein, weil dies eben der Normalfall auf einem Raspberry Pi ist (und nur für diesen gibt es ja ein fertiges Image) entsprechend muss ZRAM abgeschaltet werden, wenn man die Micro-SD-Karte auf eine SSD auslagert und von der SSD bootet.

ZRAM erhöhen: Schau in die Datei /etc/ztab. Dort dürfte es für verschiedene Verzeichnisse jeweils einen Eintrag geben, mit einer Angabe, wie viel Platz dieses Verzeichnis in ZRAM nutzen darf. Siehe oben... ich habe so eine Datei nicht. Eventuell gibt diese Datei auch Aufschluss über die Größe der Partition (Siehe Frage 1)

Eine USV hört sich ja schlimm an... Auf den Pi bezogen geht es um einen HAT (eine kleine Aufsteckplatine) an der ein kleiner Akku angeschlossen ist. Es gibt verschiedene Modelle, die meisten davon bringen auch eine Echtzeituhr und einen Watchdog mit; weiterhin richtet man einen Treiber ein, damit die USV im Bedarfsfall den Rechner (Pi) geordnet herunterfahren kann.
Natürlich kannst Du auch ohne USV arbeiten, musst aber mit Datenverlust rechnen, falls mal der Strom ausfällt. Das kann auch ein aus Versehen gezogenes Steckernetzteil sein...
Was das tägliche Speichern der Daten betrifft: ZRAM ist ZRAM. Du kannst gerne versuchen, den Programmierer dazu zu bringen eine entsprechende Option einzubauen. Bei Erfolg ist dir die Dankbarkeit der gesamten openHAB-Gemeinde (und vieler anderer Menschen) gewiss. Ich bin mir aber ziemlich sicher, dass andere damit schon keinen Erfolg hatten ;) wobei das nur eine Vermutung ist... vielleicht hat sich nur noch niemand getraut, zu fragen...
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

N1d45
Beiträge: 121
Registriert: 5. Jan 2020 14:26
Answers: 2

Re: SD-Karte Daten loggen

Beitrag von N1d45 »

udo1toni hat geschrieben: 14. Jan 2022 20:48 ...
Was das tägliche Speichern der Daten betrifft: ZRAM ist ZRAM. Du kannst gerne versuchen, den Programmierer dazu zu bringen eine entsprechende Option einzubauen. Bei Erfolg ist dir die Dankbarkeit der gesamten openHAB-Gemeinde (und vieler anderer Menschen) gewiss. Ich bin mir aber ziemlich sicher, dass andere damit schon keinen Erfolg hatten ;) wobei das nur eine Vermutung ist... vielleicht hat sich nur noch niemand getraut, zu fragen...
Danke für deine Antwort.

Ist es nicht möglich über z.B. eine Routine den Raspberry Pi z.B. täglich, wöchentlich oder monatlich zu einer bestimmten Zeit, z.B. 2 Uhr Nachts, neu zu starten? Ein reboot über die Konsole, synchronisiert ja den Inhalt des RAM-Laufwerks mit den Dateien auf der SD-Karte.
Kann openHAB das Neustarten des Raspberrys veranlassen?
udo1toni hat geschrieben: 14. Jan 2022 20:48 ...
ZRAM erhöhen: Schau in die Datei /etc/ztab. Dort dürfte es für verschiedene Verzeichnisse jeweils einen Eintrag geben, mit einer Angabe, wie viel Platz dieses Verzeichnis in ZRAM nutzen darf. Siehe oben... ich habe so eine Datei nicht. Eventuell gibt diese Datei auch Aufschluss über die Größe der Partition (Siehe Frage 1) ...
Schau ich mir später an, Danke.
udo1toni hat geschrieben: 14. Jan 2022 20:48 ...
Natürlich kannst Du auch ohne USV arbeiten, musst aber mit Datenverlust rechnen, falls mal der Strom ausfällt. ...
Wie hoch ist denn der Datenverlust? Wenn ich das richtig verstehe, dann jegliche Log-Daten seit dem letzten ordentlich Reboot/Shutdown. Wenn der Pi mal ein Jahr läuft, und es dann zum Stromausfall kommt, wären doch die Daten des ganzen Jahres weg, oder?
Bei der oben verlinkten Video Anleitung war das definitiv nicht so. Mein Pi war durch arbeiten an der Elektro-Installation nicht immer versorgt. Daten gingen aber nur über kurze Zeiträume verloren. Gibt es vielleicht auch eine Routine die man erstellen kann, die Daten ab einer bestimmten verstrichenen Zeit synchronisiert?

Benutzeravatar
udo1toni
Beiträge: 13982
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: SD-Karte Daten loggen

Beitrag von udo1toni »

N1d45 hat geschrieben: 15. Jan 2022 09:33 Ist es nicht möglich über z.B. eine Routine den Raspberry Pi z.B. täglich, wöchentlich oder monatlich zu einer bestimmten Zeit, z.B. 2 Uhr Nachts, neu zu starten? Ein reboot über die Konsole, synchronisiert ja den Inhalt des RAM-Laufwerks mit den Dateien auf der SD-Karte.
Kann openHAB das Neustarten des Raspberrys veranlassen?
Ja, aber das ist ja nur Rumgewurschtel. Der Punkt ist ja, dass eine Sicherung der Daten schon automatisch erfolgen können sollte, z.B. wenn mehr als <einstellbar> MByte Daten zusammengekommen sind, oder all <einstellbar> Stunden. Den Rechner zyklisch neu zu starten, ist Rmgefrickel. openHAB ist ein Serverdienst, der eigentlich 24/7 zur Verfügung stehen sollte.
N1d45 hat geschrieben: 15. Jan 2022 09:33 Wie hoch ist denn der Datenverlust? Wenn ich das richtig verstehe, dann jegliche Log-Daten seit dem letzten ordentlich Reboot/Shutdown. Wenn der Pi mal ein Jahr läuft, und es dann zum Stromausfall kommt, wären doch die Daten des ganzen Jahres weg, oder?
Ja, aber potenziell kann ein Stromausfall natürlich die gesamte SD-Karte in Mitleidenschaft ziehen. ext4 ist ein Journal-Filesystem, das heißt, jede Aktion wird protokolliert, ausgeführt und anschließend als erfolgreich markiert. Das hat den Vorzug, dass der OS bei Ausfall direkt schauen kann, welche Dateien eventuell korrupt sind. Wenn es ungünstig läuft, kann aber so ein Absturz exakt in dem Moment auftreten, wenn das Journal geschrieben wird. (das wird durch Kopien gesichert... aber dennoch...) Eine stabile Stromversorgung ist also zu jedem Zeitpunkt sinnvoll. Hardware RAID Adapter machen so etwas über Static RAM und Pufferbatterie, und das, obwohl solche Systeme gewöhnlich mit redundaten Netzteilen und unterschiedlichen Netzen versorgt sind (eines USV, eines direkt, falls die USV ausfällt...)
N1d45 hat geschrieben: 15. Jan 2022 09:33 Bei der oben verlinkten Video Anleitung war das definitiv nicht so. Mein Pi war durch arbeiten an der Elektro-Installation nicht immer versorgt. Daten gingen aber nur über kurze Zeiträume verloren. Gibt es vielleicht auch eine Routine die man erstellen kann, die Daten ab einer bestimmten verstrichenen Zeit synchronisiert?
Wie gesagt, ich weiß nur, dass ZRAM inzwischen default im openHABian Image aktiv ist, aber nicht exakt, wie es konfiguriert ist oder was es alles an Optionen gibt. Das zyklische Sichern auf SD-Karte gehört aber leider definitiv nicht dazu.
Ich habe mir das Video nicht angeschaut, entweder stammt das noch aus der vor-ZRAM-Zeit, oder ZRAM wurde damals direkt deaktiviert. Dann hast Du aber das Problem mit dem WearOut, es sei denn, Du weichst auf eine SSD aus.
Es gibt meines Wissens auch andere Ansätze, die ähnlich wie, aber im Detail anders als ZRAM arbeiten. Aber ich habe mich nie intensiv mit der Materie auseinandergesetzt. Ich habe ein paar Raspberries im Einsatz, bei denen ist die SD-Karte aber ro gemountet, was inzwischen direkt in raspi-config aktiviert werden kann. da gibt es dann auch ein Overlay Dateisystem, so dass man ganz normal mit dem Pi arbeiten kann. Strom weg bedeutet dann aber auch Änderungen weg. Das kann ja durchaus als Feature betrachtet werden.
Für ein Update/Upgrade muss man dann halt zunächst die SD-Karte beschreibbar machen und anschließend einmal booten. Danach führt man das Upgrade aus, erledigt eventuelle Konfigurationsänderungen, prüft, ob alles geht, löscht logs usw., schaltet wieder in den ro-Modus und bootet erneut.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

N1d45
Beiträge: 121
Registriert: 5. Jan 2020 14:26
Answers: 2

Re: SD-Karte Daten loggen

Beitrag von N1d45 »

OK. Die Anleitung, bzw. die Befehle gibt es ja auch in Textform.
Man soll zuerst das RRD4J-Binding und das MAPDB-Binding installieren.
Dann über Putty einige Befehle ausführen bzw. in Dateien etwas hinzufügen.

In der /etc/fstab soll man folgendes hinzufügen:

Code: Alles auswählen

tmpfs   /var/lib/openhab2/persistence/rrd4j     tmpfs   nosuid,size=250M       0       0
tmpfs   /var/lib/openhab2/persistence/mapdb     tmpfs   nosuid,size=250M       0       0
tmpfs   /var/log/openhab2	                tmpfs   nosuid,size=250M       0       0
Ich nehme an das sind die RAM-Verzeichnisse mit je 250 MB. Nur Vermutung, habe da keine Ahnung.

Dann soll man diese Verzeichnissstruktur hinzufügen

Code: Alles auswählen

mkdir /opt/openhab2
mkdir /opt/openhab2/persistence
mkdir /opt/openhab2/persistence/rrd4j
mkdir /opt/openhab2/persistence/mapdb
In den zwei Verzeichnissen wird dann vermutlich der RAM Inhalt gespeichert.

Dann soll man sudo crontab -e in Putty eingeben, und darauf folgendes hinzufügen

Code: Alles auswählen

0 3 * * * echo -n > /var/log/openhab2/openhab.log
0 3 * * * echo -n > /var/log/openhab2/events.log
0 3 * * * echo -n > /var/log/openhab2/audit.log

0 */4 * * * cp -r /var/lib/openhab2/persistence/rrd4j/* /opt/openhab2/persistence/rrd4j/
0 */4 * * * cp -r /var/lib/openhab2/persistence/mapdb/* /opt/openhab2/persistence/mapdb/
Als Laie würde ich sagen hier wird der Inhalt aus dem RAM auf die Festplatte geschrieben. Die Zahlen-Stern Kombination gibt den Zeitabstand an?

Danach soll man folgendes in /etc/rc.local hinzufügen

Code: Alles auswählen

cp /opt/openhab2/persistence/mapdb/* /var/lib/openhab2/persistence/mapdb/
cp /opt/openhab2/persistence/rrd4j/* /var/lib/openhab2/persistence/rrd4j/
chown openhabian:openhabian -R /var/lib/openhab2/persistence
chmod 777 -R /var/lib/openhab2/persistence
Was den Inhalt von der SD-Karte wieder in den RAM schreibt, nach einem Neustart.

Dann soll man noch etwas installieren damit die Diagramme ordentlich dargestellt werden

Code: Alles auswählen

apt-get install -y fontconfig libfontconfig1 ttf-dejavu	
Ob das noch nötig bei openHAB3.2 ist?

Dann soll man eine Datei anlegen /etc/openhab2/persistence/rrd4j.persist
Folgende Datei muss angelegt werden, damit die Werte (und historischen Daten) der Number-und Switch Items bei Änderungen gespeichert werden und auch anschließend in Diagrammen verwendet werden können. Es werden aber nur Items gespeichert, die der Gruppe RRD4J angehören!. Der Code für die rrd4j.persist Datei lautet:

Code: Alles auswählen

Strategies {
        everyMinute : "0 * * * * ?"
        default = everyChange

}
Items {
        RRD4J* : strategy = everyChange, everyMinute
}
Dann soll man eine Datei anlegen /etc/openhab2/persistence/mapdb.persist
Folgende Datei muss angelegt werden, damit der jeweils aktuelle ALLER Items bei Änderungen gespeichert werden und auch beim Neustart von openHAB wieder zurückgelesen werden:

Code: Alles auswählen

Strategies {
    default = everyUpdate
}

Items {
        * : strategy = everyChange,restoreOnStartup
}
Danke das du dich damit auseinander setzt, obwohl du ein anderes System hast.

Kennst du "fstab"?
Was davon kann noch angewendet werden in OH3.2?
Ist es etwas ähnliches wie ZRAM?

Benutzeravatar
udo1toni
Beiträge: 13982
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: SD-Karte Daten loggen

Beitrag von udo1toni »

Die Datei /etc/fstab steuert, welche Dateisysteme automatisch oder manuell an bestimmte Stellen im Root-Dateisystem eingebunden werden. Die Zeile

Code: Alles auswählen

tmpfs   /var/lib/openhab2/persistence/rrd4j     tmpfs   nosuid,size=250M       0       0
bedeutet, dass tmpfs (temporäres Dateisystem) unter dem Mountpunkt /var/lib/openhab2/persistence/rrd4j als tmpfs eingebunden wird, wobei die Größe auf 250MByte begrenzt ist. Es wird unmittelbar versucht, das Dateisystem einzubinden (die hintere 0).

Um die Daten auf SD zu sichern, werden zusätzliche Verzeichnisse unterhalb /opt/ angelegt. Diese werden aber nur durch die crontab-Routinen beschrieben.

In der Crontab gelten ähnliche Definitionen wie in der Rules DSL für Time Cron Trigger, allerdings stehen im System keine Sekunden zur Verfügung. Das heißt, "0 3 * * * bedeutet: um 03:00:00 Uhr an jedem Tag. 0 */4 * * * bedeutet: zur vollen Stunde alle vier Stunden an jedem Tag. Es werden also alle vier Stunden alle Dateien aus dem tmpfs auf die SD-Karte kopiert.

Die /etc/rc-local wird beim Hochfahren des Systems ausgeführt, so dass durch die angegebenen Befehle einfach die Daten von der SD-Karte ins tmpfs kopiert werden. Außerdem werden die Dateirechte für alle komplett freigegeben (warum auch immer, das sollte eigentlich unnötig sein)-

Die restliche Konfiguration dient nur der Zuordnung der Items zu der Persistence, also Standard Funktionen.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

N1d45
Beiträge: 121
Registriert: 5. Jan 2020 14:26
Answers: 2

Re: SD-Karte Daten loggen

Beitrag von N1d45 »

Herzlichen Dank für die Aufklärung !

N1d45
Beiträge: 121
Registriert: 5. Jan 2020 14:26
Answers: 2

Re: SD-Karte Daten loggen

Beitrag von N1d45 »

Nochmal zusammenfassend, wenn ich es auf das openHABian v1.7.1 mit openHAB 3.2.0 nutzen will.
* openHAB anhalten
* ZRAM deinstallieren
* /etc/fstab im Editor öffnen und folgendes hinzufügen (der obenhab Ordner ist anders als in der 2.5 Anleitung)

Code: Alles auswählen

tmpfs   /var/lib/openhab/persistence/rrd4j     tmpfs   nosuid,size=250M       0       0
tmpfs   /var/lib/openhab/persistence/mapdb     tmpfs   nosuid,size=250M       0       0
tmpfs   /var/log/openhab	                tmpfs   nosuid,size=250M       0       0
* Verzeichnisse erstellen (können auch anders heißen, hauptsache gleich wie in crontab und rc.local angegeben)

Code: Alles auswählen

mkdir /opt/openhab
mkdir /opt/openhab/persistence
mkdir /opt/openhab/persistence/rrd4j
mkdir /opt/openhab/persistence/mapdb
* Dann crontab im editor öffnen und folgendes hinzufügen (der obenhab Ordner ist anders als in der 2.5 Anleitung und geschrieben auf die SD-Karte wird nur 3 Uhr Nachts)

Code: Alles auswählen

0 3 * * * echo -n > /var/log/openhab/openhab.log
0 3 * * * echo -n > /var/log/openhab/events.log
0 3 * * * echo -n > /var/log/openhab/audit.log
0 3 * * * cp -r /var/lib/openhab/persistence/rrd4j/* /opt/openhab/persistence/rrd4j/
0 3 * * * cp -r /var/lib/openhab/persistence/mapdb/* /opt/openhab/persistence/mapdb/
* Dann rc.local im editor öffnen und folgendes hinzufügen (der obenhab Ordner ist anders als in der 2.5 Anleitung)

Code: Alles auswählen

cp /opt/openhab/persistence/mapdb/* /var/lib/openhab/persistence/mapdb/
cp /opt/openhab/persistence/rrd4j/* /var/lib/openhab/persistence/rrd4j/
chown openhabian:openhabian -R /var/lib/openhab/persistence
* Dann den Raspberry neustarten.
Etwas vergessen?

Ein paar Fragen sind aber aufgetaucht.
Folgendes

Code: Alles auswählen

chown openhabian:openhabian -R /var/lib/openhab/persistence
setzt doch, das der Ordner und alles darunter liegende dem Besitzer openhabian und zur Gruppe openhabian gehört. Ist dies noch nötig? Oder auch unnötig wie das Rechte vergeben:

Code: Alles auswählen

chmod 777 -R /var/lib/openhab/persistence

Muss man das noch bei openHAB 3.2 installieren um die Grafiken ordentlich anzuzeigen? Ich vermute nicht, oder?

Code: Alles auswählen

apt-get install -y fontconfig libfontconfig1 ttf-dejavu
Oder sollte ich lieber bei ZRAM bleiben, und den Raspberry zum Beispiel Nachts um 3 neu starten lassen. Würde man dann einfach den Befehl zum neustarten in den crontab mit eintragen?

Code: Alles auswählen

0 3 * * * reboot
Ich vermute da muss noch mehr in der Zeile stehen, richtig?

Mein System ist nicht wirklich Sicherheitsrelevant, eher eine Spielerei, aus Neugierde und zu schauen was geht. Ich denke es ist nicht schlimm wenn er täglich einmal rebootet. Auch wäre es nicht schlimm wenn mal in der Datenbank ein Tag fehlt, wenn der Strom mal ausfällt. Wenn natürlich Monate weg sind, wäre nicht so toll.

Danke für Antworten.

Antworten