InfoFrame: Digitaler Bilderrahmen auf dem Raspberry PI

Ein Tipp, ich würde gleich die ganze Datenbank auf die RAM-Disk schreiben und/oder statt MySQL SQLite (gleich in PHP drin und schreibt nur eine Datei) verwenden. Mein Pi hat nur Lese- und fast keine Schreibvorgänge mehr auf der SD-Karte, die durch Web-Server oder PHP oder teils auch System verursacht werden. Macht man dies nicht, kann man in etwa abschätzen, wann die SD-Karte den Dienst quittiert. Leider kündigt sich das nicht an, sondern passiert von jetzt auf gleich. Ein wenig Datensicherung kann hier auch nicht schaden. ;)
 
Ich habe mir noch nie Gedanken über die Größe der MySQL Daten gemacht und musste beim Nachsehen gerade feststellen, das MySQL im Gegensatz zu diversen Microsoft Produkten, die bei vergleichbaren Daten gleich mehrere hundert Megabyte an Speicher belegen, wirklich sparsam ist. Das ist wirklich eine Überlegung wert.
 
Es sind wirklich meist nur wenige kb. Ein RAM-Drive in der /etc/fstab mit den Angaben
tmpfs /var/.../tmp tmpfs nosuid,size=10M 0 0
reicht da vollkommen.
blau=Pfad zur RAM-Disk wo sie gemounted werden soll.

Und wenn man da gerade editiert gleich abändern:
/dev/mmcblk0p2 / ext4 defaults,nodiratime,noatime 0 1
 
Zuletzt bearbeitet:
Welches System verwendest Du als Basis? Bei der Wheezy ist die Option noatime bereits standardmäßig gesetzt.
Gruß, Michael...
 
Jep, da muss nur nodiratime noch hinzugefügt werden.
 
die Option noatime enthält bereits nodiratime. Beide sind überflüssig.
 
Bist du sicher? Ein Linux-Developer schreibt noatime nur Dateien, nodiratime nur Verzeichnisse, ein anderer schreibt noatime impliziert nodiratime als Supersetting, daher hatte ich beide reingenommen. Aber wenn noatime genügt, dann ist es in der Pi-fstab eh drin. :)
 
Ich glaube sogar, daß es zu unerwünschten Ergebnissen führen kann, wenn beide Parameter angegeben werden.
Je nachdem, welcher zuerst ausgewertet wird, führt der offensichtlich zur Nichtbeachtung des anderen.
Hier noch zwei sehr ausführliche Beschreibungen: Klick und Klack, die beide darauf hinaus laufen, daß noatime die Beachtung von nodiratime beinhaltet.

Joe
 
Sicher ist nur der ... ;)
Machen wir doch mal den Test, ich habe nur noatime gesetzt und stat /var/www liefert:
Code:
root@Saturn:~# stat /var/www

  Datei: „/var/www“
  Größe: 4096           Blöcke: 8          EA Block: 4096   Verzeichnis
Gerät: b302h/45826d     Inode: 262619      Verknüpfungen: 7
Zugriff: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Zugriff    : 2015-01-25 18:10:45.000000000 +0100
Modifiziert: 2015-03-03 17:31:41.914357028 +0100
Geändert   : 2015-03-03 17:31:41.914357028 +0100
 Geburt    : -

Die Tatsache, dass Zugriff jünger ist als Modifiziert sollte eigentlich genügen. Trotzdem touch /var/www/test.t und stat /war/www liefert:
Code:
root@Saturn:~# stat /var/www/
  Datei: „/var/www/“
  Größe: 4096           Blöcke: 8          EA Block: 4096   Verzeichnis
Gerät: b302h/45826d     Inode: 262619      Verknüpfungen: 7
Zugriff: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Zugriff    : 2015-01-25 18:10:45.000000000 +0100
Modifiziert: 2015-03-23 12:36:09.537979663 +0100
Geändert   : 2015-03-23 12:36:09.537979663 +0100
 Geburt    : -

Jetzt bin ich mir sicher...
 
Super, danke. Dann reicht noatime und ich korrigiere das auch in meiner Beschreibung zum Pi. :)
 
Hallo JL3,
wie checkst Du, ob noch Schreibzugriffe auf ein Device getätigt werden und vor allem, wie findest Du heraus, wer es war und wohin?
Gibt es da Unixeigene Werkzeuge für?
Gruß, Michael...
 
Zuletzt bearbeitet:
Abend

Filtere doch die Ausgabe von lsof um sowas zu erkennen.
 
Hm ein Service rsyslog schreibt munter. Ausschalten mit service rsyslog stop
Und bei ext4 nervt noch das ständig schreibende Journaling jbd2. Das kann man nur mit
tune2fs -O ^has_journal
entfernen, aber ist nicht ohne. Geht auch nur mit ungemountetem FS.
 
