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…
3 réflexions au sujet de « Raspberry Pi / Linux : rediriger les logs en RAM disk »