Detectando corrupção do cartão SD

0

Existe alguma maneira de detectar a corrupção do cartão SD em tempo de execução?

Eu tenho uma situação em que a atualização do firmware é afetada por causa do problema do cartão SD, no entanto, ela será conhecida somente após a falha da atualização. O que eu estou procurando é os testes / quaisquer utilitários que podem ser usados para detectar a corrupção do cartão SD em movimento. Diga, eu corro um cheque todos os dias para ver se o cartão SD está bem ou está corrompido? Se estiver corrompido, posso parar a atualização e recomendar a substituição do cartão SD ou tomar outra ação.

Qualquer entrada é muito apreciada. Conseguir isso sem remover fisicamente o cartão SD será bom.

    
por Ravi 12.09.2018 / 12:58

3 respostas

1

Se você estiver interessado em detectar somente a corrupção, use o utilitário *sum , como sha256sum .

Dentro do diretório a ser protegido, execute o seguinte. Observe o uso de find ... -print0 e xargs -0 para acomodar caminhos com espaços ou outros caracteres especiais.

find . -type f -print0 \
    | xargs -0 sha256sum \
    > manifest.sum

Em seguida, use o seguinte para validar o conteúdo do arquivo.

sha256sum -c manifest.sum

A saída listará os arquivos com OK ou FAILED , e o valor de retorno será 0 (zero) se todos os arquivos tiverem saído ok ou diferente de zero se houver erros.

Este processo validará todos os arquivos no diretório atual e deixará manifest.sum atrasado.

O ideal seria gerar manifest.sum na origem (por exemplo, no momento da criação) e distribuí-lo com os arquivos, executando apenas a verificação ( sha256sum -c ) no dispositivo de destino.

Como você mencionou que isso é para um processo de atualização de firmware, recomendo que procure mais do que apenas verificar os dados quanto à corrupção.

Em muitos casos, é benéfico garantir que a atualização sendo aplicada seja genuína e tenha sido fornecida pela origem pretendida ... Se você permitir que qualquer atualização seja aplicada a um sistema, abra-a para fins acidentais. (e potencialmente prejudiciais) atualizações, bem como atualizações maliciosas.

Para resolver isso, você deve procurar assinar a atualização criptograficamente.

  • Você poderia dar um jeito de assinar apenas o manifest.sum produzido acima (menos sobrecarga de processamento). Ao assinar as somas de verificação, você pode verificar o conteúdo de cada arquivo ... presumindo que o resumo esteja seguro, é claro ... ( MD5 não seria uma boa escolha)
  • No entanto, pode ser melhor distribuir um arquivo que esteja assinado (e possivelmente criptografado) integralmente e verificado antes mesmo de ser extraído.

Como a saída dos utilitários *sum é texto ASCII, você pode usar gpg --clearsign para assinar os dados:

find . -type f -print0 \
    | xargs -0 sha256sum \
    | gpg --clearsign --default-key 7826F053 \
    > manifest.asc

No alvo, você pode verificar a assinatura:

gpg --verify manifest.asc

Em seguida, se, e somente se , a assinatura for válida e de uma origem esperada (você precisará usar --status-fd para verificar isso), poderá prosseguir para verificar o conteúdo do arquivo :

gpg --decrypt manifest.asc \
    | sha256sum -c -

Observe que *sum deve estar no " fim " do pipeline para garantir que você veja o código de retorno ... como alternativa, você pode usar set -o pipefail

Eu mencionei o uso de --status-fd acima ... ficou confuso no shell, então você provavelmente vai querer escrever um aplicativo para lidar com isso de forma mais simples ... Algo como isso irá " funcionar "(ou seja: provar um ponto).

A impressão digital da chave usada para assinar o manifesto é: A5C929D6A230C02067720F1DB2B38B43C2ABEB33 .

gpg --status-fd 3 --verify manifest.asc 3>&1 1>/dev/null \
    | grep -Eq '^\[GNUPG:\] VALIDSIG A5C929D6A230C02067720F1DB2B38B43C2ABEB33 '
    
por 12.09.2018 / 17:34
0
  • Calcule o MD5 dos arquivos e armazene-o no cartão:

    md5sum * >SDCardFiles.md5
    
  • Para verificar use md5um no modo "check" (ele irá recalcular o MD5 dos arquivos no cartão e comparar com o MD5 armazenado no arquivo).

    md5sum -c SDCardFiles.md5
    

Nota: você precisa estar no mesmo diretório quando executar o md5sum inicial e o md5sum -c , já que o caminho para os arquivos é mantido no arquivo .md5 .

    
por 12.09.2018 / 17:16
0

Parte da detecção de corrupção depende (um pouco) de como o cartão SD foi formatado originalmente, mas você pode tentar executar o fdisk nele ou o badblock. Veja Verifique se o micro SD está corrompido :

You should use the command badblocks for this purpose, using the options -n (to specify that the check is carried out in read-write, non-destructive mode) and -v (verbose mode). Make sure that the partitions you want to check are NOT mounted

no prompt de comando, digite: mount e procure a entrada do dispositivo que corresponde ao seu cartão SD. Se estiver listado, você deve primeiro desmontar os sistemas de arquivos:

$ sudo umount /dev/sde1

digite

$ sudo badblocks -n -v /dev/sde

ou

$ sudo fsck /dev/sde1

Note que os badblocks podem demorar muito tempo. Eu tentaria o fsck primeiro

    
por 12.09.2018 / 13:43