Tornando o cartão SD à prova de corrupção


11

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.

3
Você provavelmente já pensou nisso, mas vale a pena mencionar para outras pessoas que vagam por essa questão: a maioria dos cartões de memória flash (SD, CF, etc) tem apenas uma tolerância de gravação de alguns milhares de ciclos (na melhor das hipóteses). O uso de cartões normais para registro de dados ou tarefas semelhantes acabará com eles (e geralmente em menos tempo do que as pessoas pensam).
— Chris S

@ Chris: Isso geralmente é apenas de acréscimo e substitui as entradas mais antigas pelas mais recentes, tem uma natureza inerente ao muito bom balanceamento de carga de gravações, principalmente porque leva meses para preencher o cartão. O problema pode estar na própria entrada FAT, mas confio que o controlador faça algo sensato a respeito.
— SF.

Qual é o custo se o seu dispositivo estiver desligado e não gravar esses dados no cartão? Por exemplo, se os dados de diagnóstico não forem gravados, você perderá muito tempo ou dinheiro ou simplesmente não terá alguns arquivos de log?
— Freiheit 11/01

1
@ Freiheit: Está faltando um recurso bastante obscuro, embora não totalmente sem importância, comercializado para os clientes e, além disso, caso alguém estrague muito e procure bode expiatório, perdemos uma das vias de defesa em tribunal. Os dados anteriores à provável falha são os mais valiosos - uma prova de que o dispositivo funcionou corretamente até o último momento, e não de que sua própria falha tenha feito com que os eventos se transformassem em desastre.
— SF.

Notado. Você está claramente capturando dados para algo importante!
— Freiheit

Respostas:


8

Você pode usar o block2mtddriver 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.


Com um mês ou dois para preencher um cartão SD de 2 GB, atingir o limite de desgaste mesmo com o balanceamento de carga inteiramente aleatório, isso não deve ser um problema.
— SF.

5

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;)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.