Configurando o Raspberry como um data logger

13

Como o título indica, estou trabalhando em um aplicativo incorporado simples que lê algumas informações da porta serial e as registra em arquivo, além de exibir um pouco de status no monitor.

Agora estou no estágio em que o log parece estar em execução e estou tentando configurar o sistema e tenho algumas perguntas.

  1. O sistema destina-se a registrar dados em um dispositivo USB FAT32, que pode ser desconectado, reconectado ou substituído a qualquer momento. Qual é o método preferido de montagem automática de qualquer armazenamento em massa USB inserido em um diretório fixo? O pacote usbmount parece quase fazer isso, mas a falta de manutenção torna um pouco cauteloso.

  2. Não posso garantir a fonte de alimentação e executar desligamentos limpos. Felizmente, os únicos arquivos a serem gravados, além das informações internas do sistema operacional, devem ser os logs. Um sistema de arquivos diário para o sistema operacional me salvará de mim mesmo ou devo montar o sistema somente leitura ou mexer em discos RAM?

  3. O sistema de arquivos FAT no pendrive sobreviverá e se recuperará de falta de energia e ejeção repentina? Devo criar um novo arquivo de log cada vez que ele é montado?

  4. Configurei o servidor X para iniciar automaticamente e mexi nos scripts de inicialização automática do LXDE para iniciar a exibição do status e desativar o gerenciador de janelas / protetor de tela. Existem outras dicas para manter uma exibição contínua?

  5. O criador de logs não terá acesso à Ethernet e precisa de um relógio preciso. O módulo RasClock é uma opção adequada?

Desculpe pela postagem longa e várias perguntas semi-relacionadas.

Estou acostumado a lidar com dispositivos embarcados simples para os quais tenho controle total sobre o software, e a tarefa de configurar corretamente um sistema operacional real está me deixando um pouco ansioso. Por outro lado, desconfio que não sou o único (ab-) usando o Pi para esse tipo de aplicativo, por isso espero que as perguntas não sejam muito específicas para minha situação específica.

doynax
fonte
Você está descrevendo sua solução serial USB-> em algum lugar para que outros possíveis registradores de dados possam experimentá-lo? Estou ansioso para obter algum valor adicional do meu raspador / registrador / webcam Pi. Obrigado!
Tai Viinikka

Respostas:

7

O sistema destina-se a registrar dados em um dispositivo USB FAT32, que pode ser desconectado, reconectado ou substituído a qualquer momento.

O desconectado parte disso é problemática. AFAIK, nenhum sistema de computador em qualquer lugar promete a você o direito de puxar um pendrive sem aviso prévio a qualquer momento, sem problemas em potencial. Então você terá que pensar em como contornar isso.

Não posso garantir a fonte de alimentação e executar desligamentos limpos.

Mais uma vez, cortar repentinamente a energia (praticamente) de qualquer sistema de computador é arriscado. Ele geralmente acaba tudo bem (que não tenha feito isso um monte de vezes, por acidente, devido à falta de energia, etc?), Mas parece haver uma quantidade incomum de pessoas relatando a corrupção cartão SD com a pi. Portanto, se você quer dizer "Principalmente o sistema não será desligado corretamente", é necessário repensar, porque essa será uma estratégia sem saída. Observe que é possível acionar um desligamento sem um teclado ou conexão de rede. Você também pode usar um método semelhante para desencadear uma desmontagem limpa do pendrive.

Você pode adicionar a syncopção /etc/fstabpara restringir o cache, mas man mountobserve:

No caso de mídia com número limitado de ciclos de gravação (por exemplo, algumas unidades flash), a "sincronização" pode causar encurtamento do ciclo de vida.

Isso inclui cartões SD, embora, desde que você se lembre de testar intermitentemente (e substituir, quando apropriado) sua mídia, possa valer a pena. Isso impactará um pouco o desempenho geral, eu acho.

Portanto, tente evitar puxar o plugue ou o pendrive da melhor forma possível e certamente não crie uma configuração que dependa disso. Por exemplo, não diga a si mesmo ou a outros usuários: "Não há problema em desconectar o pen drive quando quiser", porque não está e você não pode fazê-lo.

