Préserver la SD Card: Episode I, les faits et les logs

Notre Raspberry fonctionne 24h/24h, 7 jours sur 7 durant 365 jours de l’année sur une carte SD, subit des reboot, des coupures de courant…

Les carte SD équipant les Raspberry ont un nombre limité de cycles d’écritures (entre 10 000 et 100 000 pour un même emplacement (bloc) sur la carte) lien http://fr.wikipedia.org/wiki/M%C3%A9moire_flash#Dur.C3.A9e_de_vie

Et votre OS ne travaille QUE sur cette carte. Même si les constructeurs ont intégré des mécanismes de répartition d’écriture pour limiter les écritures répétées au même endroit nous voyons vite que un problème va se poser

Nous allons voir ici les moyens dont nous disposons pour allonger la durée de vie de notre carte SD.

Plusieurs techniques sont utilisables :

  1. Diminuer la quantité d’écritures sur la SD.
  2. Ne se servir de la carte SD que pour booter, un disque USB sera utilisé pour tout le reste
  3. Les options 1 et 2 peuvent être cumulées

Voyons ici le point 1, d’autres articles suivront concernant le point 2 et 3.

Économisons  la carte SD

Tout d’abord demandons nous quels sont les logiciel/processus qui utilisent la carte,

On peut penser à 2 choses :

  • à nos scripts, sh, python , perl… qui utilisent un répertoire/fichier partagé pour lire/écrire des fichiers et qui font cela toutes les 10 secondes = 6 x par minute, 36 x par heure, 864 x / jour), pour cela utilisons un RAMDRIVE
  • aux logs debian., diminuons la quantité écrite.

– 1 – Utilisation de RAMDRIVE à la place de /tmp

L’idée est de créer un disque (RAMDRIVE) en mémoire au lieu d’utiliser le disque dur puis de modifier nos scripts pour utiliser cet emplacement.

Un article détaillé ici https://easydomoticz.com/ajouter-un-ram-drive-pour-le-raspberry/

Maintenant au lieu d’utiliser /tmp de votre SD  Card, utilisez plutôt /var/tmp dans vos scripts.

Toutefois faites attention la RAM est vidée à chaque reboot du Raspberry et vous perdrez donc vos fichiers contenus dans celle ci.

– 2 – Les logs Raspbian

Ce sont les logs debian qui écrivent beaucoup sur le disque SD

En lançant un

sudo find /bin /boot /etc /home /lib /opt /root /run /sbin /tmp /usr /var -mmin -10

qui permet de connaitre les fichiers modifies depuis 10 minutes on a

/home/pi/domoticz/Config/zwscene.xml
/home/pi/domoticz/Config/zwcfg_0x0184d0f3.xml
/home/pi/domoticz/domoticz.db-wal
/home/pi/domoticz/domoticz.db
/home/pi/domoticz/domoticz.db-shm
/run/samba/connections.tdb
/run/samba/serverid.tdb
/tmp
/var/lib/ntp
/var/lib/ntp/ntp.drift
/var/log/syslog
/var/log/auth.log
/var/log/messages
/var/log/kern.log
/var/log/debug
/var/cache/samba
/var/cache/samba/browse.dat

soit , la gestion Domoticz,un peu de samba et beaucoup de log système

  • Diminuons la verbosité (!) des logs système

N.B Ces manips ont pour but de diminuer la quantité d’informations écrites dans tous les fichiers de log, vos logs seront donc moins précis, moins bavards attention donc en cas de besoin vous n’aurez peut être pas le niveau de détail souhaité.

Tout ce qui suit présume que vous COMPRENEZ ce que vous faîtes, passez les lignes ci-dessous au crible de VOTRE intelligence avant d’appliquer mécaniquement.

Gardez les copies d’origine de tous les fichiers modifiés.

2 – I – Le fichier cmdline.txt

On peut par le bais de ce fichier diminuer notablement la quantité de lignes écrites dans les fichiers log.

Recopier le fichier /boot/cmdline.txt sous un nouveau nom puis éditer cmdline.txt et y insérer loglevel=2  avec des espaces

dwc_otg.lpm_enable=0  root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait loglevel=2

Conservez la version d’origine sous un autre nom, merci.

Un reboot et les logs seront moins bavards

2 – II –  Modification de la configuration des logs

Afin de stocker moins d’info dans les fichiers de log on peut modifier la config de syslog pour ne stocker que les erreurs d’importance élevée.

Faites une sauvegarde sous un nouveau nom de /etc/rsyslog.conf

Conservez la version d’origine sous un autre nom, merci.

Editez le fichier /etc/rsyslog.conf , placez à l’intérieur cette  config

#  /etc/rsyslog.conf    Configuration file for rsyslog.
#
#                       For more information see
#                       /usr/share/doc/rsyslog-doc/html/rsyslog_conf.html
# Ecrire les messages critiques
*.emerg                                       /var/log/emerg
*.alert                                       /var/log/alert
*.crit                                        /var/log/crit
*.err                                         /var/log/err
# Save boot messages also to boot.log
local7.*                                      /var/log/boot.log

Cela à pour but de ne mémoriser QUE certains incidents critiques et pas tout.

Il faut savoir que à chaque message système est également associé un niveau de priorité. En voici la liste par ordre décroissant :

  • emerg : « Au secours ! » le système est probablement inutilisable ;
  • alert : vite, il y a péril en la demeure, des actions doivent être entreprises immédiatement ;
  • crit : les conditions sont critiques ;
  • err : erreur ;
  • warn : avertissement (erreur potentielle) ;
  • notice : condition normale mais message significatif ;
  • info : message informatif ;
  • debug : message de débogage.

Ainsi les messages d’erreur sont dan /var/log/err , les critiques dans /var/log/crit mais vous voyez que vous pouvez dispatcher cela comme bon vous semble.

Je ne mémorise pas warn,notice,info et debug

 Une discussion dont est tirée en partie cet article à eu lieu ici http://www.raspberrypi.org/forums/viewtopic.php?t=26048&p=253577

2- III –  Modification de l’emplacement de /var/log.

Remarquez dans la config plus haut que tous les logs sont dans /var/log.

Pour ne plus utiliser la Sd card, on peut envoyer /var/log en mémoire RAM

Inconvénient :  A chaque reboot on efface la RAM et il n’y aura donc pas de log entre 2 reboot, c’est une solution que je trouve vraiment dangereuse car sans visibilité sur le système.

Si vous souhaitez détourner /var/log dans la RAM , modifiez /etc/fstab et ajoutez cette ligne

tmpfs /var/log tmpfs defaults,nosuid,nodev,relatime 0 0

La suite dans un prochain épisode.

Posted in domoticz, linux, materiel, raspberry.

2 Comments

  1. salut serait il possible de cree un script pour automatiser cela ( sur l episode 1 et 2 afin de faciliter la chose?

  2. Bonjour,
    Oui il est possible de faire un script qui automatise tout cela mais
    Non car j’ai écrit dans l’article

    Tout ce qui suit présume que vous COMPRENEZ ce que vous faîtes, passez les lignes ci-dessous au crible de VOTRE intelligence avant d’appliquer mécaniquement.

    Je ne veux pas d’un mécanisme ou en cas d’erreur tu ne sait pas comment t’en sortir.

    Il faut faire ces manips si et seulement si on les comprends, je ne veux pas de la responsabilité du « ca marchait bien avant et maintenant ça ne marche plus »

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *