Configuration du Raspberry comme enregistreur de données

13

Comme le titre l'indique, je travaille sur une simple application intégrée qui lit certaines informations du port série et les enregistre dans un fichier, en plus d'afficher un peu d'état à l'écran.

J'en suis maintenant au stade où la journalisation semble être en cours d'exécution et j'essaie de configurer le système et j'ai quelques questions.

  1. Le système est destiné à enregistrer les données sur une clé USB FAT32, qui peut être débranchée, rebranchée ou remplacée à tout moment. Quelle est la méthode préférée de montage automatique de tout stockage de masse USB inséré dans un répertoire fixe? Le package usbmount semble presque le faire, mais le manque de maintenance rend le bit méfiant.

  2. Je ne peux pas garantir l'alimentation électrique et effectuer des arrêts propres. Heureusement, les seuls fichiers à écrire, à part les informations internes du système d'exploitation, devraient être les journaux. Un système de fichiers de journalisation pour le système d'exploitation me sauvera-t-il de moi-même ou devrais-je monter le système en lecture seule ou bricoler avec des disques RAM?

  3. Le système de fichiers FAT sur la clé USB survivra-t-il et se remettra-t-il des coupures de courant et des éjections soudaines? Dois-je créer un nouveau fichier journal à chaque fois qu'il est monté?

  4. J'ai configuré le serveur X pour démarrer automatiquement et j'ai manipulé les scripts de démarrage automatique de LXDE pour démarrer l'affichage de l'état et désactiver le gestionnaire de fenêtres / économiseur d'écran. Existe-t-il d'autres problèmes pour maintenir un affichage continu?

  5. L'enregistreur n'aura pas d'accès Ethernet et aura plutôt besoin d'une horloge précise. Le module RasClock est-il une option appropriée?

Désolé pour le long post et les multiples questions semi-liées.

J'ai l'habitude de gérer de simples appareils embarqués pour lesquels j'ai un contrôle total sur le logiciel, et la tâche de configurer correctement un vrai système d'exploitation me rend un peu anxieux. D'un autre côté, je soupçonne plutôt que je ne suis pas le seul (ab-) à utiliser le Pi pour ce type d'application, donc j'espère que les questions ne sont pas trop spécifiques à ma situation particulière.

doynax
la source
Décrivez-vous quelque part votre solution USB-> série fonctionnelle pour que d'autres enregistreurs de données potentiels puissent l'essayer? Je suis impatient de tirer un avantage supplémentaire de mon grattoir / enregistreur / webcam Pi. Merci!
Tai Viinikka

Réponses:

7

Le système est destiné à enregistrer les données sur une clé USB FAT32, qui peut être débranchée, rebranchée ou remplacée à tout moment.

La partie débranchée de cela est problématique. AFAIK, aucun système informatique ne vous promet le droit d'extraire une clé USB à tout moment et sans préavis, sans problèmes potentiels. Vous devrez donc réfléchir à la manière de contourner cela.

Je ne peux pas garantir l'alimentation électrique et effectuer des arrêts propres.

Encore une fois, couper soudainement l'alimentation (à peu près) de tout système informatique est risqué. Cela finit généralement bien (qui ne l'a pas fait plusieurs fois, par accident, en raison d'une panne de courant, etc.?), Mais il semble y avoir un nombre inhabituel de personnes signalant une corruption de la carte SD avec le pi. Donc, si vous voulez dire: «La plupart du temps, le système ne sera pas arrêté proprement», vous devez repenser, car ce sera une stratégie sans issue. Notez qu'il est possible de déclencher un arrêt sans clavier ni connexion réseau. Vous pouvez également utiliser une méthode similaire pour déclencher un démontage propre de la clé USB.

Vous pouvez ajouter l' syncoption /etc/fstabpour restreindre la mise en cache, mais man mountremarque:

Dans le cas de supports avec un nombre limité de cycles d'écriture (par exemple certains lecteurs flash), la "synchronisation" peut entraîner un raccourcissement du cycle de vie.

Cela inclut les cartes SD, même si vous vous souvenez de tester par intermittence (et de remplacer, le cas échéant) vos supports, cela peut valoir la peine. Je pense que cela affectera légèrement les performances générales.

Donc, essayez d'éviter de tirer du mieux possible la fiche ou la clé USB, et ne concevez certainement pas une configuration qui dépend de cela. Par exemple, ne vous dites pas à vous-même ni aux autres utilisateurs, "Il est normal de débrancher la clé USB quand vous le souhaitez", car ce n'est pas le cas et vous ne pouvez pas le faire.