Fazer syncchamadas apropriadas em seu aplicativo (por exemplo, quando ocioso ou após uma gravação significativa) é uma boa idéia.

Depois de ter tudo que você quer instalado e configurado , você pode potencialmente montar o sistema de arquivos raiz só de leitura, se você criar partições separadas para /var, /rune/tmp e montar os rw; você também pode criar uma partição montada e vincular os diretórios rw a ela.

Em um pi raspbian, você não precisa se preocupar /run, pois já é tmpfs (RAM); /syse /proctambém estão na RAM (mas não os use para nada, exceto para o que eles se destinam). Se o sistema é para uma única finalidade e todos os seus dados vão para o pendrive, esse /varé o único problema, mas acho que não.

Cachinhos Dourados
fonte
Nosso principal problema é que a energia pode ser cortada a qualquer momento durante uma parada de emergência, algo que suspeito ser uma ocorrência frequente durante o teste (daí a necessidade de um registrador). Vou verificar se podemos usar uma bateria de reserva para o Pi, e talvez conectar algum tipo de sensor para detectar perda de energia. No entanto, minha vida seria muito mais fácil se o sistema de arquivos raiz pudesse ser montado no modo somente leitura e a memória USB protegida por descargas periódicas e similares.
doynax
@doynax: É possível executar o RO com o sistema de arquivos raiz. Não tenho experiência com isso, mas adicionei alguns parágrafos no final sobre o que acredito serem as preocupações básicas.
goldilocks
2

Em uma vida anterior, trabalhei em drivers de dispositivos que liam / escreviam cartões de memória. Eles poderiam ser puxados no meio de qualquer operação, para que nem a energia da bateria ou do capacitor fizesse backup. Com base nas especificações de formatação dos chips, deduzi o comportamento necessário para que o dano mínimo fosse causado pela remoção e inserção "quentes".

Basicamente, o que você precisa fazer é garantir que, se você for cortado no meio da gravação de um bloco de dados (ou se os contatos forem escassos), possa reconhecer o fato. basicamente adicione os dados com um número de bloco (e tamanho, se não for tamanho fixo), e adicione um número de bloco crc e (o mesmo) no final.

A primeira gravação que você faz é no final, com um valor que NÃO é o próximo número de bloco. Dessa forma, se sua gravação não for concluída, haverá uma incompatibilidade de número de bloco e esse bloco de dados será conhecido como lixo. Em seguida, escreva seu bloco de dados com o número do bloco real, seguido pelo comprimento, seguido pelo seu CRC gerado pelo seu algoritmo favorito e o número do bloco real novamente. (O CRC é para proteger contra contatos estranhos que corrompem seus dados).

Quando a energia for restaurada ou o cartão de memória for inserido novamente, aceite apenas blocos sequenciais até o ponto em que os números de seqüência de início e término do bloco não coincidam ou o CRC está incorreto. Remova esse bloco e retome o log.

Isso é coisa de baixo nível. Fazer isso através de um sistema de arquivos é outra história.

O que você realmente precisa é de cópias redundantes do seu FAT e faça uma coisa semelhante em torno da mesa do FAT. O número seqüencial indicará qual é a mais recente e a correspondência frente / verso e o CRC garantirão a integridade.

Já passou da minha hora de dormir, então espero que isso esteja claro o suficiente.

Rufus V. Smith
fonte
1

Quanto ao relógio preciso, existem muitos módulos GPS baratos disponíveis. Difícil de encontrar um relógio mais preciso do que isso.

Matt
fonte
Essa é uma excelente sugestão. Poupe o trabalho de acertar o relógio e lidar com a bateria. Só precisamos acompanhar o fuso horário (e as regras de horário de verão, suponho), e para um data logger puro o tempo universal deve ser bom.
doynax
Um módulo GPS funciona em ambientes internos quando nenhuma parte do céu está visível e ainda oferece um benefício em relação a um RTC simples?
Stéphane Gourichon 04/04