Prolonger la durée de vie de la carte SD d’un Raspberry PI

Cet article est le 2e d’une série de trois. Je vous rappelle ici mon but : faire tourner un serveur calibre sur mon Raspberry. Ma feuille de route :

  1. Monter de manière permanente un disque dur USB
  2. Optimiser les accès en écriture sur la carte SD
  3. Installer Calibre en mode serveur

La distribution Linux Raspbian pour le Raspberry est une bonne distribution, basée sur la Debian, qui est stable et performante. Mais un système Linux écrit souvent sur le disque dur pour deux raisons principales (autres que l’écriture de fichiers bien sur) :

  1. le swap
  2. les fichiers log

On va donc essayer de réduire ces deux choses pour limiter les accès en écriture sur la carte et ainsi augmenter sa durée de vie. Car c’est le problème principal des cartes SD : elles se fatiguent vite si on écrit souvent dessus.

Le swap

Le swap est un fichier d’échange qui intervient lorsque la RAM commence à être pleine ou qu’elle est sollicitée par un logiciel qui a besoin de ressource : le système va alors écrire sur le disque dur une partie de la RAM pour libérer de la place. C’est une zone d’échange, une sorte de RAM virtuelle qui augmente la taille de la RAM, mais qui est bien sur plus lente car elle passe par un accès disque. Le problème ici : le swap se trouve sur le disque, donc sur la carte SD du Raspberry.

On peut donc se passer de swap tant qu’on ne demande pas au Raspberry des taches trop gourmandes en RAM (ex : retouche d’images, …)

Vérifions cette histoire de swap par la commande top (en lançant simplement top dans un terminal). On obtient ceci :

swapon

On remarque qu’il y a du swap, pour l’instant non utilisé, mais réservé à cet effet, au niveau de la ligne qui commence par KiB Swap.

Pour rappel sur la commande Top et d’autres commandes du même style par ici….

Supprimons le swap par la commande :

sudo dphys-swapfile swapoff

et relançons top pour vérifier :

swapoff

Comme on le voit à présent, il n’y a plus de mémoire réservée pour le swap. Si jamais le système devient instable ou mou, par besoin de swap, on peut le réactiver avec la commande :

sudo dphys-swapfile swapon

Il y a toutefois un soucis : au redémarrage du Raspberry, le swap est réactivé, notre commande le désactive juste quand on lui demande. On peut enlever le swap automatiquement au démarrage par la commande :

sudo update-rc.d -f dphys-swapfile remove

Voilà une affaire de régler : plus de swap pour de bon !

Les fichiers log et temporaires

Le système Linux est très bavard et il écrit pas mal de chose à tout bout de champ. Le problème est que la carte SD subit de nombreuses écritures, ce qui n’est pas bon pour elle. On va donc déplacer les fichiers log dans la RAM du Raspberry, on profitera pour faire pareil avec les fichiers temporaires. Le seul soucis est qu’on perd les fichiers log du système. Ce n’est pas gênant de manière générale, mais ça le devient en cas de serveur web.

Pour cela on va modifier un peu le fichier /etc/fstab. On l’édite par la commande :

sudo nano /etc/fstab

Puis on ajoute ces lignes à la fin :

# les fichiers de log et tempo passent en RAM
tmpfs   /tmp            tmpfs   defaults,noatime,mode=1777,size=10m     0       0
tmpfs   /var/spool      tmpfs   defaults,noatime,mode=1777              0       0
tmpfs   /var/tmp        tmpfs   defaults,noatime,mode=1777,size=10m     0       0
tmpfs   /var/log        tmpfs   defaults,noatime,mode=0755,size=10m     0       0

Je précise pour certains répertoires size = 10m, pour limiter la taille et ne pas occuper trop de RAM. Cela préserve la RAM de trop gros fichiers. J’enregistre et je reboote. A présent mes 4 répertoires sont montés en RAM et plus sur la carte SD.

C’est gagné !

[Mise à jour du 16/11/2016] :

Attention toutefois avec le répertoire /var/spool. En effet ce répertoire contient le répertoire crontab qui gère tous les appelle à cron. Cron permet de définir des taches qui seront lancées à un instant donné, ou lancées périodiquement. Le fait que le répertoire crontab soit en ram détruira à chaque reboot du Raspberry la listes des taches programmées.

Donc si vous utilisez cron sur votre Raspberry, ne mettez pas /var/spool dans la ram.

Merci à ThePhenix pour l’info !

 

 

4 commentaires

  1. Bonjour , et si on veut remettre le swap en route apres l ‘ avoir desactivé avec la commande : sudo update-rc.d -f dphys-swapfile remove , que faut -il passer comme commande svp ?

Laisser un commentaire

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