Die SD-Karte beim Raspberry Pi schonen

Die SD-Karte beim Raspberry Pi schonenDie SD-Karte beim Raspberry Pi schonen

Die SD-Karte beim Raspberry Pi schonen ist eine gute Idee, führen doch viele Schreibzugriffe dazu, dass sich die Lebensdauer der SD-Karte verkürzt. Da der Raspberry Pi eine SD-Karte als Festplatte einsetzt, die bspw. zum Schreiben der Logfiles oder beim Update der Zeitstempel des letzten Zugriffs für Dateien des darauf laufenden Linux Betriebssystems mächtig strapaziert wird, haben sich findige Köpfe ein Verfahren überlegt, die Logfiles in den Arbeitsspeicher zu verschieben und reduzieren damit die Anzahl der Schreibzugriffe deutlich. Bei meinem Raspberry Pi hatte ich anfänglich alle vier Monate die Aufgabe die SD-Karte zu erneuern. Einen sehr schöner Artikel über die im Folgenden beschriebenen Verfahren gibt es bei Lexxi.

Zeitstempel für den letzten Lesezugriff nicht mehr schreiben

Um das Schreiben der Zeitstempel für den letzten Lesezugriff abzustellen, editiert man die Datei /etc/fstab und ergänzt dort die Attribute ’nodiratime‘ und ’noatime‘.

/dev/mmcblk0p2 / ext4 defaults,nodiratime,noatime 0 1

Logdateien in den Arbeitsspeicher verlegen

Um Schreibzugriffe für die Logfiles deutlich zu reduzieren wird das Verzeichnis /var/log (dort stehen ja bekanntlich fast alle Logfiles) in einer Ramdisk verlegt. Damit wird die Anzahl der Schreibzugriffe reduziert, weil nur noch beim Herunterfahren die SD-Karte aktualisiert wird, die bringt aber auch den Nachteil mit sich, das bei einem Absturz des Raspberry Pi keine Log-Informationen zur Verfügung stehen, um diesen zu analysieren, denn diese Daten waren ja zuvor im Arbeitsspeicher.

Zur Einrichtung müssen folgende Pakete installiert werden:

sudo apt-get install rsync lsof
wget http://www.tremende.com/ramlog/download/ramlog_2.0.0_all.deb
sudo dpkg -i ramlog_2.0.0_all.deb

Die Konfiguration erfolgt in drei Schritten:

1. Editieren der Datei /etc/default/ramlog: Dort gibt man an wie viel Speicher für die Logfiles verwendet werden soll. Ich habe erst mal 20 MegaByte eingestellt (TMPFS_RAMFS_SIZE=20m). Da ich keine Datenbanken oder sonstige schwergewichtige Anwendungen auf dem Raspberry Pi betreibe scheint das zu reichen.

2. Verhalten des Syslog Daemons verändern: Damit der Syslog Daemon nicht zu früh startet ändern wir die Abhängigkeiten für den Start in dem wir in der Datei /etc/init.d/rsyslog ganz oben die Zeilen wie folgt ändern: # Required-Start: $remote_fs $time ramlog
# Required-Stop: umountnfs $time ramlog
Damit diese Einstellungen auch berücksichtigt werden führen wir einmal dpkg-reconfigure insserv aus.

3. Starten des ramlog Dienstes und Reboot: Mit /etc/init.d/ramlog enable starten wir jetzt den ramlog Dienst. Gemäß Aussage des Autors sollte man zweimal neu starten bis sich ramlog eingerichtet hat. Dabei bitte die Ausgaben prüfen, ob es noch irgendwelche Fehler gibt.

Bei mir hat das alles wie am Schnürchen geklappt.

Teile diesen Beitrag

