NEWS
[gelöst] das leidige Thema "Stromausfall"
-
@paul53 sagte in das leidige Thema "Stromausfall":
Welche Daten werden im Millisekundentakt geschrieben?
das bezog sich auf die Datenpunkte in Summe
(natürlich nicht die Karte) -
@homoran sagte: natürlich nicht die Karte
Die Schreibfrequenz auf den Massenspeicher ist aber entscheidend für die Wahrscheinlichkeit, dass ein Stromausfall zu einem defekten Filesystem führt.
In der Datei iobroker-data/iobroker.json kann z.B. die Schreibfrequenz für die states.json vorgegeben werden: "writeFileInterval": 300000 (5 Minuten).@heimweh sagte in das leidige Thema "Stromausfall":
Ich werde das Thema USV mal angehen.
Sehr vernünftig!
-
Also mein ioBroker läuft in einer VM unter VMWare, Ubuntu 20.04 LTS. Gesichert wird das ganze per VEEAM, also per Snapshot im laufenden Betrieb.
Für eine VM ist das nach einen Restore wie nach einem ein Stromausfall. Und da war noch nie was kaputt.
Bei einem Snapshot wird der VM über die VMware-Tools bescheid gesagt das ein Snapshot stattfindet. Da versucht das Betriebssystem dann noch mal eben alle Caches auf Platte zu leeren und mal einen Moment nicht zuschreiben.
Da kann man dann auch eigene Scripte einbinden, ich unterbinde bei Snapshoterstellung auch alle Schreibzugriffe des MySQL und leere dessen Schreibcache. Das gilt nur für die paar Sekunden der Erstellung.Ob Proxmox da ähnlich fährt - keine Ahnung.
Anderes herum: Wann geht denn was "kaputt"? Kaputt geht immer dann etwas wenn er beim schreiben von Daten auf die Festplatte unterbrochen wird.
Jetzt weis ich nicht genau was der ioBroker so alles schreibt, aber das schreiben müsste dann hart unterbrochen worden sein. Wenn es die VIS View ist so müsste er die JSON-Datei, eine schnöde Textdatei, ja in dem Moment am Schreiben gehabt haben. Ich würde nun denken die Datei ist statisch und wird nur geändert wenn man im Editor im Gange ist, also eigentlich ja praktisch nie.
Wenn man das System neu startet so wird es ja heruntergefahren. Also alle Dienste beendet. In dem Fall sollte ioBroker ja noch alles einmal in Ruhe weg schreiben können was er so schreiben will - oder geht da laut Logs etwas schief?
Also eigentlich kann da gar nichts kaputt gehen oder es ist ein anderes Problem.
-
@homoran sagte in das leidige Thema "Stromausfall":
Wieso um alles in der Welt haben so viele User dauernd Stromausfall?
Weil wir auf dem Land leben.
Ich hatte 2021 fünf Stromausfälle, vier im Januar (Schneebruch) und einer im Juni (Starkregen)Allerdings eine SSD am Raspi und bisher noch keine Ausfälle.
-
@bananajoe sagte in das leidige Thema "Stromausfall":
Wann geht denn was "kaputt"? Kaputt geht immer dann etwas wenn er beim schreiben von Daten auf die Festplatte unterbrochen wird.
Jetzt weis ich nicht genau was der ioBroker so alles schreibt, aber das schreiben müsste dann hart unterbrochen worden seinsoweit korrekt, es geht aber meist um die objects.json in der alle Datenpunkte und Konfigurationen gespeichert werden.
Die wird häufiger geschrieben.Auch wenn @paul53 eben gezeigt hat wie man diese Schreibvorgänge auf 5 Minuten einstellen kann, kenne ich im MOment den Standardwert nicht. (oder ist 5 Minuten der Standard?
Bei Anhebung dieses Wertes auf x Minuten muss man natürlich bedenken, dass im schlimmsten Fall alles weg ist, was in den letzten x Minuten passiert ist
-
@homoran genau so ist es - es ist immer die objects.json und die Frage mit dem default Wert hatte ich jetzt auch im Kopf
-
@heimweh sagte in das leidige Thema "Stromausfall":
@homoran genau diese Frage hatte ich auch im Kopf!?
Jetzt habe ich mich schnell für dich an einen PC gesetzt und nachgesehen:
Ich finde den Eintrag
"writeFileInterval": 300000
gar nicht.@paul53 der müsste für die Objects doch unter
"objects: {
stehen?
oder muss der grundsätzlich erst angelegt werden?Wenn ja, bleibt die Frage wie hoch die Schreibfrequenz standardmäßig ist
-
Ggf. könnte für solche fälle die JSONL-Datenbankvariante interessant sein, die voraussichtlich in Controller v4 Standard wird:
https://forum.iobroker.net/post/732513Die sollte prinzipbedingt (inkrementelles Schreiben, appendonly) einen Totalverlust verhindern und dabei auch noch die SD-Karte schonen.
-
@homoran sagte: ist 5 Minuten der Standard?
Soweit ich mich erinnere, sind 30 s der Standardwert.
-
@homoran sagte: oder muss der grundsätzlich erst angelegt werden?
Ich denke: Ja. Unter "states":
"states": { "type": "file", "typeComment": "Possible values: 'file' - [port 9000], 'redis' - [port 6379].", "host": "127.0.0.1", "port": 9000, "maxQueue": 1000, "writeFileInterval": 300000, "options": { "auth_pass": null, "retry_max_delay": 5000 },
Die Datei objects.json sollte ohnehin nicht häufig geschrieben werden, wenn man davon ausgeht, dass die Objekte quasi statisch sind (sein sollen).
-
Das Risiko der Beschädigung einer Datei oder gar des ganzen System bei Strom weg ist im speziellen bei sd Karten gegeben, da diese im Gegensatz zu ssd Festplatten keine eigenen kondensatoren haben die noch genug Strom haben um zumindest den Cache noch zu schreiben.
Da bei sd/ssd immer größere Blocks geschrieben werden, die auch mal größer wie eine Datei sein kann ist, wenn das nicht abgeschlossen werden kann, die Datei oder das ganze Datei System hinüber. Manchmal kann das repariert werden aber nicht immer.
Wenn du eine sd Karte gegen eine ssd tauschst dann minimierst du das Risiko noch weiter.Ganz ausschließen kann man das Risiko aber bei keinem Speichermedium. Mit einer usv hat man zumindest aber auch noch genügend Strom um eine ganze applikation und das Betriebssystem ordentlich herunterzufahren.
-
@paul53 sagte:
Die Datei objects.json sollte ohnehin nicht häufig geschrieben werden
aber bei allen Fällen, die @Thomas-Braun und ich in der letzten Zeit in den Fingern hatten war nur (noch) die Objects.db hin.
-
@homoran sagte in das leidige Thema "Stromausfall":
war nur (noch) die Objects.db hin.
Dann sollte auch unter "objects" ein ausreichend großer Wert ergänzt werden.
"objects": { "type": "file", "typeComment": "Possible values: 'file' - [port 9001], redis - [port 6379], couch - [port 5984].", "host": "127.0.0.1", "port": 9001, "user": "", "pass": "", "noFileCache": false, "connectTimeout": 2000, "writeFileInterval": 600000, "backup": {
Anschließend ioBroker neu starten.
-
@paul53 Danke!
Vielleicht liegt es aber auch an der Größe der objects.json, die selbst im gepackten Zustand noch gerne im (auch höheren) MB-Bereich liegt
-
@homoran sagte: Vielleicht liegt es aber auch an der Größe der objects.json
Je größer die Datei, desto seltener sollte sie geschrieben werden.
-
@paul53
wenn sie zu groß wird, sollte man auf redis wechseln -
@oliverio sagte: sollte man auf redis wechseln
Redis schreibt in der Standardeinstellung auch alle 5 Minuten.
-
@paul53
ja aber iobroker schreibt ja plumb einfach eine komplette datei was bei größerer Datei dann immer länger dauert.redis kann über direkte datei-operationen nur bestimmte Anteile einer datei anpassen (verwendet die datei sozusagen als eigenes dateisystem) oder es hängt einfach immer nur an und reorganisiert in regelmäßigen abständen dann die daten, wie es datenbanken oft machen. die genaue strategie kenn ich nicht.
-
Hier das gleiche Problem: heute morgen gefühlt 10 Sekunden Stromausfall und der Broker quittiert den Dienst.
pi@raspberrypi:~ $ ls -la /opt/iobroker/iobroker-data/ total 148 drwxrwxr-x+ 7 iobroker iobroker 4096 Jan 5 16:15 . drwxrwxr-x+ 6 iobroker iobroker 4096 Jan 5 15:01 .. drwxrwxr-x+ 2 iobroker iobroker 49152 Jan 5 16:13 backup-objects drwxrwxr-x+ 49 iobroker iobroker 4096 Jan 3 06:54 files drwxrwxr-x+ 260 iobroker iobroker 12288 Jan 5 00:08 history -rw-rwxr--+ 1 iobroker iobroker 4345 Apr 23 2021 iobroker.json drwxrwxr-x+ 3 iobroker iobroker 4096 Apr 23 2021 jarvis -rw-rwxr--+ 1 iobroker iobroker 3 Jan 5 14:11 notifications.json -rw-rwxr--+ 1 iobroker iobroker 27105 Jan 5 14:12 objects.json -rw-rwxr--+ 1 iobroker iobroker 18682 Jan 5 14:11 objects.json.bak -rw-rw-r--+ 1 iobroker iobroker 3070 Jan 5 16:15 states.json -rw-rw-r--+ 1 iobroker iobroker 3070 Jan 5 16:14 states.json.bak -rw-rwxr--+ 1 iobroker iobroker 0 Jan 5 08:00 states.json.broken drwxrwxr-x+ 3 iobroker iobroker 4096 Apr 23 2021 tmp pi@raspberrypi:~ $
Iobroker fix bringt nichts
Auch das fix-Skript bringt nichts.
Wie kann ich eine komplette Neuinstallation umgehen? Und wenn das nicht geht, wie deinstalliere ich vorher sauber? -
@christian-wöhrle sagte: Wie kann ich eine komplette Neuinstallation umgehen?
Im Ordner backup-objects befinden sich Backups von objects.json und states.json von vor dem Stromausfall. Vor dem Rückspielen ioBroker stoppen!