Meu dispositivo linux incorporado usa um cartão SD para salvar certos dados de diagnóstico, copiosos demais para o flash interno.
O problema é que, se o dispositivo for desligado inesperadamente, o sistema de arquivos (FAT32) no cartão está corrompido.
Não há como evitar falhas de energia inesperadas ou desligá-lo pelo usuário dessa maneira, e o dispositivo deve ser relativamente livre de manutenção. Pior ainda, os dados são gravados continuamente, de modo que as corrupções são muito frequentes, e o Linux, ao detectar FS defeituoso, o remonta apenas para leitura silenciosamente.
Quais métodos você sugeriria para mitigar isso? A execução do fsck.vfat automaticamente na inicialização é suficiente?
Mais algumas informações:
- O cartão não deve ser considerado removível pelo usuário. É para ser pensado como disco interno. Quaisquer dados armazenados nele estarão acessíveis para download na rede ou em uma unidade USB, e o sistema limpa automaticamente as entradas mais antigas. Isso significa que não precisa ser legível no seu PC comum.
- O sistema atualmente suporta FAT, yaffs e jffs2. É possível adicionar outros sistemas de arquivos ao kernel, mas se existirem outros caminhos, preferimos primeiro.
- A gravação pode ser suspensa sob demanda, mesmo por vários minutos, sem perda de dados.
- perda parcial de dados ou corrupção menor é aceitável. A parada completa do log não é.
- os eventos de desligamento são completamente imprevisíveis na maioria das vezes.
- o sistema está sendo executado em ARM9, 200MHZ, 64MB de RAM, 32MB de flash interno e consome a maior parte da energia da CPU em sua função principal. Leve isso em consideração ao pensar em soluções sofisticadas e pesadas em recursos.
Respostas:
Você pode usar o
block2mtd
driver para usar os sistemas de arquivos transacionais jffs2 ou yaffs (2) que você parece estar empregando em outro local para o seu cartão SD, o que resolveria seu problema de perda de dados ou corrupção do sistema de arquivos no desligamento.Isso pode causar outros problemas, no entanto. Como é provável que o cartão SD possua mecanismos próprios para nivelar o desgaste e remapear o setor, eles podem interferir nas implementações dos jffs2 e yaffs para fazer o mesmo, diminuindo a vida útil ou o desempenho do seu cartão SD. Se isso não for um problema, vale a pena tentar.
fonte
Verifique se o kernel que você usa suporta sinalizador de liberação e / ou sincronização para vfat (parece que algumas versões o ignoram, tenha cuidado!).
Ou simplesmente elimine completamente o sistema de arquivos se tudo puder entrar em um arquivo (como seria o caso de um fluxo de log bruto!) Ou em alguns arquivos de tamanho fixo (use partições;)
fonte