Tudo sobre a saúde do cartão SD / cartão microSD no Raspberry Pi
O cartão SD é - ao lado da fonte de alimentação - um componente adicional crítico do Raspberry Pi. Monitorar a sua saúde é realmente importante para garantir um bom funcionamento do seu sistema operacional Raspberry Pi, e uma boa experiência para o usuário. Este artigo irá mostrar-lhe várias formas de verificar e monitorizar a saúde do seu cartão microSD.
Primeiro, vou dar uma visão aprofundada de como funcionam os cartões de memória, para que você possa entender as possibilidades e limitações de verificar o estado de saúde do seu cartão SD. Depois vou explicar como proteger o seu cartão microSD, reduzindo os problemas comuns dos usuários do Raspberry Pi. Vamos também entrar nas melhores marcas de cartões microSD para Raspberry Pi que recomendamos. Se quiser, também pode saltar mais abaixo, para obter apenas os comandos do Linux para verificar o estado actual da placa microSD.Noções básicas: Dentro do cartão microSD

O cartão microSD contém um chip de memória flash (à esquerda da imagem), e um micro-controlador (à direita da imagem, geralmente baseado em ARM).
Flash
A memória flash armazena informações por "armadilhagem" de elétronsque são "injectados" através de uma alta tensão através de um não condutor, num portão flutuante(**). Os electrões fazem assim parte de um transístor que pode ou não permitir o fluxo de uma corrente ligada, dependendo da carga da porta flutuante. Teoricamente, não podem fluir para longe, porque a porta flutuante está isolada electricamente. Isto significa que a informação é retida mesmo após o fornecimento de corrente ser desligado.
A informação é sempre lida entre a fonte (S) e o dreno (D). Os electrões introduzidos na porta flutuante aumentam, por exemplo, a tensão limite do transístor, a partir da qual a corrente fluiria. O transistor então bloqueia a uma tensão de leitura normal (não conduz).
Para a programação da porta flutuante são utilizadas tensões eléctricas significativamente mais elevadas (p.ex. 10 V) do que para a operação de leitura normal (p.ex. 3,3 V). Para este efeito, é utilizada adicionalmente a porta de controlo (V1/V2/V3).
Para apagar, os elétrons são expulsos da porta flutuante novamente, aplicando uma alta tensão negativa através da porta de controle.
Os componentes NAND flash utilizados nos cartões microSD agrupam os transistores de memória individuais em páginas, e várias das páginas em blocos. Uma página tem entre 512 e 8192 bytes, um bloco pode conter até 256 páginas (portanto um total de 2048 kB com 8kB de tamanho de página).
A escrita (para um "1" lógico) pode ser feita bit a bit ou, pelo menos, byte / wordwise. A eliminação (para um "0" lógico) só pode ser feita em bloco. As informações que não foram alteradas devem ainda ser programadas novamente.
As memórias flash têm uma vida útil limitada devido à programação e ao apagamento, que é dada em ciclos de apagamento
A razão para a vida útil limitada é o dano à camada de óxido isolante, que protege a porta flutuante de vazamento de carga, causado pelas altas voltagens. Assim que esta camada se torna condutiva, não é possível reter mais informações na célula de memória.
Além disso: Células de memória multiníveis
Inicialmente, havia apenas dois estados de carga (1 bit de informação) por célula de memória. Agora, graças a vários portões flutuantes por transistor, as células de memória de célula multinível armazenam diferentes estados de carga e, portanto, vários bits por transistor de memória. O transistor então conduz a corrente aplicada de forma diferente, que é avaliada durante a leitura.
Por um lado, isto torna possível aumentar significativamente a densidade das células de memória, mas por outro lado, a leitura é mais lenta e as células de memória reagem muito mais sensivelmente com erros de bit para carregar perdas. Com células de um nível, são possíveis de 100.000 a 1.000.000 ciclos de escritura-erase, com TLCs (células de três níveis com três bits por célula de memória) aproximadamente 1000 ciclos de escritura-erase.
Esta é a razão pela qual os cartões SD industriais normalmente têm densidades de memória mais baixas, e utilizam SLC (single level cells), para uma melhor integridade dos dados..
O Controlador
A tarefa do controlador é gerir o flash e, em particular, executar nivelamento de desgaste e correção de erros de leitura. O desempenho e a longevidade do cartão microSD depende decisivamente dos algoritmos utilizados no controlador.
A memória flash não pode ser reescrita tantas vezes quanto necessário devido a danos na camada de óxido isolante dos portões flutuantes, como descrito acima. Para evitar danos em áreas individuais que são utilizadas com particular frequência, o controlador varia a alocação física aos blocos que podem ser endereçados logicamente pelo sistema de arquivo (= nivelamento de desgaste).
Esta variação da alocação física é também a razão pela qual o teste de escrita e leitura do cartão SD (escrevendo e lendo com ferramentas de blocos ruins, etc.) não identificará os blocos realmente ruins e permitirá que você os evite no nível do sistema operacional / sistema de arquivos! Somente o controlador de memória flash dentro do cartão microSD sabe qual bloco é escrito para / lido a partir de qualquer momento, e como discutido isso pode mudar com o tempo.
Os blocos defeituosos (blocos defeituosos) já estão presentes na memória flash novinha em folha. Estes blocos defeituosos estão marcados em uma área especial da memória flash.
As informações de correção de erros para blocos individuais também são gerenciadas para que os erros de leitura possam ser corrigidos pelos checksums. O controlador adiciona blocos com erros de leitura agrupados à lista de blocos ruins, e desloca a alocação física real do bloco lógico.
O cartão microSD normalmente tem - dependendo do fabricante - cerca de 10% de capacidade de reserva para trocar os blocos ruins com os bons "blocos de reserva".
Pequenos segredos sujos: Problemas de memória flash
A eliminação é apenas em bloco
Os dados só podem ser apagados bloco a bloco. A eliminação das células de memória pressiona as células e encurta a sua vida útil - são criados novos blocos maus.
Blocos defeituosos da fábrica
As memórias flash já são enviadas com blocos defeituosos. No decorrer da operação, outros blocos defeituosos (blocos defeituosos) são adicionados. O controlador, portanto, tenta escrever / apagar blocos o mais uniformemente possível, através do nivelamento por desgaste.
MLC e TLC particularmente sensíveis
As células de memória multiníveis (MLCs) reduzem o número de ciclos de apagamento e, portanto, a confiabilidade a longo prazo.
Ler Perturbação
Um fenómeno ainda não mencionado por mim, mas particularmente pérfido, é Ler Perturbação. Mesmo quando apenas lendo a partir do cartão, pode - apenas por leitura - fazer com que as células de memória vizinhas no mesmo bloco alterem a sua programação. A probabilidade de isso acontecer aumenta acentuadamente depois de algumas 100.000 leituras.
Para evitar a Perturbação de Leitura, o controlador registra o número de acessos a um bloco para copiá-lo em uma peça para um novo local quando um limite é excedido, e para apagar o bloco original. Depois disso, o bloco pode ser reutilizado novamente.
Tudo isso são coisas que um controlador tem que compensar para fingir que é um "cartão de memória perfeito" por fora, enquanto que por dentro parece tudo menos perfeito!
Por último, mas não menos importante, pedaços escritos por raios X poderiam ser apagados sem intenção. Aqui, apenas um desenho do cartão com raios X pode garantir que os dados permaneçam intactos.
Fabricante e seleção de um bom cartão
Tanto o micro-controlador como o dispositivo flash e o cartão microSD acabado podem vir de diferentes fabricantes - o cartão SD da Panasonic na foto exemplo tem flash Samsung, e o controlador foi feito no Japão.
Os dispositivos NAND flash são produzidos por quatro fabricantes:
- Samsung <- líder de mercado
- Toshiba
- IM Flash Technologies (Micron Technology & Intel joint venture)
- Hynix em cooperação com a Numonyx
A Toshiba e a Samsung produzem a maioria das fichas.
SanDisk
TL;DR recomendado
A SanDisk e a Toshiba têm uma joint-venture para a fabricação de flash. No entanto, em 2009, a SanDisk transferiu os direitos das fábulas para a Toshiba para se tornar uma fabricante de memória flash sem fabricação. O desenvolvimento da memória ainda é feito em conjunto. SanDisk e Toshiba, juntamente com Matshushita, são os fundadores do padrão SD, introduzido em 1999. O padrão microSD também foi criado pela SanDisk.
Confiamos na marca SanDisk há muito tempo, e temos tido experiências muito boas com ela até agora.
Samsung
TL;DR recomendado
Os cartões de memória Samsung também são frequentemente recomendados. Como líder de mercado no setor de flash NAND, a Samsung pode combinar perfeitamente todos os componentes do cartão SD e tem toda a informação necessária para um produto sólido.
Kingston
TL;DR NÃO recomendado
Tivemos uma má experiência com a confiabilidade dos cartões Kingston de 128 GB em um projeto crítico. A Kingston não tem suas próprias fábricas, e compra capacidade excedente de outros fabricantes de cartões flash. Como resultado, o desempenho consistente não pode ser garantido.
O seguinte artigo por Bunny Huang também é interessante neste contexto.
Toshiba
A Toshiba, como o #2 no mercado mundial de DRAM, também vende os seus próprios produtos de cartões de memória. SanDisk e Toshiba, junto com Matshushita, são os fundadores do padrão SD, introduzido em 1999. Até agora não temos experiência com os cartões Toshiba.
Transcend / Silicon Power
Também temos usado cartões Transcend e Silicon Power, especialmente na faixa de baixo custo. Os cartões são basicamente bons, mas temos visto retornos / defeitos mais altos com Transcend do que com SanDisk. Para projetos críticos, eu prefiro recomendar a SanDisk / Samsung.
Escolhendo um bom cartão de memória
Para seleccionar um bom cartão de memória, a primeira coisa a fazer é escolher o fabricante. Nós recomendamos Samsung ou SanDiske possivelmente Toshiba, para a lista restrita.
A seguir, a classe de memória deve ser considerada. Esta classe indica a velocidade de gravação mais rápida bloco a bloco. Não é a velocidade de escrita para escritas aleatórias dispersas, que é mais significativa em aplicações do mundo real.
Uma classe mais alta é mais cara, mas recomendada devido ao aumento significativo do desempenho. Normalmente enviamos cartões da Classe 10.
Em esta visão geral em eLinux.org um cartão de memória adequado pode então ser verificado quanto à compatibilidade com o Raspberry Pi. Nota importante: o firmware do Raspberry Pi foi modificado várias vezes para melhor compatibilidade com cartões de memória e para evitar a corrupção de dados.
Você deve encomendar de fontes fidedignas - por exemplo, obtemos os nossos cartões SanDisk microSD directamente da Raspberry Pi Trading, e de grandes distribuidores alemães de renome. Na Amazon, certifique-se de encomendar diretamente da Amazon, não de um varejista do Marketplace.
Certas informações (cid, csd, data, manfid, oemid, série) do cartão microSD pode ser lido com o Linux para verificar se você recebeu o fabricante correto. Exemplos com um cartão Transcend:
cd /sys/class/mmc_host/mmc?/mmc?:*
echo "man:$(cat manfid) oem:$(cat oemid) name:$(cat name) hwrev:$(cat hwrev) fwrev:$(cat fwrev)"
man:0x000074 oem:0x4a60 name:USD hwrev:0x1 fwrev:0x0
echo "serial:$(cat serial) mdt:$(cat date)"
serial:0x401e39f2 mdt:03/2017
O Fabricante ID (manfid) é atribuído por SD-3C LLCbem como o OEM / Application ID (oemid). O oemid identifica o fabricante do cartão e/ou o conteúdo do cartão.
O nome do produto (nome) tem 5 caracteres de comprimento (ASCII). hwrev é a revisão de hardware, e fwrev a revisão do firmware. Juntos eles são a revisão do produto (hwrev.fwrev).
O em série é o número de série do cartão microSD, é um campo de 32bit que deve ser lido como um inteiro não assinado.
O mdt (Data de fabricação) indica quando o cartão foi fabricado - ano e mês.
Os valores podem ser comparados com os valores em websites para detectar fraudes com cartões microSD falsificados. Eu recomendo a leitura Artigo do Bunny's blog (um) e este artigo (dois).
Estável homem/em combinações de uma marca indicam uma cadeia de fornecimento bem controlada e consistente. Por exemplo, a SanDisk tem a seguinte combinação para todas as entradas no Wiki eLinux.org: man:0x000003 oem:0x5344. Outras marcas, como a Transcend, variam os seus fornecedores, pelo que a qualidade consistente já não pode ser garantida.
Evitar a corrupção de dados durante a operação
O cartão microSD é o "disco rígido" do Raspberry Pi. Com uma configuração normal do Linux, ele é tratado exatamente da mesma forma que um disco rígido - tanto os acessos de leitura como de escrita ocorrem. O Linux registra informações em muitos arquivos de log, e entre outras coisas, atualiza os tempos de acesso aos arquivos. Os dados são assim frequentemente alterados e escritos por cima. Isto é algo para o qual os cartões microSD nunca foram desenhados.
Dica #1: Desligue o Raspberry Pi corretamente e use uma boa fonte de alimentação
Você também não desligaria um computador Windows. Com computadores Linux, e especialmente os Raspberry Pi's suportados por cartão microSD, é apenas uma questão de tempo. antes que ocorra corrupção de dados durante os cortes em pó.
O Linux tem caches de leitura-escrita para acelerar as operações de arquivo. Quando você simplesmente desconecta a energia do Pi, você pode perder a informação nos caches de escrita que ainda não foi escrita no microSD.
Como mencionado anteriormente, o controlador microSD está ativamente mudando os dados em tempo de execução em tempo de execução para nivelamento de desgaste, e evitando perturbações de leitura. Isto acontece sem o conhecimento do sistema Linux ("transparente"). E, dependendo do fabricante, de forma mais ou menos conservadora. Também aqui - especialmente durante as operações de escrita! - podem ocorrer danos e perdas de dados.
Portanto, você deve certificar-se de que, após desligar o seu Pi, o ACT-LED do Raspberry Pi pare de piscar, e só então puxar a energia.
Um mau fornecimento de energia também pode levar a problemas devido a apagões (subvoltagem). Em caso de dúvida, utilize a fonte de alimentação recomendada / fornecida pela Raspberry Pi Trading.
Dica #2 Sistema só de leitura com sobreposições
Um sistema só de leitura não protege o cartão SD contra distúrbios de leitura e, portanto, contra o envelhecimento devido aos ciclos de apagamento necessários. No entanto, isto acontece muito mais lentamente do que quando se escreve activamente.
Um sistema de arquivo só de leitura também tem outras vantagens, por exemplo, menos verificações do sistema de arquivo na inicialização.
Especialmente sistemas embutidos - isto é, sistemas que foram desenvolvidos para um propósito específico e são então instalados em uma aplicação (por exemplo, sinalização digital) não precisam necessariamente da possibilidade de instalar constantemente novo software e manter registros precisos no local. Os logs podem ser enviados através da rede para um servidor central (atrasados se necessário), e para atualizações do sistema o sistema pode ser colocado em modo de manutenção para aplicar as atualizações.
Aqui estão algumas informações do projeto Debian no qual Raspbian é baseado: https://wiki.debian.org/ReadonlyRoot.
Usando sobreposições de disco RAM (em tmpfs), um sistema ainda pode gravar arquivos de log, ou fazer alterações em arquivos. As sobreposições de disco RAM podem ser sincronizadas periodicamente com partições especialmente designadas no cartão SD. Deve-se tomar cuidado com o disco RAM para que ele não transborde (devido aos arquivos de log), e é claro que há menos memória RAM disponível para atividades normais.
Nós usamos esta técnica com o nosso produto Anonymeboxonde se deve assumir que os usuários simplesmente o desconectam da tomada.
Você está procurando um parceiro para realizar uma solução sólida somente leitura para o seu projeto Raspberry Pi incorporado? Nós (como pi3g e.K.) oferecemos serviços de consultoria e desenvolvimentopara hardware e software.
Dica #3 Redução das operações de escrita
Especialmente com kernels mais antigos, o Linux atualiza o tempo de acesso para cada acesso de arquivo, de acordo com o padrão POSIX. Isto significa que cada operação lida resulta automaticamente em uma operação de escrita. Há a possibilidade de definir explicitamente noatime em /etc/fstab se ainda não estiver definido (Raspbian parece defini-lo automaticamente).
Mais informações sobre relatime e noatime
Desactivar o registo do sistema usando máscara:
systemctl mask systemd-journald.service
Criado symlink de /etc/systemd/systemd/systemd-journald.service para /dev/null.
sudo systemctl mask rsyslog.service
Criado symlink de /etc/systemd/systemd/system/rsyslog.service para /dev/null.
Outros registos criados por outras aplicações, e as consequências da desactivação destes serviços (por exemplo, certos serviços que já não se iniciam) devem, naturalmente, ser examinados em pormenor.
Troca de arquivo:
Se não houver RAM suficiente, o Linux move áreas individuais de RAM para um arquivo SWAP. (Considere o uso de um Raspberry Pi 4 com RAM suficiente, por exemplo o Pi 4 / 4 GB ou o Pi 4 / 8 GB para o seu caso de uso). Com o seguinte comando, o estado do ficheiro SWAP pode ser verificado:
sudo systemctl status dphys-swapfile
● dphys-swapfile.service - LSB: Auto-gerar e usar um arquivo swap Carregado: carregado (/etc/init.d/dphys-swapfile) Ativo: ativo (saído) desde Sat 2017-07-01 19:11:57 UTC; 8min atrás Processo: 498 ExecStart=/etc/init.d/dphys-swapfile start (code=exited, status=0/SUCCESS)
O seguinte comando pode ser usado para desativar o SWAP:
sudo systemctl disable dphys-swapfile
Conclusão
Os cartões microSD em uso contínuo colocam a confiabilidade a longo prazo dos sistemas baseados em Raspberry Pi a um teste severo.
Usando a fonte de alimentação correta, sistemas somente leitura com sobreposições, redução consistente das operações de escrita e selecionando um bom cartão SD por uma marca conhecida, a estabilidade pode ser aumentada a longo prazo.
Notas
(*) NotaRaspberry Pi 3, 3B+ e 4 podem arrancar a partir de suportes USB, ou através de rede (Ethernet), sem cartão microSD.
Especialmente para uma inicialização por rede, ainda é recomendado instalar uma placa microSD com um firmware especial, porque um bug de timeout no código de inicialização impede uma inicialização estável (Raspberry Pi 3B).
As explicações acima sobre a estrutura da memória flash também se aplicam aos pen drives, já que a memória flash também está instalada neles.
(**) Nota: uma alternativa cada vez mais utilizada aos portões flutuantes são as memórias flash de retenção de carga, o princípio funcional permanece o mesmo. A célula flash de retenção de carga permite densidades de memória mais elevadas.
Hi,
há uma maneira de verificar o controlador no cartão SD quantos bandos ruins estão presentes?
Ao verificar isto periodicamente, gostaria de construir um gráfico de tendências.
Obrigado pelo trabalho.
Cumprimentos,
Peter
que seria impossível para um cartão SD de grau de consumidor normal, a menos que se disponha da ferramenta MP para o controlador utilizado específico, que nunca está disponível.
Seria possível se o cartão fosse de grau industrial e tivesse informações SMART disponíveis (especificadas na sua respectiva folha de dados), e depois pode escrever algum código para ler os dados SMART.
Mas isto é apenas o início da PITA. Não existe uma norma industrial para a monitorização da saúde dos cartões SD, pelo que cada fabricante implementa o protocolo de forma diferente e este nem sempre é publicado.
O relatório SMART de alguns fabricantes fornece apenas um número percentual do tempo de vida restante do cartão, alguns fornecem informações mais detalhadas, incluindo blocos reservados, blocos defeituosos iniciais, blocos defeituosos posteriores, contagem máxima/minuto/avg de apagamento, tempo de vida P/E, etc.
Actualmente tenho conseguido ler estatísticas de saúde de cartões de Lexar, ADATA, ATP, Sandisk, Apacer, Metorage, Delkindevices, SiliconePower, Swissbit e alguns mais.
A minha motivação é decifrar a informação SMART a partir de um cartão industrial de segunda mão barato e sujo produzido pela Foresee, por agora consegui decifrar o cartão da série MPS/M9M/M9H/D7D/X52/X53 e ainda estou a trabalhar em mais alguns modelos.
Espero que haja um padrão industrial para informações inteligentes sobre cartões SD em breve. Também achei engraçado que alguns cartões SD tenham uma vida TBW mais elevada do que muitos SSDs lmao
oh, esqueci-me de mencionar que a maioria (mas não todos, merda.) dos cartões dá informações SMART através do envio do comando CMD56 para o cartão com um argumento int de 32bit, terá de encontrar esse número mágico da folha de dados e respectivo formato de dados para ler os dados. Se obteve a folha de dados, então está basicamente terminado, verifique a ferramenta sdmon no github por exemplo código.
Se a folha de dados não estiver fora ou o número mágico não for publicado, terá de iterar todo o 31bit (o bit mais baixo é sempre 1) espaço de int para o rachar à força, e pode demorar de 12 horas a meio mês, dependendo da sua sorte. Espero que não haja nenhum fabricante maléfico que comece o seu número mágico com 0xF_______. Por agora todo o número mágico que consegui decifrar/colher começa com 0x1_______.
Alguns cartões requerem uma rotina mais complexa para ler as informações SMART, como o Apacer, mas ainda bem que forneceram as informações necessárias na folha de dados. O Apacer também fabrica cartões OEM para algumas outras marcas, pelo que se aplica a mesma rotina.