Faire des syncappels appropriés dans votre application (par exemple, en cas d'inactivité ou après une écriture importante) est une bonne idée.

Une fois que vous avez tout ce que vous voulez installé et configuré , vous pouvez potentiellement monter le système de fichiers racine en lecture seule, si vous créez des partitions distinctes pour /var, /runet /tmpet monter les rw; vous pouvez également créer une telle partition montée et créer un lien symbolique vers les répertoires rw.

Sur un raspbian pi, vous n'avez pas à vous inquiéter /run, car il s'agit déjà de tmpfs (RAM); /syset /procsont également en RAM (mais ne les utilisez pour rien sauf ce à quoi ils sont destinés). Si le système est à usage unique et que toutes vos données sont stockées sur la clé USB, /varc'est la seule problématique mais pas, je pense, de manière critique.

Boucles d'or
la source
Notre principal problème est que le courant peut être coupé à tout moment lors d'un arrêt d'urgence, ce que je soupçonne sera un phénomène fréquent pendant les tests (d'où la nécessité d'un enregistreur pour commencer). Je vais vérifier que nous pourrions virer de bord sur une batterie de secours pour le Pi, et peut-être câbler une sorte de capteur pour détecter une perte de puissance. Cependant, ma vie serait beaucoup plus facile si le système de fichiers racine pouvait être monté en mode lecture seule et la mémoire USB protégée par des vidages périodiques et autres.
doynax
@doynax: Il est possible d'exécuter le avec le système de fichiers racine RO. Je n'ai aucune expérience à ce sujet, mais j'ai ajouté quelques paragraphes à la fin sur ce que je pense être les principales préoccupations.
goldilocks
2

Dans une vie antérieure, je travaillais sur des pilotes de périphériques qui lisaient / écrivaient des cartes mémoire. Ils pourraient être tirés au milieu de n'importe quelle opération, donc même une alimentation de secours par batterie ou condensateur n'aiderait pas. Sur la base des spécifications de formatage des puces, j'ai déduit le comportement requis pour que le minimum de dommages soit causé par le retrait et l'insertion "à chaud".

Fondamentalement, ce que vous devez faire est de vous assurer que si vous êtes interrompu à mi-écriture d'un bloc de données (ou que les contacts sont calmes), vous pouvez reconnaître le fait. ajoutez essentiellement les données avec un numéro de bloc (et une longueur si ce n'est pas une taille fixe), et ajoutez un crc et (le même) numéro de bloc à la fin.

La première écriture que vous faites est à la fin, avec une valeur qui n'est PAS le numéro de bloc suivant. De cette façon, si votre écriture ne se termine pas, il y aura une non-concordance du numéro de bloc et ce bloc de données est connu pour être des ordures. Ensuite, écrivez votre bloc de données avec le numéro de bloc réel, suivi de la longueur, suivi de votre CRC généré par votre algorithme préféré, et le nouveau numéro de bloc réel. (Le CRC est destiné à vous protéger contre les contacts erratiques qui corrompent vos données).

Lorsque l'alimentation est rétablie ou la carte mémoire réinsérée, acceptez uniquement les blocs séquentiels au point où les numéros de séquence de début et de fin de bloc ne correspondent pas ou le CRC est incorrect. Supprimez ce bloc et reprenez la journalisation.

Ce sont des trucs de bas niveau cependant. Le faire via un système de fichiers est une autre histoire.

Ce dont vous avez vraiment besoin, c'est de copies redondantes de votre FAT, et faites la même chose autour de la table FAT. Le numéro séquentiel vous dira lequel est le plus récent, et la correspondance avant / arrière et CRC garantira l'intégrité.

Il est passé mon coucher, j'espère donc que c'est assez clair.

Rufus V. Smith
la source
1

Quant à l'horloge précise, il existe de nombreux modules GPS bon marché. Difficile de trouver une horloge plus précise que cela.

Mat
la source
Voilà une excellente suggestion. Épargnez-nous la peine de régler l'horloge et de gérer la batterie. Nous aurons juste besoin de garder une trace du fuseau horaire (et des règles DST je suppose), et pour un pur enregistreur de données, le temps universel devrait être bien.
doynax
Un module GPS fonctionne-t-il à l'intérieur lorsqu'aucune partie du ciel n'est visible et offre toujours un avantage sur un simple RTC?
Stéphane Gourichon