...
FROM_UNIXTIME hat nichts mit Deiner Uhr im Rechner zu tun sondern ist ein MySQL Befehl um ein Unix Time Format (Sekunden seit 1.1.1970) in die Form YYYYY-MM-DD HH:MM:SS zu bringen.
Ich vermute den Fehler im Bezinplugin: wenn eine Tankstelle eine merkwürdiges Datum liefert, wird im Script mit der Variable $datum ein Null-Wert übergeben und FROM_UNIXTIME(NULL) bringt dann diese Fehlermeldung.
...
Darüber wird im Internet viel geschrieben und verschiedene Lösungsansätze angeboten. Die meisten verhindern Schreibzyklen indem sie die Logfiles auf eine Ramdisk auslagern. Beim Infoframe macht das meiner Meinung nach aber nicht viel Sinn, da sowieso ständig Daten in die MySQL Datenbank geschrieben werden. Da kommts auf die paar Logs auch nicht mehr an, als dass ich RAM für eine Disk opfern würde.
Die Speichercontroller erhöhen die Lebensdauer der Karten indem sie versuchen alle Speicherzellen gleichmäßig auszulasten, ich benutze daher eine überdimensionierte SD-Card, so läuft der Infoframe bei mir bereits seit über einem Jahr.
Hallo Michael,
lässt sich FROM_UNIXTIME(NULL) abfangen, und z. B. den vorherigen Bildschirm wieder herstellen, oder die aktuelle Zeit verwenden, damit kein weißer Bildschirm entsteht?
So wenige Logs sind das gar nicht, ich habe jetzt dem Apache2 sämtliche Logs abgewöhnt, da diese innerhalb kürzester Zeit zu MegaBytes anwachsen (viel mehr Einträge als MySQL produziert).
In apache2.conf:
Code:
[SIZE=2]ErrorLog ${APACHE_LOG_DIR}/error.log    durch  ErrorLog /dev/null    [/SIZE]ersetzt und den Eintrag
[SIZE=2]LogLevel warn           auskommentiert [/SIZE]
in other-vhosts-acces-log folgende Zeile auskommentiert:
Code:
[SIZE=2]CustomLog ${APACHE_LOG_DIR}/other_vhosts_access.log vhost_combined[/SIZE]
in sites-enabled/000-default 3 Einträge auskommentiert:
Code:
[SIZE=2]ErrorLog ${APACHE_LOG_DIR}/error.log[/SIZE] [SIZE=2]
LogLevel warn[/SIZE] 
[SIZE=2]CustomLog ${APACHE_LOG_DIR}/access.log combined[/SIZE]
Gibt es weitere Loggings, die schadlos deaktiviert werden können?
 
@JL3: Das wäre natürlich auch eine Methode: readonly mounten :D
 
Zuletzt bearbeitet:
lässt sich FROM_UNIXTIME(NULL) abfangen, und z. B. den vorherigen Bildschirm wieder herstellen, oder die aktuelle Zeit verwenden, damit kein weißer Bildschirm entsteht?
klar, das könnte man das machen.

So wenige Logs sind das gar nicht, ich habe jetzt dem Apache2 sämtliche Logs abgewöhnt, da diese innerhalb kürzester Zeit zu MegaBytes anwachsen (viel mehr Einträge als MySQL produziert).
[...]
den access.log auszuschalten finde ich ok, ist im lokalen Netzwerk nicht wirklich wichtig. Aber statt den error.log komplett abzuschalten, würde ich an Deiner Stelle den Loglevel von PHP mit error_reporting (E_ERROR); runtersetzen. Damit bleibt die Error.log leer aber man bekommt mit, wenn mal was passiert.

Gibt es weitere Loggings, die schadlos deaktiviert werden können?
Ich wüsste kein Systemprogramm, welches auf Logdateien zugreift, also schalt ab, was sich abschalten lässt. Allerdings würde ich das nicht empfehlen, dann doch lieber 10M für ne Ramdisk opfern.
 
@JL3: Das wäre natürlich auch eine Methode: readonly mounten :D
Dann kann man aber auch Gewolltes nicht mehr schreiben. ;)

@jono: ErrorLog auskommentieren ist keine gute Idee, dann schreibt es glaube ich default irgendwo hin. Besser umleiten nach /dev/null
ErrorLog lasse ich aber schreiben, sonst kommt auch bei Tests gar nichts da an. Wenn die Scripte laufen dann lieber in die Scripte error_reporting(0);
Was alles nioch beim apache2 ausgeschaltet werden kann, kannst du im SAS4PI-Web hier nachlesen: http://sas4pi.square7.ch/sas/komplettraspberrypi.php#ai

Vollkommen ohne jedweden Schreibvorgang müsste man alles auslagern, was ohnehin schreiben muss... wird schwierig. ;)
 
"Dann kann man aber auch Gewolltes nicht mehr schreiben."
...it depends.

Ein Softlink funktioniert trotzdem, auch auf readonly.
Das kennen wir doch noch von der Fritz!Box, oder?
 
Ja, das ist eine gute Möglichkeit für einzelne Dateien, dann diese auf einem anderen Medium per Softlink anbinden.

Muss das irendwann mal für den Pi basteln. :)
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.