Voorkom een corrupte Micro SD-kaart in de Raspberry Pi

Als je al wat ervaring met een Raspberry Pi (i.c.m. Domoticz) hebt dan weet je dat de Micro SD-kaart nogal wat te lijden heeft vanwege de vele schrijf-acties door het operating system op de MicroSD kaart. Veel applicaties schrijven veelvuldig hun logbestand weg naar de Micro SD-kaart. Wat denk je van Domoticz? Indien je wat meer sensoren en switches heb dan wordt er zowat iedere seconde wel iets weggeschreven. Gelukkig is daar een oplossing voor: Log2Ram. Deze applicatie kan er voor zorgen dat log-data naar RAM wordt weggeschreven. Ieder uur (en als de Raspberry Pi op een normale wijze uitgezet wordt) dan worden de log-bestanden vanuit RAM naar de MicroSD kaart weggeschreven. Dit betekent 99,9% minder schrijfacties op de geheugenkaart!

Benodigdheden

Log-bestanden Raspbian

Haal de installatie van de GitHub-repository:

curl -Lo log2ram.tar.gz https://github.com/azlux/log2ram/archive/master.tar.gz
tar xf log2ram.tar.gz
cd log2ram-master

Ken de juiste rechten toe aan het script:

chmod +x install.sh

Start het installatie-scripts:

sudo ./install.sh

Verwijder de installatie-bestanden:

cd ..
rm -r log2ram-master

Herstart de Raspberry Pi:

sudo reboot

Standaard schrijft Log2Ram ieder uur de data naar de geheugenkaart. Mocht je van mening zijn dat dit te vaak is dan kun je dit aanpassen door het dagelijks weg te schrijven. Het cron-bestand verplaatsen we dan van uurlijks naar dagelijks:

sudo mv /etc/cron.hourly/log2ram /etc/cron.daily/log2ram
sudo reboot

Controleer na de reboot of alles goed gegaan is:

df -h

 

Tijdelijke bestanden Domoticz

De volgende stap is om de tijdelijke bestanden die Domoticz nodig heeft te verplaatsen naar RAM:

sudo mkdir /tmp/log
sudo cp -p /etc/fstab  /etc/fstab.save
sudo nano /etc/fstab

Voeg onderstaande regel toe:

tmpfs	        /tmp/log        tmpfs   nodev,nosuid,size=100M 0 0

Ik heb er voor gekozen om een 100 Mb RAM-drive aan te maken, maar 25 of 50 Mb moet doorgaans ook voldoende zijn.

Sla het bestand op en mount de RAM-drive:

sudo mount /tmp/log

Controleer of alles goed gegaan is:

df -h

Stop Domoticz en pas het /etc/init.d/domotic.sh bestand aan:

sudo /etc/init.d/domoticz.sh stop
sudo nano /etc/init.d/domoticz.sh

Zoek nu #DAEMON_ARGS="$DAEMON_ARGS -log /tmp/domoticz.txt" in het bestand. Wijzig deze regel naar DAEMON_ARGS="$DAEMON_ARGS -log /tmp/log/domoticz.log -loglevel=normal". Vergeet niet het #-teken weg te halen!

Voeg nu regel 6 t/m 9 toe, zoals in onderstaand voorbeeld:

#
# Function that starts the daemon/service
#
do_start()
{
       # edit to move SQLite temp files to RAM drive
       ln -sf /tmp/log/domoticz.db-shm /home/pi/domoticz
       ln -sf /tmp/log/domoticz.db-wal /home/pi/domoticz
       # end of edit
       # Return
       #   0 if daemon has been started
       #   1 if daemon was already running
       #   2 if daemon could not be started
       start-stop-daemon --chuid $USERNAME --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
               || return 1
       start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
               $DAEMON_ARGS \
               || return 2
}

Sla de wijzigingen op en sluit de editor.

Optioneel kun je ook de Z-wave log naar de RAM-drive verplaatsen:

sudo rm /home/pi/domoticz/Config/OZW_Log.txt
ln -sf /tmp/log/OZW_Log.txt /home/pi/domoticz/Config

Herstart Domoticz:

sudo /etc/init.d/domoticz.sh start

Het kan zijn dat er gevraagd wordt om een systemctl daemon-reload te doen:

sudo systemctl daemon-reload

Je zou nu alle relevante bestanden in de /tmp/log/ directory moeten zien… Hier is een voorbeeld:

ls /tmp/log -l

 

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *