Différences entre versions de « Rasp-SD-Preserver »

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche
Ligne 28 : Ligne 28 :
 
Plus de problème de cycle d'écriture sur la carte SD.
 
Plus de problème de cycle d'écriture sur la carte SD.
  
Voyez notre article "[http://arduino103.blogspot.be/2013/08/disque-externe-sur-raspberry-pi.html Disque externe sur Raspberry Pi]" pour en savoir plus
+
{{ambox|text=Voyez notre article "[http://arduino103.blogspot.be/2013/08/disque-externe-sur-raspberry-pi.html Disque externe sur Raspberry Pi]" pour en savoir plus}}
  
 
== Désactiver le Swap ==
 
== Désactiver le Swap ==

Version du 13 mars 2016 à 15:45

Durée de vie limitée des cartes SD

Les cartes SD peuvent être lues un nombre illimité de fois mais ne supportent que 10.000 à 100.000 cycles d'écritures!!!

Rasp-SD-Preserver-00.jpg

Cela semble énorme, surtout pour un appareil photo... cependant cette limite est atteignable dès lors que l'on utilise un système informatique. En cas d'accès intensif en écriture, une carte peut très bien rendre l'âme au bout de 6 mois (il n'y a malheureusement pas de miracle technologique). Chez MC Hobby, nous avons fait des tests intensifs et poussé des cartes à la défaillance en 5 heures.

De meilleure qualité sera votre carte SD... et plus longtemps elle tiendra. Les cartes de classe 10 ont une meilleure tenue dans temps.

Par contre, dès que cette dernière est utilisée en lecture/écriture (comme sur un Pi), elle rendra l'âme un jour ou l'autre. Pas de miracle, tout se résume à une question de temps.

Il est certes possible de contourner le problème de façon logiciel (ce que font les OS et appareils SD) en répartissant les cycles écritures sur toute la carte, en limitant le nombre d'écriture. Mais si cette échappatoire offre une durée de vie accrue, elle ne permet pas de faire un miracle.

Qu'est ce qui diminue la durée de vie de votre carte SD:

  • L'utilisation de la partition Swap
  • L'utilisation d'un système de fichier journalisé (pour sûr pour stocker des donnée... mais augmente aussi le nombre de cycle d'écriture pour le stockage d'une même information)
  • L'écriture systématique des Logs sur la carte SD

Voici donc différentes techniques pour ralonger la durée de vie de votre carte SD.

Utiliser un Disque USB

La solution la plus radicale est d'utiliser un disque dur USB sur lequel on transfert la partition RootFs de la carte SD.

Rasp-SD-Preserver-01.jpg

Après une modification mineure sur la carte SD, cette dernière peut être placée en lecture seule :-)

Plus de problème de cycle d'écriture sur la carte SD.

Désactiver le Swap

Beware, the Swap may kill SD Card!!!

Le Swap, c'est une partition spéciale dans laquelle le système d'exploitation copie des segments de mémoire pour la libérer PUIS l'attribuer à un processus qui en à besoin.

Et bien, dans son article sur Open Silicium, Mr Blaess réalisait un cluster de compilation à base de Raspberry-Pi (que je remercie très chaleureusement dans ce billet) à également détruit ses cartes SD en quelques heures seulement.

La compilation est un processus très gourmand en accès disque mais encore plus en mémoire, tant et si bien que la partition swap était très/trop sollicitée.

Résultat: de très nombreux cycles de lecture/écriture sur le swap... et oui, de la mémoire c'est très volatile et donc sujet à de rapides modifications. Et en conséquence... la mort très rapide de la carte SD.

Désactivez la partition Swap

Préserver la durée de vie de la carte SD est primordial. Il est donc préférable de désactiver la partition Swap. Il vaut mieux ne plus avoir de mémoire que plus de carte SD (et la perte de donnée qui va avec). A moins, bien entendu, d'avoir un vrai disque dur sur lequel déplacer la partition Swap.

sudo apt-get remove dphys-swapfile

Ram Disk

Certains projets font des lectures de senseurs, lectures destinées au stockage pour être exploité par la suite. C'est le cas de tous les projets Domotiques. Une lecture par minute + stockage = plusieurs écritures par minutes (n'oubliez pas, votre carte SD utilise un système de fichier journalisé).

Dans le cadre du projet Domo de Mr Mommens, il effectuais les écritures périodique sur un RamDisk (système de fichier en mémoire).

Au démarrage, que ce soit avec le traditionnel /etc/init.d ou cela doit être possible avec le nouveau 'system', on crée un petit ramdisk qui sert aux mesures qui se font toutes les secondes, minutes... et de temps en temps on synchronise le contenu sur la carte SD ou via le réseau.

Toutes les écritures périodiques se font donc en mémoire dans le mini ramdisk que l'on monte sur le file system.

    # Create ramdisk 4MB
    mkfs -q /dev/ram1 4096
    [ ! -d /usr/local/domo/ramdisk ] && mkdir /usr/local/domo/ramdisk
    mount /dev/ram1 /usr/local/domo/ramdisk
    [ ! -d /usr/local/domo/ramdisk/log ] && mkdir /usr/local/domo/ramdisk/log
    [ ! -d /usr/local/domo/ramdisk/run ] && mkdir /usr/local/domo/ramdisk/run

A partir de là, on peut imaginer ce que l'on veut.

Désactiver les logs

S'il y a bien une source importante d'opérations d'écriture, ce sont les LOGs du système. A plus forte raison si vous avez installé un serveur Apache (HTTP).

Vous avez toujours la possibilité d'utiliser un RamDisk mais il convient d'être prudent sur la taille du RamDisk et le transfert des logs.

Log Apache

Apache produit son log dans le fichier /var/log/apache2/access.log

Modifier le fichier de configuration /etc/apache2/sites-available/000-default.conf dans lequel nous allons mettre les log d'accès en commentaire.

...
ErrorLog ${APACHE_LOG_DIR}/error.log
### CustomLog ${APACHE_LOG_DIR}/access.log combined

Log CRON

CRON est utilisé pour lancer des tâches récurrentes. CRON maintient également un log... pas forcement pertinent.

Dans le fichier /etc/default/cron

...
EXTRA_OPTS="-L 0"
...

Ne pas oublier de relancer le deamon cron

 service cron restart

Les syslogs

rsyslog (wikipedia.fr) produit également des logs dont on pourrait se passer.

Modifiez le fichier de configuration /etc/rsyslog.conf

et commentez les 4 dernières lignes

#daemon.*;mail.*;\
#       news.err;\
#       *.=debug;*.=info;\
#       *.=notice;*.=warn       |/dev/xconsole