Como os cartões SD implementam sua proteção contra gravação no fim da vida útil?

Como os cartões SD implementam sua proteção contra gravação no fim da vida útil?

Pesquisei um pouco e ouvi falar do comportamento de fim de vida do cartão SD (não tenho certeza de como chamá-lo), onde os cartões SD e microSD se tornam somente leitura para evitar perda de dados. Quando ouvi falar dele pela primeira vez, achei que era terrivelmente inteligente. Agora não tenho tanta certeza.

Algumas informações básicas: eu tinha um microSD que durou 2 anos de uso intenso do Raspberry Pi antes de entrar no modo de proteção contra gravação. Usei o dd para mover todo o sistema operacional e sistema de arquivos para minha placa substituta. Depois de alguns dias de uso, percebi que este cartão também estava protegido contra gravação. Achei que tive uma sorte terrível, até que meu segundo cartão reserva fez o mesmo quase imediatamente.

Isso me incomodou, então deixei minha framboesa descansar. Mas comecei a me perguntar como o cartão SD sabe se proteger contra gravação. Se ele mantiver uma contagem dos ciclos de gravação e eu usar o dd para criar uma imagem de todo o disco, posso ter danificado meus cartões SD, enganando-os, fazendo-os pensar que eram antigos. Mas não consigo encontrar a implementação do comportamento de fim de vida em lugar nenhum. Alguém sabe como funciona? Eu gostaria de tentar desfazer isso, mas a proteção contra gravação parece estar implementada em um nível muito baixo. Não consigo nem acessar o /dev/sdX usando o sudo.

Se estou certo e mantém algum tipo de registro do ciclo de gravação, isso é mais do que um pouco frustrante. Isso significa que o cartão SD não morreu – é apenas uma medida de precaução. Embora isso seja bom, eu gostaria de usá-lo até a morte real, pois estou fazendo backups regulares.

Tendo isso como meu histórico prolixo, alguém sabe como o comportamento de fim de vida é implementado e há alguma maneira de desfazer um desencadeamento acidental do comportamento?

Responder1

A maioria dos fabricantes não publica o seu mecanismo de nivelamento de desgaste, o que torna impossível determinar os melhores e piores cenários de esperança de vida (provavelmente essa é a razão porque com esse conhecimento seria possível destruir tal cartão num instante).

A SanDisk forneceu algumas dicas há algum tempo (https://web.archive.org/web/20150326122100/http://ugweb.cs.ualberta.ca/~c274/resources/hardware/SDcards/WPaperWearLevelv1.0.pdf). Embora isso provavelmente tenha mudado ou sido refinado, o básico ainda deve ser aplicado:

Cada chip de memória é dividido em blocos. Um bloco é uma matriz de células de memória organizadas como setores. (...) A unidade mínima para uma operação de escrita ou leitura é uma página (ou setor). A unidade mínima para uma operação de apagamento é um bloco. Os blocos físicos são agrupados logicamente em zonas. (...) O nivelamento do desgaste é feito dentro de uma zona. O firmware atual não distribui o desgaste pela capacidade da placa. Cada zona possui cerca de 3% de “blocos sobressalentes” adicionais além do que é atribuído para atender à capacidade lógica do cartão flash. Este grupo de blocos é comumente referido como “Erase Pool”.

Mesmo que o desgaste se espalhe pelo cartão, o princípio permanece o mesmo.

Quando um cartão detecta que um bloco atingiu o fim de sua vida útil, ele remove esse bloco dos blocos que estão disponíveis para operações de escrita. O resultado é uma redução do tamanho do conjunto de apagamento. Isso não afeta a capacidade do cartão vista pelo host. Quando o conjunto de blocos disponíveis para operações de escrita se esgotar devido ao desgaste, o cartão chegará ao fim de sua vida útil para operações de escrita.

Como a capacidade do cartão não é reduzida e o nivelamento de desgaste no cartão do consumidor não reescreve os dados armazenados (como nos SSDs), algum tipo de gravação pode desgastar rapidamente o cartão. Um tipo escreve apenas em um setor que requer a gravação de todo o bloco. Dependendo do seu sistema operacional, ddpode usar um tamanho de bloco padrão 512que pode ser muito menor que o tamanho de bloco do cartão e, portanto, resultar em uma enorme amplificação de gravação. Um exemplo: quando o tamanho do bloco dos cartões SD é 16kB e um setor tem 512 Bytes, a quantidade de desgaste pode ser aumentada neste caso até o fator 31! Esta pode ser a razão pela qual sua segunda placa falhou antecipadamente.

As informações de desgaste não são copiadas porque fazem parte do hardware do cartão SD e, portanto, essas informações não podem ser lidas/restauradas por meios normais. O mesmo se aplica à proteção contra gravação, pois o próprio controlador dos cartões SD evita isso. Então, não, se não estamos falando de proteção contra gravação de hardware (chave mecânica em cartões SD) ou software (montagem somente leitura), esse processo não é reversível.

Responder2

Os cartões devem ter algum espaço extra para usar no nivelamento de desgaste, mas parece que talvez os que você tem sejam burros e não tenham blocos sobressalentes e sejam somente leitura porque você escreveu em todos os blocos. a unidade. Copiar os arquivos em vez de usar dd, ou usar e2image -arpara copiar um sistema de arquivos ext[234] evitará a gravação desnecessária em todos os blocos não utilizados no disco, o que pode ajudar.

informação relacionada