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.
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.
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?
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é?
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?
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.
la source
Réponses:
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.
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'
sync
option/etc/fstab
pour restreindre la mise en cache, maisman mount
remarque: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
sync
appels 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
,/run
et/tmp
et 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);/sys
et/proc
sont é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,/var
c'est la seule problématique mais pas, je pense, de manière critique.la source
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.
la source
Quant à l'horloge précise, il existe de nombreux modules GPS bon marché. Difficile de trouver une horloge plus précise que cela.
la source