Quero instalar um Pi no meu carro e usá-lo para gravar dados de GPS. Quais estratégias (no meu programa) posso seguir para minimizar os problemas devido à interrupção de energia ao gravar no cartão SD?
Até agora, posso pensar em:
- Armazenando dados e gravando apenas de forma intermitente
- Escrever apenas quando a velocidade do veículo não estiver próxima de zero (ou seja, prestes a desligar a ignição)
- Escreva em um arquivo temporário que eu posso ter corrompido e persista que de vez em quando
Eu estou querendo saber se existem
- Modos do sistema de arquivos em que posso permanecer na maior parte do tempo que sobreviveria a um desligamento repentino
- Maneiras de reduzir a recuperação ao desligar enquanto escreve mais confiável
Obviamente (eu acho) alguma perda de dados é inevitável, mas como eu poderia minimizá-la?
fonte
Tudo depende da quantidade de dados que você está preparado para perder. Se você não puder perder nada, será necessário encontrar uma maneira de conectar seu PI diretamente à bateria (com um fusível, é claro), para que ele não seja desligado quando a ignição for desligada.
Por outro lado, uma bateria de carro típica teria cerca de 80 Ah e o PI consumirá entre 500-1200 mA (dependendo do modelo A ou B), de modo que provavelmente irá esgotar a bateria do carro entre 2 e 6 dias, então eu não acho que você ache isso aceitável.
Se você ainda não puder perder dados, poderá projetar algum tipo de hardware personalizado, onde poderá controlar a fonte de alimentação do PI e também monitorar o estado da ignição. Se a ignição estiver desligada, você envia os dados para o cartão SD, encerra o SO e, na última etapa, desliga a fonte de alimentação. A fonte de alimentação também precisa ser ligada quando a ignição é ligada, para permitir que o PI inicie novamente. Tudo isso é possível, mas um projeto bastante grande.
No entanto, se você achar aceitável perder alguns dados no desligamento, eu projetaria o daemon que salva os dados do GPS periodicamente em um arquivo, de forma que ele execute uma chamada fsync após cada gravação (para liberar os dados para o SD- cartão). Se você fizer isso a cada poucos segundos (e também estiver usando o sistema de arquivos ext4 de registro em diário padrão), isso provavelmente significa que você perderá apenas os últimos segundos em cada perda de energia.
Lembre-se de que o Raspbian (pelo menos minha instalação) não veio com um fsck do sistema de arquivos raiz no momento da inicialização. Você deve fazer o seguinte para habilitá-lo em todas as montagens:
Você também precisa alterar a última linha do sistema de arquivos raiz em / etc / fstab para conter 1, assim:
Se você não fizer isso, seu sistema de arquivos raiz poderá não ser inicializável de tempos em tempos; portanto, se você estiver executando um sistema sem cabeça em que desligue a energia sem fazer um desligamento controlado, isso é absolutamente necessário.
fonte
Isso parece uma boa adição que higieniza os componentes elétricos do carro, e identifica a perda de ignição do carro, fornece energia ao pi enquanto isso e envia um sinal ao pino do GPIO para dizer para desligar o pi com segurança .
Infelizmente, neste momento, parece estar esgotado, mas você pode fazer a pré-encomenda.
fonte
Se você precisar lidar com a perda de energia com frequência, a escolha cuidadosa do sistema de arquivos e dos métodos de inicialização (somente leitura, diário, fsck autônomo, recuperação rápida ..) pode ajudar a garantir que o sistema funcione de maneira confiável.
No lado do aplicativo, usando certos bancos de dados ( sqlite ?) Deve garantir um status inteiro de gravação ou nenhuma gravação nos dados quando reaberto.
Melhor de fato tentar evitar desligar, exceto quando necessário. Com um controlador menor, você costuma assistir à fonte de alimentação e, se ela cair, você tem uma pequena janela para desligar as coisas, salvar quaisquer dados não voláteis e possivelmente dormir ou parar o processador até que a energia seja restaurada. Com um grande processador de uso geral como o PI, isso pode exigir uma lacuna bastante longa.
Portanto, ter uma reserva de energia on-line e um aviso quando a fonte principal ficar inativa pode ajudar. Se estiver com problemas, talvez seja necessário diferenciar entre perda temporária de energia (não escreva, prenda a respiração) e provável desligamento (salve e limpe).
Em um carro, você terá +12/24 V e o PI usa +5 V, portanto, existe potencial (heh) para algo dentro ou antes do conversor. Você poderá diodo OU outra bateria de 9 a 12 V de tamanho razoável antes do conversor que assumirá o controle quando a tensão cair, por exemplo. Considerando o consumo de energia relativamente pesado, isso precisará ser mantido carregado de alguma forma. Você também pode montar um comparador ou um monitor de tensão especial para a linha de energia principal e ser alertado quando a energia principal estiver inativa. (Não sei de antemão qual seria a maneira mais rápida de sinalizar um PI.)
fonte