Rendre la carte SD anti-corruption

11

Mon appareil Linux intégré utilise une carte SD pour enregistrer certaines données de diagnostic, beaucoup trop copieuses pour le flash interne.

Le problème est que si l'appareil est éteint de manière inattendue, le système de fichiers (FAT32) sur la carte est corrompu.

Il n'y a aucun moyen d'empêcher des pannes de courant inattendues ou de l'éteindre comme ça, et l'appareil devrait être relativement sans entretien. Pire encore, les données sont écrites en continu, donc les corruptions sont très fréquentes, et Linux lors de la détection de FS défectueux les remonte en lecture seule en silence.

Quelles méthodes proposeriez-vous pour atténuer cela? L'exécution automatique de fsck.vfat au démarrage suffira-t-elle?

Quelques informations supplémentaires:

  • La carte ne doit pas être considérée comme amovible par l'utilisateur. Cela doit être considéré comme un disque interne. Toutes les données qui y sont stockées seront accessibles pour téléchargement sur le réseau ou sur un lecteur USB, et le système purge automatiquement les entrées les plus anciennes. Cela signifie qu'il n'a pas besoin d'être lisible sur votre PC moyen.
  • Le système prend actuellement en charge FAT, yaffs et jffs2. Ajouter d'autres systèmes de fichiers au noyau est possible mais si d'autres voies existent, nous les préférerions d'abord.
  • L'écriture peut être suspendue à la demande, même pendant plusieurs minutes sans perte de données.
  • une perte de données partielle ou une corruption mineure est acceptable. L'arrêt complet de la journalisation ne l'est pas.
  • les événements de mise hors tension sont complètement imprévisibles la plupart du temps.
  • le système fonctionne sur ARM9, 200 MHz, 64 Mo de RAM, 32 Mo de mémoire flash interne et utilise la majeure partie de la puissance du processeur pour son rôle principal. Tenez-en compte lorsque vous pensez à des solutions sophistiquées gourmandes en ressources.
SF.
la source
3
Vous l'avez probablement déjà envisagé, mais cela vaut la peine d'être mentionné pour d'autres qui se promènent sur cette question: la plupart des cartes flash (SD, CF, etc.) n'ont qu'une tolérance d'écriture de quelques milliers de cycles (au mieux). L'utilisation de cartes normales pour l'enregistrement de données ou des tâches similaires les tuera finalement (et généralement en moins de temps que les gens ne le pensent).
Chris S
@ChrisS: La plupart du temps, il s'agit uniquement de l'ajout et du remplacement des entrées les plus anciennes par les plus récentes. Le problème peut être lié à l'entrée FAT elle-même, mais j'espère que le contrôleur fait quelque chose de raisonnable à ce sujet.
SF.
Quel est le coût si votre appareil est éteint et n'écrit pas ces données sur la carte? Par exemple, si les données de diagnostic ne sont pas écrites, perdrez-vous beaucoup de temps ou d'argent ou tout simplement pas de fichiers journaux?
Freiheit
1
@Freiheit: Il manque une fonctionnalité assez obscure mais pas entièrement négligeable commercialisée pour les clients, et en outre, si quelqu'un d'autre se trompe vraiment et cherche un bouc émissaire, nous perdons l'une des voies de défense devant les tribunaux. La chose est que les données avant une défaillance probable sont les plus précieuses - une preuve que l'appareil a fonctionné correctement jusqu'au dernier moment, et non pas que sa propre faute a fait dégénérer les événements en catastrophe.
SF.
C'est noté. Vous capturez clairement des données pour quelque chose d'important!
Freiheit

Réponses:

8

Vous pouvez utiliser le block2mtdpilote pour utiliser les systèmes de fichiers transactionnels jffs2 ou yaffs (2) que vous semblez utiliser ailleurs pour votre carte SD, ce qui résoudrait votre problème de perte de données ou de corruption du système de fichiers à la mise hors tension.

Cela pourrait toutefois entraîner d'autres problèmes. Comme la carte SD est susceptible d'avoir ses propres mécanismes de nivellement de l'usure et de remappage de secteur en place, ceux-ci pourraient interférer avec les implémentations de jffs2 et de yaffs pour faire de même, réduisant la durée de vie ou les performances de votre carte SD. Si ce n'est pas un problème, cela vaut la peine d'essayer.

le-wabbit
la source
Avec un mois ou deux pour remplir une carte SD de 2 Go, atteindre la limite d'usure même avec un équilibrage de charge entièrement aléatoire ne devrait pas poser de problème.
SF.
5

Vérifiez si le noyau que vous utilisez prend en charge l'indicateur de vidage et / ou de synchronisation pour vfat (il semble que certaines versions l'ignorent, faites attention!).

Ou supprimez tout simplement le système de fichiers si tout peut aller dans un seul fichier (comme ce serait le cas avec un flux de journal brut!) Ou dans quelques fichiers de taille fixe (utilisez des partitions;)

rackandboneman
la source