36 Kommentare zu „Die SD-Karte beim Raspberry Pi schonen“

  1. Hallo,
    danke für die Anleitung!

    Ich habe alles wie beschrieben gemacht, dazu hätte ich zwei Fragen:
    Wie kann ich überprüfen, dass die log-files jetzt in einem RAM-Verzeichnis liegen (ich sehe keine Änderung in der /etc/fstab)?
    Ich möchte mir während einer Testphase die log-files durch ein python-Skript regelmäßig perMail schicken, wo stehen diese Dateien im Verzeichnisbaum?

    Mit freundlichen Grüßen
    Uli

    1. Hallo Uli,

      in der Manpage steht

      How it works and what it does:

      1.
      Ramlog starts among the first daemons (it depends on other daemons you have installed).
      2.
      Directory /var/log.hdd is created and hardlinked to /var/log.
      3.
      In case tmpfs (default) or ramfs is used, it is mounted over /var/log
      If kernel ramdisk is used, ramdisk created in /dev/ram9 and it is mounted to /var/log, by default ramlog takes all ramdisk memory specified by kernel argument „ramdisk_size“.
      5.
      All other daemons are started and all logs are updated in ramdisk. Logrotate works on ramdisk as well.
      6.
      In case ramlog is restarted (by default it is one time per day), directory /var/log.hdd is synchronized with /var/log using rsync. Frequency of the automatic log saves can be controller via cron, by default, the ramlog file is placed into /etc/cron.daily
      7.
      On shutdown ramlog shuts among the last daemons.
      8.
      During ramlog stop phase files from /var/log.hdd are synchronized with /var/log
      Then /var/log is unmounted, /var/log.hdd is unmounted as well and empty directory /var/log.hdd is deleted.

      Hoffe das hilft Dir.

      Gruß, Hans

  2. hallo Hans, Danke für den Artikel!
    ergänze bitte noch ein paar „sudo“ dann funktioniert das auch mit dem user pi. s. unten
    Ich frage mich, wenn das system läuft kann ich ja auf der Ramdisk nach mögl. Fehlern im Log suchen. Vielleicht brauch ich das zurückschreiben der logs auf die sdcard nicht. Wie kann man das zurückschreiben verhindern?

    Ich hab mir gleich mal ein script für die Einrichtung geschrieben.
    #!/bin/bash
    # filename : install_00_sdcardsave.sh
    ###########################################################
    # Maßnahmen um die lebensdauer der SD-card zu verlängern

    ############################################################
    #0. System aktualisieren
    sudo apt-get update && sudo apt-get upgrade -y

    ############################################################
    #1. Zeitstempel für den letzten Lesezugriff nicht mehr schreiben
    #Achtung!
    # – die Datei-/Ordnereigenschaft „Access-Zeitstempel“ kann dann nicht mehr für Auswertungen genutzt werden.
    # – Erstellung-/Änderungszeitstempel werden aber weiterhin gesetzt
    sudo sed -i ’s|^\/dev\/mmcblk0p2.*$|\/dev\/mmcblk0p2 \/ ext4 defaults,nodiratime,noatime 0 1|g‘ /etc/fstab

    ############################################################
    #2. Logdateien in den Arbeitsspeicher verlegen
    #- Nachteil: Pi muss immer sauber herunterfahren, damit die Log-Dateien wieder auf die SD-Card geschrieben werden
    #2.1. Pakete installieren
    sudo apt-get install rsync lsof -y
    cd /var/install
    wget http://www.tremende.com/ramlog/download/ramlog_2.0.0_all.deb
    sudo dpkg -i ramlog_2.0.0_all.deb
    #2.2.1 Editieren der Datei /etc/default/ramlog // RAM-Größe auf 20MB einstellen
    sudo sed -i ’s|^TMPFS_RAMFS_SIZE=|TMPFS_RAMFS_SIZE=20m|g‘ /etc/default/ramlog
    #2.2.2 Verhalten des Syslog Daemons verändern (/etc/init.d/rsyslog ramlog ergänzen),damit der Syslog Daemon nicht zu früh startet
    sudo sed -i ’s|# Required-Start:.*$|# Required-Start: $remote_fs $time ramlog|g‘ /etc/init.d/rsyslog
    sudo sed -i ’s|# Required-Stop:.*$|# Required-Stop: umountnfs $time ramlog|g‘ /etc/init.d/rsyslog
    sudo dpkg-reconfigure insserv
    #2.2.3. Starten des ramlog Dienstes und Reboot
    sudo /etc/init.d/ramlog enable

    #3. automatische Überprüfung mittels e2fsck nach x Tagen und y Mounts abschalten
    # parameter s. „man tune2fs“
    sudo tune2fs -i0 -c0 /dev/mmcblk0p2

    #4. neustarten (evtl. dann noch ein zweitesmal!?)
    sudo reboot

    1. Hallo Michael,

      danke für den Hinweis. Habe es ergänzt. Und danke für das Skript ist sicherlich hilfreich. Wenn Du die Logs nicht zurückschreiben willst, dann wäre es sicherlich eine Option einfach das Verzeicnis mit einem Schreibschutz zu versehen. Einen Parameter kenne ich nicht.

    2. Hallo,
      ich habe die Schritte einzeln durchgeführt und es scheint nicht so zu klappen wie gedacht. Auch nach mehrmaligen Neustarts leider nicht, siehe hier:
      —————–%<—————–
      pi@raspberrypi:/etc/init.d $ sudo /etc/init.d/ramlog enable
      [….] Enabling ramlog…update-rc.d: warning: start and stop actions are no longer supported; falling back to defaults
      . ok
      pi@raspberrypi:/etc/init.d $ sudo /etc/init.d/ramlog status
      ● ramlog.service – LSB: moves /var/log into ramdisk
      Loaded: loaded (/etc/init.d/ramlog)
      Active: failed (Result: exit-code) since Mon 2016-02-08 16:17:43 CET; 5min ago

      Feb 08 16:17:42 raspberrypi ramlog[396]: ramlog: Previous shutdown/restart was unclean, some logs may be lost. … (warning).
      Feb 08 16:17:43 raspberrypi ramlog[396]: ramlog: Previous shutdown/restart was unclean, some logs may be lost.Starting ramlog-tmpfs 2.0.0: /bin/cp: ‘/var/log.hdd/.’ and ‘/var/log/.’ are the same file
      Feb 08 16:17:43 raspberrypi ramlog[396]: failed!
      Feb 08 16:17:43 raspberrypi systemd[1]: ramlog.service: control process exited, code=exited status=1
      Feb 08 16:17:43 raspberrypi systemd[1]: Failed to start LSB: moves /var/log into ramdisk.
      Feb 08 16:17:43 raspberrypi systemd[1]: Unit ramlog.service entered failed state.
      —————–%<—————–

      Hat jemand einen Tipp wie ich es beheben und dann auch prüfen kann ob es funktioniert?

      Danke und Gruß
      Rene

      1. Hallo Rene,
        kannst Du uns noch ein bisschen mehr über Deine Systemugebung erzählen. Welches OS in welcher Version auf welchem Gerät.

        Danke, Hans

      2. Hallo Hans,

        klar, gern.
        —————–%<—————–
        PRETTY_NAME="Raspbian GNU/Linux 8 (jessie)"
        NAME="Raspbian GNU/Linux"
        VERSION_ID="8"
        VERSION="8 (jessie)"
        ID=raspbian
        ID_LIKE=debian
        HOME_URL="http://www.raspbian.org/&quot;
        SUPPORT_URL="http://www.raspbian.org/RaspbianForums&quot;
        BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs&quot;

        Linux version 4.1.17-v7+ (dc4@dc4-XPS13-9333) (gcc version 4.8.3 20140303 (prerelease) (crosstool-NG linaro-1.13.1+bzr2650 – Linaro GCC 2014.03) ) #834 SMP Mon Feb 1 15:17:54 GMT 2016
        —————–%<—————–

        —————–%<—————–
        ———————————————–
        RASPBERRY PI 2 SYSTEM INFORMATION
        ———————————————–
        CPU current Frequency..: frequency(45)=600000000
        CORE current Frequency.: frequency(1)=250000000
        CORE current Voltage…: volt=1.2000V
        SD-RAM CORE Voltage…: volt=1.2000V
        SD-RAM IO Voltage…: volt=1.2000V
        SD-RAM PHY Voltage…: volt=1.2250V
        CPU current Temperature: temp=37.9'C

        CODECS:
        H264=enabled
        MPG2=disabled
        WVC1=disabled

        Firmware Version…….: Feb 1 2016 17:51:17
        Copyright (c) 2012 Broadcom
        version b3dc56931507f355d503ea69397778643f7a3dc3 (clean) (release)
        —————–%<—————–

        Spannend waere auch zu wissen wie ich bei Bedarf ramlog erfolgreich entfernen kann, denn das habe ich bisher auch nicht hinbekommen.
        —————–%<—————–
        pi@raspberrypi:~ $ sudo service ramlog stop
        pi@raspberrypi:~ $ sudo service ramlog disable
        /etc/init.d/ramlog: 470: /etc/init.d/ramlog: nfo: not found
        [FAIL] ramlog: get_state error: Multiple devices running at the same time. failed!
        pi@raspberrypi:~ $ sudo apt-get remove ramlog
        Reading package lists… Done
        Building dependency tree
        Reading state information… Done
        The following packages will be REMOVED:
        ramlog
        0 upgraded, 0 newly installed, 1 to remove and 6 not upgraded.
        1 not fully installed or removed.
        After this operation, 299 kB disk space will be freed.
        Do you want to continue? [Y/n] y
        (Reading database … 36862 files and directories currently installed.)
        Removing ramlog (2.0.0) …
        /etc/init.d/ramlog: 470: /etc/init.d/ramlog: nfo: not found
        [FAIL] ramlog: get_state error: Multiple devices running at the same time. failed!
        dpkg: error processing package ramlog (–remove):
        subprocess installed post-removal script returned error exit status 152
        Errors were encountered while processing:
        ramlog
        E: Sub-process /usr/bin/dpkg returned an error code (1)
        —————–%<—————–
        Danke und Gruß
        Rene

  3. When installing package ramlog_2.0.0_all.deb I get this error:
    root@raspberrypi:/tmp# dpkg -i ramlog_2.0.0_all.deb
    Selecting previously unselected package ramlog.
    (Reading database … 24036 files and directories currently installed.)
    Unpacking ramlog (from ramlog_2.0.0_all.deb) …
    Setting up ramlog (2.0.0) …
    ramlog err in tfdv: setsebool – Wrong path or file(s) /usr/sbin/setsebool not found!
    dpkg: error processing ramlog (–install):
    subprocess installed post-installation script returned error exit status 252
    Errors were encountered while processing:
    ramlog

    Any idea what is causing this?

      1. Hello Hans,

        when I try to install package „policycoreutils“, the installer wants to install more packages. And I don’t have sufficient freespace for all packages.
        0 upgraded, 87 newly installed, 0 to remove and 0 not upgraded.
        1 not fully installed or removed.
        Need to get 31.6 MB of archives.
        After this operation, 158 MB of additional disk space will be used.

        Is there any other solution?

        THX
        Thomas

      2. You can try to extract setsebool from the .deb package and see if it works. Google is your friend on how to do this.
        Cheers, Hans

      3. I have moved file
        setsebool
        from package
        policycoreutils_2.1.10-9_armhf.deb
        to /usr/sbin.

        However, now I get a different error:
        Setting up ramlog (2.0.0) …
        ramlog err in tfdv: getsebool – Wrong path or file(s) /usr/sbin/getsebool not found!
        dpkg: error processing ramlog (–configure):
        subprocess installed post-installation script returned error exit status 252
        Errors were encountered while processing:
        ramlog
        E: Sub-process /usr/bin/dpkg returned an error code (1)

    1. I checked all files in package „policycoreutils_2.1.10-9_armhf.deb“ but there’s no file „getsebool“ included.

      Any other idea where this binary is included?

      1. Hi,

        I have now extracted all dependencies and put them on Raspi.

        However, starting ramlog now fails with a another error related to the binary.
        root@pc7-raspi:/tmp# /etc/init.d/ramlog start
        Segmentation fault
        /etc/init.d/ramlog: 306: [: -eq: unexpected operator
        [FAIL] Starting ramlog-tmpfs 2.0Error: /var/log is in use… failed!

        Any idea?

      2. Mhm,…it is not a problem in the inary but with a shell skript obviously the -eq operator is not supported. Which distribution you have and what shell is used?

  4. Pingback: simpleNewz - Tuxlog - WordPress & Linux » Tuxlog - WordPress & Linux RSS Feed for 2014-10-18

  5. Pingback: simpleNewz - Tuxlog - WordPress & Linux » Tuxlog - WordPress & Linux RSS Feed for 2014-10-17

  6. Pingback: simpleNewz - Tuxlog - WordPress & Linux » Tuxlog - WordPress & Linux RSS Feed for 2014-10-13

  7. Pingback: simpleNewz - Tuxlog - WordPress & Linux » Tuxlog - WordPress & Linux RSS Feed for 2014-10-12

  8. Pingback: simpleNewz - Tuxlog - WordPress & Linux » Tuxlog - WordPress & Linux RSS Feed for 2014-10-09

  9. Mit „tune2fs -i0 -c0 /dev/mmcblk0p2“ (-c -i ) schaltest du die automatische Überprüfung mittels e2fsck nach x Tagen und y Mounts ab. Zwar bist du dann für den Check selbst zuständig, aber die SD lebt somit sicherlich länger…

  10. Pingback: Tuxlog - WordPress & Linux » Tuxlog - WordPress & Linux RSS Feed

  11. Eventuell laufen auf dem Raspberry noch weitere Dienste, die zwingend nach ramlog gestartet werden müssen. Diese lassen sich wie folgt herausfinden:

    /etc/init.d/ramlog teststartstop

    Ich persönlich musste ramlog auch noch im samba, im openvpn und im wicd eintragen. Parallel dazu hilft auch noch ein Blick auf das Änderungsdatum der Dateien in /var/log. Alles, was größer als 0 Byte ist, sollte zumindest einmal „angeguckt werden“.

    Wenn ramlog nach diversen Experimenten mit den Abhängigkeiten korrekt eingebunden ist und dennoch nicht „anspringt“, hilft i.d.R. folgende Vorgehensweise:

    /etc/init.d/ramlog disable
    [neu booten]
    /etc/init.d/ramlog enable
    [zwei mal neu booten]

    Gruß,
    der Altmetaller
    http://www.altmetaller.de/

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

:bye: 
:good: 
:negative: 
:scratch: 
:wacko: 
:yahoo: 
B-) 
mehr...
 


Diese Seite verwendet Cookies. Mit der Nutzung von tuxlog erklärst Du Dich mit der Verwendung von Cookies einverstanden. Detaillierte Informationen über die Verwendung von Cookies auf dieser Website findest Du in der Datenschutzerklärung.

Nach oben scrollen