Ankündigung

Einklappen
Keine Ankündigung bisher.

Nutzung einer RAMDISK um SD-Karte zu schonen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Nutzung einer RAMDISK um SD-Karte zu schonen

    Mein openHAB Server schreibt nun minütlich Daten auf die SD-Karte vom Embedded Board. Das kann nicht gesund sein. Tatsächlich hab ich schon erste Blockfehler. Irgendwann des Nachts konnte nicht mehr in die rr4dj geschrieben werden, weil irgendwie auf einmal nur noch read only war (mount sagte mir das Gegenteil). Ich denke, es wäre besser die zyklischen Daten in eine Ramdisk zu schreiben. Nun bin ich sicher nicht der erste dem das auffällt. Gibts dafür schon eine Standard-Lösung? Welche Verzeichnisse muss man auf die Ramdisk mounten (außer /opt/openhab/etc/rrd4j) ? Mir ist noch das /opt/openhab/logs Verzeichnis aufgefallen... Allerdings sollte man zum Schutz vor Datenausfall natürlich ab und an (cron-job) die enstandenen Daten auf die SD-Karte sichern. Cronjob? Wie macht ihr das? Zusatzfrage: Da einige Daten nicht in die Datenbank gelangten, kann man eigentlich aus dem openhab.log irgendwie noch Daten extrahieren (lassen)?

    #2
    Eine SD-Karte in einem embedded-Rechner gehört nicht regelmäßig beschrieben. Egal ob direkt mit rrdj4 (damit schrottet man sie ziemlich schnell, wie du gemerkt hast) oder 'nur' einmal pro Stunde oder Tag (dann dauert das Schrotten lediglich etwas länger).

    Irgendwas mit SD-Karte hat bei mir /var/log von vornherein als RAM-Disk. Außerdem boote ich mit systemd und "Storage=volatile" in der journald.conf, aber das ist optional.

    Die ganzen persist-Werte schicke ich via MQTT an einen rabbitmq-Broker. Da lauscht ein Pythonskript, das die Daten aufbereitet (also zB das Intervall zwischen ON und OFF berechnet, damit ich die Brenndauer meiner Lampen mitloggen kann) und u.A. an einen rrdcached weiterreicht. Der schreibt RRD-Dateien, und zwar auf eine stinknormale 2.5"-Festplatte (klein wegen Stromverbrauch) (bzw. deren zwei, weil RAID-1).

    Und auf ein paar dieser RRDs wiederum guckt ein icinga-Monitor, der Alarm schlägt, wenn sie nicht geupdatet werden.
    DistKV, Home Assistant, 1wire, KNX, Python, Asterisk, SMD-Lötkolben

    Kommentar


      #3
      Das klingt reichlich nach "fortgeschritten". Ne andere Idee ist, das ganze openhab in eine Ramdisk zu kopieren und nach ein paar Stunden mit der SD-karte zu syncronisieren. Das sollte auch für Einsteiger machbar sein.

      Kommentar


        #4
        Ich würde mich auch für eine Lösung mit weniger Zugriffen interessieren. Ich habe bei mir das Logging minimiert. Was ist aber mit Persistence Daten?
        Jemand eine gute Lösung? Vielleicht eine RAM-Disk mit Cron-Job zum kopieren auf SD oder ein passendes Filesystem?

        Kommentar


          #5
          Anleitung: openHAB komplett in der RAM-Disk

          Wenn regelmäßig kopieren, dann bitte richtig, d.h. mit so wenig schreibenden Zugriffen wie irgend möglich.

          Zum Vorbereiten machen wir das:

          Code:
          [ openHAB stinknormal nach /opt installieren ]
          cd /opt
          mv openhab real_openhab
          mkdir openhab
          mount -t tmpfs none /opt/openhab
          cp -a /opt/real_openhab/. /opt/openhab
          Dann noch die folgenden Zeilen ins openHAB-Startskript, bzw. vor den openHAB-Startaufruf im /etc/rc.local, eingebaut:

          Code:
          if ! fgrep -qs /opt/openhab /proc/mounts ; then
            mount -t tmpfs none /opt/openhab
            cp -a /opt/real_openhab/. /opt/openhab
          fi
          und die folgenden Zeilen in die Datei /etc/cron.daily/openhab_sync schreiben:

          Code:
          #!/bin/sh
          rsync -a --inplace /opt/openhab/. /opt/real_openhab/
          und diese ausführbar machen:

          Code:
          chmod +x  /etc/cron.daily/openhab_sync
          Fertig. Theoretisch.

          Eine solche Lösung hat noch zwei Nachteile. (A) in der RAM-Disk lungern 42 MBytes Java-Binaries rum, die wir da nicht brauchen, weil sie nie geändert werden. (B) Tut nichts gegen die sonstigen Schreibzugriffe in /var/log.

          Aber für den Anfang viel besser, als rrd4j auf der SD-Karte rumrödeln zu lassen.
          DistKV, Home Assistant, 1wire, KNX, Python, Asterisk, SMD-Lötkolben

          Kommentar


            #6
            Hallo
            Nehmt eine Industrie SSD und gut ist.
            Sowas wie diese:
            Transcend 16GB SDHC Class10 CARD (MLC), TS16GSDHC10M
            Gruß NetFritz
            KNX & Wago 750-849 ,Wiregate u. Cometvisu, iPad 3G 64GB.
            WP Alpha-Innotec WWC130HX (RS232-Moxa-LAN),Solaranlage für Brauchwasser und Heizung.
            PV-Anlage = SMA Webbox2.0 , SunnyBoy 4000TL, Sharp 4kWP

            Kommentar


              #7
              Zitat von NetFritz Beitrag anzeigen
              Hallo
              Nehmt eine Industrie SSD und gut ist.
              Sowas wie diese:
              Transcend 16GB SDHC Class10 CARD (MLC), TS16GSDHC10M
              Gruß NetFritz
              Du verwechselst da was.
              SLC-Speicher halten bezogen auf Schreibzugriffe 10x so lang wie MLC-Speicher, nicht umgekehrt.

              Kommentar


                #8
                Hallo
                Habe die verkehrte Karte genommen, meine auch die in SLC Ausführung.
                Gruß NetFritz
                KNX & Wago 750-849 ,Wiregate u. Cometvisu, iPad 3G 64GB.
                WP Alpha-Innotec WWC130HX (RS232-Moxa-LAN),Solaranlage für Brauchwasser und Heizung.
                PV-Anlage = SMA Webbox2.0 , SunnyBoy 4000TL, Sharp 4kWP

                Kommentar


                  #9
                  Hallo, ich will die Persistencen und das Logging-Verzeichnis von Openhab auf eine externe USB-HDD legen.

                  Dann dürfte ja nichts mehr auf die Karte geschrieben werden. Die normalen Linux-Log-Verzeichnisse sind schon auf einer Ramdisk.


                  Kann mir jemand erklären, wie ich die beiden Openhab-Verzeichnisse ganz einfach auf die USB-HDD umlenken kann?

                  Kommentar


                    #10
                    Zwei Möglichkeiten.

                    * Konfigdatei bzw. Startskript ändern, OPENHAB_LOG_DIR=/ramdisk/openhab/log

                    * Symlink.
                    Code:
                    # openHAB anhalten
                    cp -a /opt/openhab/log /ramdisk/openhab/log_im_ram
                    rm -rf /opt/openhab/log
                    ln -s /ramdisk/openhab/log_im_ram /opt/openhab/log
                    # openHAB wieder starten
                    Den letzten Befehl musst du nach jedem Reboot auch machen. Logischerweise.

                    … alles natürlich auf eigene Verzeichnisstrukturen angepasst …
                    DistKV, Home Assistant, 1wire, KNX, Python, Asterisk, SMD-Lötkolben

                    Kommentar


                      #11
                      Konfigdatei wäre die schönere Methode.

                      Geht das mit dem Persistence-Verzeichnis auch oder nur mit dem Log-Verzeichnis?

                      Dann muss ich nur noch die USB-HDD automatisch bei jedem Start mounten lassen und den Pfad entsprechend anpassen.

                      Kommentar


                        #12
                        Das muss jemand anders beantworten, weil ich das "normale" Persistence-Modul nicht verwende.
                        DistKV, Home Assistant, 1wire, KNX, Python, Asterisk, SMD-Lötkolben

                        Kommentar


                          #13
                          Also ich verwende halt rrd4j derzeit.

                          Wenn ich später mal auf eine mySQL-Datenbank umsteige, hab ich das Problem ja nicht mehr, weil ich die Datenbank dann auf einem NAS laufen lasse.

                          Kommentar

                          Lädt...
                          X