Je souhaite installer un Pi dans ma voiture et l'utiliser pour enregistrer des données GPS. Quelles stratégies (dans mon programme) puis-je suivre pour minimiser les problèmes dus à une coupure de courant lors de l'écriture sur la carte SD?
Jusqu'à présent, je peux penser à:
- Stockage des données et écriture uniquement par intermittence
- Écriture uniquement lorsque la vitesse du véhicule n'est pas proche de zéro (c'est-à-dire sur le point de couper le contact)
- Écrire dans un fichier temporaire que je peux me permettre d'avoir corrompu, puis persister de temps en temps
Je me demande s'il y a
- Modes de système de fichiers dans lesquels je peux rester la plupart du temps qui survivrait à un arrêt soudain
- Façons de rendre la récupération après une mise hors tension tout en écrivant plus fiable
De toute évidence (je pense) certaines pertes de données sont inévitables, mais comment pourrais-je les minimiser?
la source
Tout dépend de la quantité de données que vous êtes prêt à perdre. Si vous ne pouvez pas vous permettre de perdre quoi que ce soit, il vous faudra trouver un moyen de connecter votre PI directement à la batterie (avec un fusible bien sûr), afin qu'il ne s'éteigne pas lorsque le contact est coupé.
Là encore, une batterie de voiture typique aurait environ 80 Ah et le PI consommera entre 500-1200 mA (selon qu'il s'agit d'un modèle A ou B), ce qui épuisera probablement la batterie de votre voiture entre 2 et 6 jours, donc je ne pense pas que vous trouverez cela acceptable.
Si vous ne pouvez toujours pas vous permettre de perdre des données, vous pourrez peut-être concevoir une sorte de matériel personnalisé où vous pouvez contrôler l'alimentation électrique du PI et également surveiller l'état de l'allumage. Si le contact est coupé, vous videz vos données sur la carte SD, arrêtez le système d'exploitation puis, comme dernière étape, coupez l'alimentation. L'alimentation doit également être activée lorsque le contact est mis, pour laisser le PI redémarrer. Tout cela est faisable, mais c'est un projet assez important.
Cependant, si vous trouvez acceptable de perdre des données à l'arrêt, je concevoir le démon qui enregistre périodiquement les données GPS dans un fichier de telle sorte qu'il exécute un appel fsync après chaque écriture (pour vider les données sur le SD- carte). Si vous effectuez cette opération toutes les quelques secondes (et que vous utilisez également le système de fichiers ext4 de journalisation par défaut), cela signifie probablement que vous ne perdrez que les dernières secondes à chaque coupure de courant.
Veuillez garder à l'esprit que Raspbian (au moins mon installation) n'était pas fourni avec un fsck du système de fichiers racine au démarrage. Vous devez procéder comme suit pour l'activer à chaque montage:
Vous devez également modifier la dernière ligne du système de fichiers racine dans / etc / fstab pour qu'elle contienne un 1, comme ceci:
Si vous ne le faites pas, votre système de fichiers racine peut ne pas être amorçable de temps en temps, donc si vous exécutez un système sans tête où vous coupez l'alimentation sans effectuer un arrêt contrôlé, cela est absolument nécessaire.
la source
Cela ressemble à un bon ajout qui désinfectera bien les composants électriques de la voiture pour le pi, et gérera la détection de la perte d'allumage de la voiture, alimentera le pi en attendant et enverra un signal à la broche GPIO pour lui dire d'arrêter le pi en toute sécurité .
Il semble malheureusement être en rupture de stock pour le moment, mais vous pouvez pré-commander.
la source
Si vous devez souvent faire face à une perte de puissance, un choix judicieux du système de fichiers et des méthodes de démarrage (lecture seule, journal, fsck sans assistance, récupération rapide ..) peut vous aider à vous assurer que le système fonctionne correctement.
Côté application, l'utilisation de certaines bases de données ( sqlite ?) Devrait garantir une écriture entière ou aucun statut d'écriture sur les données lors de leur réouverture.
Mieux serait en effet d'essayer d'éviter d'avoir à fermer sauf en cas de besoin. Avec un contrôleur plus petit, vous regardez souvent l'alimentation et si elle tombe en panne, vous avez une petite fenêtre pour arrêter les choses, enregistrer toutes les données non volatiles et éventuellement mettre en veille ou arrêter le processeur jusqu'à ce que l'alimentation soit rétablie. Avec un gros processeur à usage général comme le PI, cela pourrait nécessiter un espace assez long.
Donc, avoir une réserve de marche en ligne et un avertissement lorsque l'alimentation principale tombe en panne peut aider. S'il est glitch, vous devrez peut-être faire la différence entre une perte de puissance temporaire (n'écrivez pas, retenez votre souffle) et un arrêt probable (enregistrer et nettoyer).
Dans une voiture, vous aurez +12/24 V et PI utilise +5 V, il y a donc un potentiel (heh) pour quelque chose dans ou avant le convertisseur. Vous pourriez être en mesure de diode-OU une autre batterie 9-12 V de taille raisonnable avant le convertisseur qui prendra le relais lorsque la tension chute, par exemple. Compte tenu de la consommation d'énergie relativement élevée, cela devra être maintenu en quelque sorte. Vous pouvez également installer un comparateur ou un moniteur de tension spécial pour la ligne d'alimentation principale et être alerté lorsque l'alimentation principale est coupée. (Je ne sais pas par avance quel serait un moyen rapide de signaler un PI.)
la source