Tudo sobre a saúde do cartão SD no Raspberry Pi

Estado do cartão SD

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.

Em primeiro lugar, vou dar uma visão geral aprofundada sobre o funcionamento dos cartões de memória, para que possa compreender as possibilidades e limitações de verificar o estado de saúde do seu cartão SD.

Em seguida, explicarei como proteger o seu cartão microSD, reduzindo os problemas comuns que os utilizadores do Raspberry Pi enfrentam. Também falaremos sobre as melhores marcas de cartões microSD para Raspberry Pi que recomendamos.

Se quiser, também pode saltar mais abaixo, para obter apenas os comandos Linux para verificar o estado atual do cartão microSD.

Noções básicas: Dentro do cartão microSD

Um microSD Karte interno
Imagem: Ilustração do interior de um cartão SD. O cartão microSD tem uma estrutura semelhante. Fonte da imagem: CC-BY-SA KorpsvartWikimedia Commons

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 se mantém mesmo depois de a alimentação de corrente ser desligada.

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 programar a porta flutuante, são necessárias tensões eléctricas significativamente mais elevadas (por exemplo, 10 V) do que para a operação de leitura normal (por exemplo, 3,3 V). Para tal, a porta de controlo (V1/V2/V3) desempenha um papel fundamental.

Para apagar tudo, a porta de controlo conduz os electrões para fora da porta flutuante aplicando uma tensão negativa elevada.

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 efectuada por bits ou, pelo menos, por bytes/palavras. A eliminação (para um "0" lógico) só pode ser efectuada no sentido dos blocos. Se houver alguma informação inalterada, esta tem de ser programada novamente.

As memórias flash têm um tempo de vida limitado devido à programação e ao apagamento, que calculamos em ciclos de apagamento.

A razão para o tempo de vida limitado é a danificação da camada de óxido isolante, que protege a porta flutuante da fuga de carga, causada pelas altas tensões. Assim que esta camada se torna condutora, a célula de memória não consegue guardar mais informação.

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. Atualmente, graças a várias portas flutuantes por transístor, as células de memória multinível armazenam diferentes estados de carga e, por conseguinte, vários bits por transístor de memória. Durante a leitura, o sistema avalia a forma como a corrente aplicada é conduzida de forma diferente pelo transístor.

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 microcontrolador como o dispositivo flash e o cartão microSD acabado podem ser de fabricantes diferentes - o cartão SD da Panasonic na foto de exemplo tem flash da Samsung. O controlador foi fabricado no Japão.

Há quatro fabricantes que produzem dispositivos flash NAND:

  • 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 (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. Continuam a trabalhar em conjunto no desenvolvimento de memórias. A SanDisk e a Toshiba, juntamente com a Matshushita, são as fundadoras da norma SD, introduzida em 1999. A SanDisk também criou a norma microSD.

Confiamos na marca SanDisk há muito tempo, e temos tido experiências muito boas com ela até agora.

Samsung (recomendado)

Recomendamos também os cartões de memória Samsung. Como líder de mercado no sector de flash NAND, a Samsung pode combinar perfeitamente todos os componentes do cartão SD entre si e tem todas as informações necessárias para um produto sólido.

Kingston (NÃO recomendado)

Tivemos uma má experiência com a fiabilidade dos cartões Kingston de 128 GB num projeto crítico. A Kingston não tem as suas próprias fábricas e compra o excesso de capacidade a outros fabricantes de flash. Como resultado, não há garantia de um desempenho consistente.

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.

De seguida, a classe de memória é importante. Esta classe indica a velocidade de escrita mais rápida, bloco a bloco. Não é a velocidade de escrita para gravações de acesso aleatório 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.orgSe o seu Raspberry Pi não for compatível com o cartão de memória, pode verificar se este é compatível com o seu Raspberry Pi. Nota importante: o firmware do Raspberry Pi é constantemente modificado para melhor compatibilidade com os 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 32 bits que se lê como um número inteiro sem sinal.

O mdt (Data de fabricação) indica quando o cartão foi fabricado - ano e mês.

Pode comparar os valores com sítios Web para detetar fraudes com cartões microSD falsos. Recomendo a leitura de 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 não é uma certeza.

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, funciona como um disco rígido normal - ocorrem acessos de leitura e escrita. O Linux regista informações em muitos ficheiros de registo e, entre outras coisas, actualiza os tempos de acesso aos ficheiros. Assim, os dados mudam frequentemente. Isto é algo para o qual os cartões microSD nunca foram concebidos.

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 e escrita para acelerar as operações com ficheiros. Quando se desliga a alimentação do Pi, pode perder-se a informação nas caches de escrita que não chegou ao 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 os sistemas integrados - ou seja, sistemas que servem um objetivo específico numa aplicação (por exemplo, sinalização digital) - não precisam necessariamente da possibilidade de instalar constantemente novo software e de manter registos precisos no local. É possível enviar os registos através da rede para um servidor central (com atraso, se necessário) e, no caso de actualizações do sistema, este pode ser colocado em modo de manutenção para aplicar as actualizações.

Aqui estão algumas informações do projeto Debian no qual Raspbian é baseado: https://wiki.debian.org/ReadonlyRoot.

Utilizando sobreposições de disco RAM (em tmpfs), um sistema pode ainda escrever ficheiros de registo ou fazer alterações a ficheiros. Pode sincronizar periodicamente as sobreposições do disco RAM com partições especialmente designadas no cartão SD. Deve-se ter cuidado com o disco RAM para que não transborde (devido aos ficheiros de log), e há naturalmente menos memória RAM disponível para actividades 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 o definiu (o 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 utilização). Com o seguinte comando, pode verificar o estado do ficheiro SWAP:

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)

Pode utilizar o seguinte comando 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.

Utilizando a fonte de alimentação correcta, sistemas só de leitura com sobreposições, redução consistente das operações de escrita e seleccionando um bom cartão SD de uma marca conhecida, pode aumentar a estabilidade a longo prazo.

Se você precisa de suporte profissional para o seu projeto/produto baseado em Raspberry Pi, entre em contato conosco para uma consulta inicial gratuita.

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 um arranque através da rede, recomendamos a instalação de um cartão microSD com um firmware especial, porque um bug de timeout no código de arranque impede um arranque estável (Raspberry Pi 3B).

As explicações acima sobre a estrutura da memória flash também se aplicam aos dispositivos USB, uma vez que estes também se baseiam na memória flash.

(**) 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.

Se quiser saber mais sobre cartões SD com o seu Raspberry Pi, consulte os nossos muitos artigos sobre o tema aqui.

5 comentários

  1. Pete em Outubro 13, 2021 às 8:27 pm

    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

    • unintell em Novembro 9, 2022 às 3:55 pm

      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

      • unintell em Novembro 9, 2022 às 4:03 pm

        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.

  2. [...] Saúde do cartão SD (inclui as melhores práticas para cuidar do seu cartão SD!) [...]

  3. [...] Tudo sobre a saúde do cartão SD / cartão microSD no Raspberry Pi [...]

Deixe um comentário