AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 450476
Accepted
TheMeaningfulEngineer
TheMeaningfulEngineer
Asked: 2018-06-19 09:21:25 +0800 CST2018-06-19 09:21:25 +0800 CST 2018-06-19 09:21:25 +0800 CST

Definindo um estado de cartões SD com falha pelo rastreamento do kernel?

  • 772

Estou tendo uma série de cartões SD com falha / às vezes com falha. Eles fornecem uma das seguintes dmesgsaídas:

Os completamente mortos (não liste em /dev/mmcblk0):

[  +0,000010] mmc0: error -110 whilst initializing SD card 
[  +2,819983] mmc0: card never left busy state

Os com falha (ocasionalmente ainda podem ser montados):

[Jun16 06:28] mmc0: new high speed SDHC card at address 0001
[  +0,000339] mmcblk0: mmc0:0001 00000 3.68 GiB 
[  +0,002835]  mmcblk0: p1 p2 p3 p4
[ +10,256689] mmcblk0: timed out sending r/w cmd command, card status 0x900
[ +11,264358] mmcblk0: timed out sending r/w cmd command, card status 0x900
[  +0,000016] print_req_error: I/O error, dev mmcblk0, sector 7716736
[ +10,239972] mmcblk0: timed out sending r/w cmd command, card status 0x900
[  +0,000018] print_req_error: I/O error, dev mmcblk0, sector 7716736
[  +0,000008] Buffer I/O error on dev mmcblk0, logical block 964592, async page read
[ +10,239931] mmcblk0: timed out sending r/w cmd command, card status 0x900
[  +0,000009] print_req_error: I/O error, dev mmcblk0, sector 81792
[Jun16 06:29] mmcblk0: timed out sending r/w cmd command, card status 0x900
[  +0,000020] print_req_error: I/O error, dev mmcblk0, sector 1066880
[ +10,240219] mmcblk0: timed out sending r/w cmd command, card status 0x900
[  +0,000011] print_req_error: I/O error, dev mmcblk0, sector 2101120

O melhor que tenho error -110é que é uma espécie de tempo limite , mas diz muito pouco sobre o que realmente aconteceu com o SDCard.

Antecedentes de como isso aconteceu

Os cartões SD acabam nesses estados em alguns (aparentemente aleatórios) dispositivos incorporados em que estou trabalhando, e estou tentando entender se é uma questão de cartões SD ruins ou se pode haver algo errado com o driver do controlador que está empurrando as cartas para a corrupção.

Cerca de 5% dos cartões morreram completamente, e estou tentando ver se isso é o que esperar dos outros.

Tentei forçar o SDcard a reproduzir o problema, mas os que estão sendo testados (mesma marca, mesmo tipo de dispositivo com o mesmo software) não mostram nenhum vestígio de desgaste após centenas de GB de dados gravados neles de maneira contínua como parte do teste. Eu uso o stressdisk para isso.

Eu não tenho uma pista de quantas vezes o dispositivo pode ter perdido energia abruptamente, e a fonte de alimentação é um adaptador AC-DC 2A regular que está funcionando bem para todas as outras necessidades do dispositivo.

Atualizar

A questão parece ser sugerida para ser fechada ou respondida de maneira helps me prevent failed SD cards in the futurediferente de using Linux to diagnose what is the current state of the SDcards.

Deixe-me tentar reformular então:

Qual é a maneira mais completa de analisar uma falha de cartão SD no Linux?

  • É possível habilitar logs de depuração para o subsistema MMC para obter mais informações?
  • O que é um card status 0x900?
  • É possível detectar a comunicação SD-bus ou SD-bus do espaço do usuário para obter indicações de que o cartão está começando a falhar?
linux-kernel debugging
  • 1 1 respostas
  • 4456 Views

