Stress (write) Teste um cartão SD para destruição usando um simples shell script

1

Gostaria de saber quantos ciclos de gravação posso obter do meu SD cartão.

Eu pesquisei e encontrei boas respostas como isso , mas muito complicado para uma pessoa normal como eu.

Diga que é um cartão formatado exfat de 64 GB.

Não é possível simplesmente escrever um grande arquivo aleatório de 59GB para ele? Delete isso. Faça uma contagem. E repita todo o ciclo, até que o cartão falhe (estou assumindo que algo irá finalmente impedir uma operação de gravação).

  1. Eu acho que um arquivo aleatório de 59GB pode ser criado assim:

    dd if=/dev/urandom of=/dev/sdd1/file.txt bs=61865984 count=1024
    
  2. Exclua o arquivo:

    rm /dev/sdd1/file.txt
    
  3. Não sei como fazer a operação de contagem ou fazer o loop ou se colocá-lo em um arquivo .sh possui outras sintaxes / restrições. Você poderia por favor me ajudar com isso?

A minha ideia acima é ok (aceitável)? Eu não estou tentando ser perfeito.

Existe também algum software / script pronto que faz isso?

(Eu entendo que vou precisar deixar o PC ligado por vários meses, mas eu estou bem com isso. Ou talvez quando eu executar o script após uma reinicialização, ele só irá adicionar à contagem anterior.)

Obrigado. : -).

PS: Por que estou fazendo isso - eu acho que existem cartões microsd de grande capacidade disponíveis a partir de marcas de nomes oem / não, que são muito baratos em comparação com os bons cartões de marca. As pessoas dizem que esses cartões não são confiáveis. Eu só queria ver o quão ruim eles realmente eram. Praticamente o que eu pensava era - em 5 anos eu poderia escrever um total de 1TB para um cartão. Isso é apenas 17 ciclos! O que eu acho que até o pior cartão pode ser capaz de fazer. : -) ............

    
por music 14.11.2015 / 22:22

2 respostas

0

Acho que sua ideia pode funcionar.

Você pode gravar os dados diretamente no nó do dispositivo da unidade (por exemplo, /dev/sdd ). O comando rm não é possível ou necessário (na verdade, ele não remove muitos dados, rm apenas atualiza os metadados no sistema de arquivos. Você pode considerar escrever todos em um ciclo, seguido por todos os zeros no próximo ciclo.

O truque é fazer um contador persistente que você possa pegar após as reinicializações. Isso pode ser feito facilmente com um arquivo, no exemplo, o COUNT_FILE é "$ HOME / .counter". A contagem pode ser menor que a real porque o sistema pode ter sido reinicializado ou etc antes que o dd seja concluído.

Você também pode chamar algo assim em /etc/rc.local para iniciá-lo automaticamente quando o sistema for inicializado.

#!/bin/ss

COUNT_FILE="$HOME/.counter"

read COUNT < "$COUNT_FILE"

if echo "$COUNT" | grep '[^0-9]' > /dev/null
then
    echo >&2 "$0: ERROR: non-integer counter found in $COUNT_FILE."
    exit 1
fi

while true
do
    echo dd if=/dev/urandom of=/dev/sdd bs=61865984
    COUNT=$(( COUNT + 1 ))
    echo $(( COUNT )) > "$COUNT_FILE"
done

Você também pode investigar o comando badblocks , que grava padrões no disco e os lê de volta. O bom de usar badblocks é que ele grava, lê e compara cada byte em cada ciclo, portanto, você deve começar a ver mais e mais badblock números quando o disco começar a falhar.

Além disso, se você acidentalmente pegar uma unidade USB diferente conectada como /dev/sdd , você a destruirá completamente quando este script for executado.

    
por 15.11.2015 / 02:13
2

Quando você recebe uma resposta, esse cartão SD em particular está morto. Isto pode dar-lhe alguma indicação da longevidade de outros cartões com a mesma marca e modelo (ou pode não ... os cartões individuais variam e, pior, o hardware subjacente pode mudar sem o número do modelo a ser alterado - os fabricantes fazem coisas más como isso o tempo todo).

Minha sugestão é não me importar. Compre um cartão SD reserva e faça backups regulares de todos os dados importantes no cartão.

    
por 14.11.2015 / 22:30