Preciso testar a resiliência de algum código de leitura / gravação para algum hardware incorporado. Como posso sacrificar alguns cartões SD e quebrar vários setores conhecidos para um estudo controlado?
A única coisa em que consigo pensar é sobrescrever um único setor alguns milhões de vezes. Gostaria de saber se um script de badblocks do Linux pode ser criado para executar seu teste destrutivo em um único setor repetidamente por várias horas.
sd-card
bad-sectors
bad-blocks
Gabe Krause
fonte
fonte
Respostas:
Uma abordagem alternativa que pode ser útil.
Se o seu código for executado no Linux, talvez você possa testá-lo com um dispositivo lógico "defeituoso".
dmsetup
pode criar dispositivos que retornam erros de E / S. Basta construir seu dispositivo usandoerror
e / ouflakey
alvo. Deman 8 dmsetup
:Nota:
flakey
o uso do destino está documentado aqui . Exemplo básico aqui .Tanto quanto sei, um erro de E / S será relatado imediatamente, portanto, isso é diferente do comportamento real do cartão SD, onde você pode esperar atraso, paralisação etc. No entanto, acho que essa abordagem pode ser útil em alguns casos, pelo menos para executar rapidamente teste preliminar ou algo assim.
fonte
dmsetup
comando para configurar umerror
dispositivo que sempre retorna erros de leitura: stackoverflow.com/questions/1870696/…Esse cara invadiu o microcontrolador dentro dos cartões SD usados para marcar blocos ruins: https://www.bunniestudios.com/blog/?p=3554
Você pode fazer o mesmo e marcar arbitrariamente os blocos como defeituosos.
.
.
.
fonte
Isso normalmente não funciona porque os cartões SD (ou eMMC) mais recentes usam nivelamento de desgaste estático e dinâmico, o que significa que um controlador inteligente interpreta suas instruções de gravação e as mapeia para um dos setores flash menos usados.
A única coisa que você pode fazer é tentar entrar em contato com seus fornecedores e solicitar a folha de dados deles; pode haver algumas maneiras (específicas do fornecedor) de recuperar o estado de seu algoritmo de nível de desgaste. Isso permitiria que você consultasse o estado / uso do flash subjacente. Ou você pode ter azar e isso pode não existir.
Se seu objetivo é realmente destruir o flash, tudo o que você pode fazer é executar ciclos de leitura e gravação em massa e verificar continuamente se os dados que você está lendo ainda são consistentes. Por exemplo, crie dois arquivos grandes, armazene suas somas de verificação e leia / escreva-as para verificar sua soma de verificação. Quanto maior o flash, mais demorará esse processo.
fonte
Você pode aumentar o desgaste do transistor aumentando a temperatura de operação. Use ciclos de gravação e apagamento em um chip aquecido (70-120 ° C); vai se desgastar mais rápido.
fonte
Prefácio: Esta opção requer programação adicional e modificações de hardware, mas permitiria leituras controladas provavelmente mais transparentes para o host.
Um cartão SD possui várias opções de E / S, mas pode ser controlado por SPI. Se você pegar um cartão SD e modificá-lo para poder conectar os pinos a um microcontrolador (como um Arduino), o Arduino imitará o cartão SD e será transparente com o dispositivo que lê o cartão SD. Seu código no microcontrolador pode retornar propositadamente dados incorretos quando necessário. Além disso, você pode colocar um cartão SD no microcontrolador para que as leituras possam passar pelo microcontrolador para o cartão SD para permitir gigabytes de teste.
fonte
Eu iria ao ebay / aliexpress e compraria o cartão SD mais barato que posso encontrar na China, que é "bom demais para ser verdade". Eles geralmente vêm com setores defeituosos ou estão no software definido para ser muito maior do que realmente são. De qualquer forma, você deve acabar com o cartão SD com defeito para usar nos testes.
fonte
Era uma vez, há muitos anos, fui pago para recuperar um conjunto de fotos e vídeos de formatura de um cartão SD para uma mãe bastante perturbada. Após uma inspeção cuidadosa, o cartão havia sido danificado fisicamente por uma rachadura visível na parte externa e apresentava vários setores defeituosos, principalmente vários setores críticos iniciais, o que fazia com que até os programas de recuperação mais confiáveis da época deixassem de ler completamente o cartão. . Além disso, as ferramentas de dados forenses na época custam uma fortuna.
Acabei obtendo um cartão SD de marca / tamanho idêntico e escrevendo meu próprio utilitário de despejo e restauração de dados brutos personalizados para copiar os dados do cartão inválido para o válido. Toda vez que o utilitário atingia um setor defeituoso, tentava várias vezes antes de escrever todos os zeros para esse setor e, em vez de desistir e parar, ignorava a falha e passava para o próximo setor. As tentativas de repetição foram feitas, pois eu também havia notado que alguns setores ainda tinham uma taxa de sucesso de leitura de cerca de 40%. Depois que os dados estavam no novo cartão SD, as ferramentas de recuperação que haviam falhado antes funcionavam perfeitamente com o mínimo de perda / corrupção de dados. No geral, cerca de 98% de todos os arquivos foram recuperados. Vários itens que foram excluídos anteriormente também foram recuperados porque nada é realmente excluído - apenas marcado como tal e lentamente sobrescrito. O que começou como um exercício de recuperação de dados um pouco chato se tornou um dos meus projetos de desenvolvimento de software pessoal mais memoráveis e interessantes. Caso você estivesse se perguntando, a mãe estava emocionada.
De qualquer forma, essa história mostra que é possível danificar fisicamente um cartão SD, de modo que os dados ainda estejam acessíveis, mas que possuem setores que mal funcionam e qualquer coisa que tente ler dele tem dificuldades em fazê-lo. O plástico do cartão SD tende a ser bastante frágil; portanto, dobrar ou cortar alguns baratos pode fazer o truque. Sua milhagem pode variar.
Você também pode perguntar em alguns locais de recuperação de dados em sua área. Como eles se especializam na recuperação de dados de vários dispositivos com falha ou com falha, eles devem ter algumas dicas / sugestões úteis e podem até ter alguns cartões SD pré-eliminados em mãos (por exemplo, para fins de treinamento) que você pode obter deles.
fonte
dd
que ele se comporte de maneira semelhante a isso, atualmente. Eu não tenho certeza.Esta resposta é uma expansão do comentário de @Ruslan
Alternativa possível:
Não tenho certeza se isso funciona para seus propósitos, mas talvez seja realmente suficiente para danificar fisicamente o seu cartão, o que pode ser muito mais rápido.
fonte
Você pode tentar introduzir uma fonte de alimentação instável ou sinalização de tensão mais alta.
Uma falha comum em uma família de dispositivos que conheço tem uma forte correlação entre a corrupção do cartão SD e o contato intermitente da bateria.
fonte
Alguns cartões SD antigos de baixa capacidade (16MB-ish) usam chips flash nos pacotes de estilo TSOP / TSSOP. Um workshop capaz de retrabalhar SMT (se você estiver executando um trabalho incorporado, poderá ter essa habilidade internamente; caso contrário, verifique se há pequenas empresas fazendo reparos por telefone / laptop no nível da placa) poderia separar e reconectar o chip de forma concebível, para que possa ser lido e gravado cru (incluindo os códigos ECC) com um programador de dispositivo.
Ainda assim, esteja ciente de que você testará principalmente:
e no pior dos casos
Se você quiser apenas verificar como ele se comporta com comportamento irregular por qualquer motivo de um cartão SD, provavelmente é melhor apenas introduzir ruído elétrico nas linhas de interface (por exemplo, colocando um comutador de barramento FET no meio e, em momentos aleatórios, alternando momentaneamente para uma fonte de sinais sem sentido (dos níveis elétricos corretos).
fonte
Relacionado à resposta do OlafM, mas diferente: você pode programar um microcontrolador para falar o protocolo do cartão SD e depois imitar o comportamento que você deseja que ele tenha.
fonte
A área do registro de inicialização mestre do FAT32 é provavelmente a mais suscetível a abuso, pois em um nível lógico ela sempre precisa estar no mesmo local. (Talvez isso seja tratado pelo remapeamento suave de setores defeituosos, mas estou um pouco cético de que isso seja implementado em todo o hardware.) Portanto, você pode executar
sfdisk
um loop e ver se consegue destruí-lo dessa maneira.Mas vou implorar para que você faça o possível para melhorar a confiabilidade do hardware, em vez de tentar lidar com hardware ruim no software. O problema é que os cartões SD falham em todos os tipos de maneiras estranhas. Tornam-se ilegíveis, tornam-se graváveis, fornecem dados incorretos, atingem o tempo limite durante as operações, etc. É muito difícil tentar prever todas as maneiras pelas quais um cartão pode falhar.
Aqui está uma das minhas falhas favoritas, "modo de big data":
Os cartões SD são produtos de consumo de commodities que estão sob uma tremenda pressão de custo. As peças mudam rapidamente e as folhas de dados são difíceis de encontrar. Produto falsificado não é inédito. Para armazenamento barato, eles são difíceis de superar, mas enquanto os SSDs priorizam a confiabilidade, a prioridade para cartões SD é velocidade, capacidade e custo (provavelmente não nessa ordem).
Sua primeira linha de defesa é usar uma peça eMMC soldável com uma folha de dados real de um fabricante respeitável, em vez de um cartão SD removível. Sim, eles custam mais por GB, mas a peça ficará em produção por um longo período de tempo e, pelo menos, você sabe o que está recebendo. A soldagem da peça também evita uma série de problemas em potencial (cartões arrancados durante gravações, mau contato elétrico etc.) com um cartão removível.
Se o seu produto precisar de armazenamento removível ou se for tarde demais para mudar alguma coisa, considere gastar o dinheiro extra em cartões de categoria "industrial" ou trate-os como objetos descartáveis. O que fazemos (no Linux) é
fsck
a placa na inicialização e reformata-a se algum erro for relatado, pois a reformatação é aceitável neste caso de uso. Então nósfsck
novamente. Se ele ainda relatar erros após a reformatação, fazemos a RMA e substituímos o hardware por uma variante mais recente que usa o eMMC.Boa sorte!
fonte
Talvez esta não seja a direção que você queria, mas achei que remover o cartão SD enquanto meu rádio ou laptop estava lendo garante um cartão SD travado cerca de 1/5 ou 1/10 vezes. Parece que os cartões não se saem bem ao remover a energia durante uma leitura e, presumivelmente, gravações. Depois de ler os comentários de Robert Calhoun abaixo, isso me leva a acreditar que pode estar prejudicando o FAT. Embora eu não saiba por que apenas a leitura causa uma falha - não deve haver nenhuma escrita em andamento?
fonte
Se o seu cartão SD estiver no formato FAT32, você poderá editar hexadecimalmente as duas gorduras e marcar um setor como ruim com o código hexadecimal correto. Isso é apenas um truque se você deseja testar de forma lógica um software que deve encontrar um setor defeituoso nesse local específico; também não prejudicará seu cartão SD; uma reformatação o trará de volta à condição normal.
fonte
--make-bad-sector
bandeira parece promissora! No entanto, não sei dizer se isso funcionará apenas no sistema linux que executa esse comando inicialmente. Espero que o comando dehdparm --make-bad-sector 20000 /dev/sd#
alguma forma torne o setor 20000 ruim e seja detectado como ruim no meu dispositivo de hardware incorporado que não esteja executando o Linux. Alguma ideia?Em um único setor - não, porque o código de nível de desgaste dentro do cartão SD remapeará os blocos lógicos em todo o lugar.
Mas você pode executar facilmente
badblocks -w
um loop até que alguns blocos defeituosos apareçam. Algo assim deve funcionar:supondo que badblocks retorne 0 se nenhum bloco defeituoso for detectado e ≠ 0 caso contrário (a página de manual não diz e eu não verifiquei o código fonte).
fonte
Normalmente, com os cartões SD / uSD, eles implementam o nivelamento de desgaste, o que pode dificultar bastante. Dependendo do tipo (célula de camada única, multicamadas, TLC, 3D-NAND etc.), o ciclo de gravação necessário para quebrá-lo o suficiente para esgotar o pool de setores pode estar no múltiplo TB.
Na verdade, testei isso com um Pro Duo de 4 GB, 64 GB e 256 GB, SSD e pen drive, os K --- s de 64 GB usando chips de 4 Micron 16 GB duraram cerca de 3,84 TB antes de falhar com um único erro leve na área FAT . O uso de 256 GB durou um pouco menos, mas estimaria sem acesso direto ao chip, provavelmente gravou 5 TB antes de finalmente acabar com a corrupção do MBR, mas não estava claro se o controlador causou o funcionamento sólido do modo USB3, mas o USB2 teve mais falhas durante a leitura e também ficou muito quente. O Duo de 4 GB falhou no leitor ao copiar dados, novamente não pode ter certeza, mas equivale a talvez 6 anos de uso e a câmera também estava mostrando mensagens "Recuperando". Incidentalmente, variar a tensão da fonte de alimentação durante a gravação fará com que ela falhe MUITO mais rápido. Meu microSD de 128 GB falhou após cerca de 2 anos de uso com sintomas semelhantes,
Notas irrelevantes removidas sobre experimentos com raios-X.
fonte