1 respostas

  • Voted
  1. Best Answer
    sourcejedi
    2018-06-24T13:01:46+08:002018-06-24T13:01:46+08:00

    Isso parece mais um problema de hardware/caso de uso do que outra coisa. Aposto que o bom senso pode ser mais importante do que as habilidades do Linux aqui. Você está fazendo E/S pesada nos cartões, MySQL/Apache/compilando coisas...syslog/atualizações freqüentes do sistema? -- comentário de Rui F Ribeiro

    Eu posso expandir o acima. Mas concordo com o primeiro ponto, e concordo que esta foi a primeira pergunta a ser feita.


    • Devo habilitar alguns logs de depuração para o subsistema MMC?
    • Existe uma ferramenta de espaço de usuário que pode farejar o que está acontecendo?
    • Como faço para que os códigos de erro façam mais sentido?

    A única confiança que tive ao atribuir falhas veio mais do "histórico" e dos resultados gerais que recebo, não dos erros específicos de comandos de baixo nível. Que provavelmente variam entre as implementações de qualquer maneira.

    Mesmo com um SSD, de uma marca razoável, acredito que tive dados ruins retornados no lugar de erros de E/S. Esse certamente foi um dos modos de falha conhecidos em muitos SSDs. [ 2013 ][ 2017 ]. (Possivelmente surpreendente para pessoas familiarizadas com os sistemas de arquivos contemporâneos e implementações de banco de dados que muitas vezes esperam um conjunto mais gerenciável de modos de falha). Observe que os artigos que relaciono aqui focaram nos dados retornados; eles não fizeram mais distinção nos erros relatados, exceto pela distinção de unidade morta / setor defeituoso que você já mediu.

    Minha falha no SSD estava em um laptop "recondicionado pelo vendedor", que já havia sido "consertado" uma vez e estava começando a mostrar falhas novamente - plausivelmente causando uma interrupção de energia na unidade, assim como nos documentos vinculados. Também pode ter falhado em fornecer níveis de tensão estáveis.

    Estou tentando entender se é uma questão de cartões SD ruins ou se pode haver algo errado com o driver do controlador que está levando os cartões à corrupção.

    Um bom hardware com uma boa fonte de alimentação não tende a destruir um bom cartão SD - a menos que você esteja colocando muita carga nele. A carga de trabalho é uma variável muito importante, que você não mencionou [originalmente]. Esses cartões de memória são hardwares relativamente pequenos, geralmente baratos, projetados para uso relativamente pouco exigente, armazenando arquivos de mídia (daí MMC, "MultiMediaCard"). Os particularmente mais baratos não serão necessariamente muito bons em "nivelamento de desgaste" (redistribuindo a carga de blocos lógicos de hotspot em um grande número de blocos físicos).

    Eu medi a carga de trabalho com um hack rápido, agendando um trabalho cron diário para executar o tunefs -l /dev/mmcblk0p4 | grep writes >> /var/log/writes.log.

    Mas se deixarmos a carga de trabalho de lado, você estaria certo em considerar um possível problema do lado do controlador a partir das informações fornecidas até agora. Eu tive setores defeituosos repetidos em um cartão SD devido a gravações de um dispositivo de bolso, possivelmente quando a bateria estava fraca. Este era um cartão de uma marca. Os setores foram recuperáveis ​​e continuo usando o mesmo cartão. Eu também tive algum tipo de falha de inicialização transitória neste cartão, acho que também estava associado a setores defeituosos (depois que passei pela falha de inicialização), mas posso estar me lembrando mal.

    Estou tendo uma série de cartões SD com falha / às vezes com falha.

    A impressão que tenho da sua pergunta [original] é que esta é uma operação de pequena escala e executar uma matriz de teste rigorosa com diferentes placas, controladores e cargas de trabalho seria um exagero.

    Após a carga de trabalho, a primeira variável que você controla é o cartão.

    Escrevendo em 2018, há uma marca global que pode ser considerada "canônica" para cartões SD -

    veja os resultados em: https://www.amazon.com/s/field-keywords=sd+card

    - e esperamos que você tenha vários canais de varejo que podem ser considerados... pelo menos confiáveis ​​o suficiente para fins de comparação. (Lembrando que vários varejistas online populares atuam como "marketplace" além de venderem seus próprios produtos).

    O hardware oficial do Raspbery PI também pode ser aceitável. Ou seja, cartões SD, vendidos oficialmente para rodar Linux em um pequeno computador de placa, que foram relatados como funcionando bem. (Sendo uma carga de trabalho mais exigente do que arquivos de mídia).

    Como um pincel amplo, se você receber um cartão que é mais rápido do que o estritamente necessário, também penso nisso como uma classificação de resistência potencialmente mais alta. (Dado que a classificação de velocidade tende a ser muito mais disponível do que a resistência).

    Se você controlar / medir essas duas variáveis, poderá concentrar seus julgamentos no restante do hardware relevante.


    Os com falha (ocasionalmente ainda podem ser montados)

    Observe que, no caso mais geral, se você achar que um dispositivo foi mal escrito, você pode tentar eliminar esta falha:

    1. recuperar quais dados você pode, se desejar
    2. então pare de tentar ler blocos defeituosos. simplesmente recrie toda a formatação (tabela de partição + sistema de arquivos).
    3. mas se você não tiver certeza e achar que o dispositivo ainda pode estar morrendo, provavelmente também desejará testá-lo.

    Se você tem um bom hardware MMC nativo como você, pode usar o comando Linux blkdiscardcomo uma maneira mais eficiente de testar o apagamento de todos os blocos do dispositivo, antes de "reformatá-lo". Mas a eficiência é a única vantagem, em comparação com o teste de erros ao substituir toda a unidade com zeros, ou seja, dd bs=1M if=/dev/zero of=/dev/mmcblk0. (Além de evitar qualquer necessidade de escrever os blocos apagados, blkdiscardtambém poderia, em teoria, fornecer um desempenho mais "como novo" depois e aumentar a resistência, dando ao dispositivo um pouco mais de liberdade).

    (Se esta for uma unidade SATA - há um comando "secure erase" dedicado para descartar todo o conteúdo da unidade lógica (consulte Recursos man hdparm). No entanto, não conheço nenhum comando MMC equivalente. Alguns fornecedores de SSD aproveitaram esse comando para redefinir seus tabelas de mapeamento de bloco, como uma solução alternativa para sua falha ao recuperar o desempenho "como novo" com a blkdiscardsequência equivalente. Observe que este comando não testa necessariamente uma exclusão completa da unidade. Em alguns casos, ele apenas apagará uma chave de criptografia interna).

    Desde que você perguntou como eram meus erros

    Meu cartão micro-SD SanDisk foi reproduzido novamente recentemente. Parece que os erros específicos abaixo foram devidos à conexão escamosa. Foi resolvido removendo e reinserindo o micro-SD no adaptador micro-SD para SD, depois de soprar supersticiosamente em todas as almofadas de metal.

    No leitor do meu laptop Dell Latitude E5450 ( sdhci-pcidriver do kernel, versão do kernel Fedora Linux por volta da v4.17), ele estava falhando ao inicializar a placa. No meu SheevaPlug (mesmos detalhes de hardware e software que esta pergunta ), esta placa parece ter sido capaz de inicializar, mas mostrou erros de E/S. Talvez na Dell os tempos limite de tratamento de erros não estejam configurados corretamente.

    Dell:

    [    2.436566] mmc0: Unknown controller version (3). You may experience problems.
    [    2.449019] mmc0: SDHCI controller on PCI [0000:01:00.0] using ADMA
    ...
    [509227.374012] mmc0: error -84 whilst initialising SD card
    [509227.621510] mmc0: error -84 whilst initialising SD card
    [509227.865472] mmc0: error -84 whilst initialising SD card
    [509228.142120] mmc0: error -84 whilst initialising SD card
    

    Sheevaplug:

    [6076613.118617] mmcblk0: mmc0:aaaa SC16G 14.8 GiB 
    [6076613.295811] mmcblk0: error -110 transferring data, sector 0, nr 8, cmd response 0x900, card status 0x0
    [6076613.545740] mmcblk0: error -110 transferring data, sector 0, nr 8, cmd response 0x900, card status 0x0
    [6076613.555301] mmcblk0: retrying using single block read
    [6076613.728413] mmcblk0: error -110 transferring data, sector 0, nr 8, cmd response 0x900, card status 0x0
    [6076613.737965] blk_update_request: I/O error, dev mmcblk0, sector 0
    [6076613.912043] mmcblk0: error -110 transferring data, sector 1, nr 7, cmd response 0x900, card status 0x0
    [6076613.921599] blk_update_request: I/O error, dev mmcblk0, sector 1
    ...
    
    • 6

relate perguntas

  • Bloqueando montagem syscall

  • Por que a versão 30 das ferramentas sem fio se tornou uma versão beta permanente?

  • Como melhorar a capacidade de depuração do Linux e ser proficiente no uso do Linux [fechado]

  • tamanho da pilha do programa

  • Quais dongles WiFi 802.11ac (ou posteriores) funcionam com o kernel Linux 4.13

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    ssh Não é possível negociar: "nenhuma cifra correspondente encontrada", está rejeitando o cbc

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    Como descarregar o módulo do kernel 'nvidia-drm'?

    • 13 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add retorna com: "Erro ao conectar ao agente: nenhum arquivo ou diretório" 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve