Raspberry Pi / Linux : rediriger les logs en RAM disk

Les utilisateurs du Pi le savent : la durée de vie des cartes SD est pour le moins limitée. Un Pi installé en serveur Apache+MySQL un peu sollicité (qui a parlé de OwnCloud ? ^^) peut griller une carte en quelques mois, voire moins…

Pour réduire l’écriture preque constante causée par les logs système, Apache, MySQL, etc, il existe une solution radicale : les rediriger dans une partie de la RAM (on va même pouvoir aller plus loin en supprimant complètement le swap).

Cela présente plusieurs avantages :
– on étend considérablement la durée de vie de la SD : les logs ne sont plus écrits dessus, mais en RAM
– on accélère un peu le Pi : la RAM étant largement plus rapide qu’une SD, on peut en déduire qu’un système relativement sollicité devrait gagner en réactivité. C’est une théorie de ma part, mais quand on voit la quantité de logs générés uniquement par Apache, je pense que le raisonnement se tient… à vérifier 🙂

Il existe toutefois un inconvénient, mais qui peut aussi être considéré comme un avantage, et même important pour certains utilisateurs :
– les logs ne seront accessibles qu’AVANT l’extinction du Pi. Après un reboot, toutes les données des logs seront vierges : normal, la RAM se vide à l’extinction, c’est une mémoire volatile.
C’est donc une bonne méthode pour effacer des traces entre les reboots. Attention toutefois, un reboot est nécessaire pour « effacer » vraiment les données de la RAM : une simple extinction (sans redémarrage) peut permettre à des personnes bien équipées d’en extraire encore des infos…

Nous prendrons les logs système nécéssaires (syslog, dhcp et apt) et Apache pour l’exemple, mais vous pouvez y ajouter tout un tas d’autres services qui créent des journaux : MySQL, SendMail, samba, privoxy, Tor, etc… Cela dépend de votre installation, et de vos besoin.

1- Enlever le service du démarrage

Nous devons nous assurer que le service (Apache) ne démarre pas trop tôt. Nous allons donc le stopper, puis le désactiver du boot :

sudo service apache2 stop
sudo update-rc.d apache2 disable

2- Création du RAM disk

Nous allons supprimer le dernier log d’Apache, puis créer un point de montage pour notre RAM disk :

sudo rm -f /var/log/apache2/log
sudo mkdir /mnt/ramdisk

Nous allons modifier le fichier fstab qui monte automatiquement les disques au boot :

sudo nano /etc/fstab

A la fin du fichier, ajoutez ces lignes :

    none /tmp ramfs defaults 0 0
    none /mnt/ramdisk ramfs defaults 0 0
    none /var/log/apache2 ramfs defaults 0 0
    none /var/log/apt ramfs defaults 0 0
    none /var/lib/dhcp ramfs defaults 0 0

Sauvegardez avec CTRL-O, confirmez avec y suivi de entrée, et quittez avec CTRL+X

Nous allons maintenant monter le RAM disk, y déplacer le syslog courant, et désinstaller le package swap :

sudo mount -a
sudo mv /var/log/syslog /mnt/ramdisk/syslog; ln -s /mnt/ramdisk/syslog /var/log/syslog
sudo mv /var/log/messages /mnt/ramdisk/messages; ln -s /mnt/ramdisk/messages /var/log/messages

sudo apt-get remove dphys-swapfile -y

3- Le script de démarrage

Nous allons rajouter Apache au fichier rc.local, ce qui lui permettra de démarrer correctement, mais après le montage du RAM disk :

sudo nano /etc/rc.local

Ajoutez ces lignes juste avant le « exit 0 » final, cela démarrera Apache après avoir changé quelques permissions nécessaires :

    chmod 777 /var/log/apache2 && /etc/init.d/apache2 restart
    chmod 1777 /tmp

Sauvegardez avec CTRL-O, confirmez avec ‘y’ suivi de entrée, et quittez avec CTRL+X.

Les plus observateurs auront remarqué l’étrange chmod 1777 dans la toute dernière commande. Le préfixe ‘1’ signifie ‘sticky bit’ : le dossier est accessible en lecture/écriture par n’importe quel user (777) mais aucun user ne peut y supprimer/modifier les fichiers d’un autre user.

C’est terminé, et devrait être actif après un reboot…

About Captain Stouf

Spécialiste en systèmes informatiques, Développeur matériel et logiciel, Inventeur, Maker : électronique, Systems on Chip, micro-controlleurs, Internet of Things, Modélisation / Scan / Impression 3D, Imagerie…

3 thoughts on “Raspberry Pi / Linux : rediriger les logs en RAM disk

  1. Xavier
    04/08/2014 at 0 h 36 min

    Re !

    Il doit y avoir un erreur ici : « sudo mount -a »

  2. Xavier
    04/08/2014 at 0 h 40 min

    du coup les commandes suivantes ne marchent pas plus…

    1. Captain Stouf
      04/08/2014 at 4 h 13 min

      Tu es bien sous Raspbian ? Parce que chez moi, avec un Raspbian à jour, :
      pi@raspberrypi ~ $ mount --help
      [...]
      mount -a [-t|-O] ... : mount all stuff from /etc/fstab
      [...]

      … et mount -a fonctionne très bien 🙂

      Sinon tu as toujours la méthode un peu bourrine du lien symbolique qui doit surement fonctionner :
      – dans rc.local :
      sudo /etc/init.d apache2 stop
      sudo mkdir /var/run/shm/apache2
      sudo ln -s /var/run/shm/apache2 /var/log/apache2
      sudo /etc/init.d apache2 start

      fait de tête et non testé, je précise. Mais l’idée c’est de créer un dossier en RAM au démarrage, et y rediriger les logs avec un lien symbolique. Le tout avant de démarrer apache bien sûr.

Laisser un commentaire