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 / 484900
Accepted
unfa
unfa
Asked: 2018-11-30 04:24:24 +0800 CST2018-11-30 04:24:24 +0800 CST 2018-11-30 04:24:24 +0800 CST

Detectando dispositivos de memória flash USB com mau comportamento, que bloqueiam o IO do restante

  • 772

Estou usando f3um script Bash personalizado para testar a memória flash USB em grandes quantidades.

Um problema comum que encontro é que algumas unidades defeituosas fariam com que todas as unidades saudáveis ​​ficassem sem IO, efetivamente parando o processo de teste.

Por exemplo - ao deixar 50 unidades USB para teste, geralmente descubro depois de uma hora que 48 não estão fazendo nada e 2 estão piscando seus LEDs. A remoção dessas duas unidades de repente retoma o teste de todas as outras unidades.

Às vezes, há situações mais complexas em que 24 unidades estão paradas e o restante parece funcionar bem. Exceto que algumas unidades não fazem nenhum progresso após 20 minutos. Você os conecta, o resto está voltando à vida e o teste continua.

No entanto - eu também descobri que é suficiente parar de testar as unidades defeituosas para fazer o resto ganhar vida.

Estou procurando uma maneira de descobrir quais unidades estão causando esse bloqueio de operação de arquivo em outras pessoas para que eu possa interrompê-las automaticamente no meu script.

Estive assistindo atop, iostat, htope dmesgtentando encontrar um fator de discriminação, mas não consigo ver nada. Descobri que existe a chamada usbmoninterface de depuração do kernel, embora seja tão de baixo nível que eu realmente não saiba como usá-la. Os pacotes USB brutos não me dizem nada.

Existem outras ferramentas que eu poderia usar para saber quais unidades estão se comportando mal?

Eu uso f3writee f3readprogramas para testar as unidades. O f3writeprograma cria arquivos de 1 GB que o f3readprograma lê identificando qualquer dano de dados ocorrido no processo.

Além disso - é estranho, mas quando uma unidade com mau comportamento está presente, o restante das unidades "saudáveis" terminará seu trabalho no arquivo atual. Diga - escrever ou ler um arquivo de 1 GB - mas não criará um novo arquivo até que as unidades com mau comportamento sejam removidas. É como abrir um novo arquivo se tornasse impossível na presença de uma unidade "IO hog".

O que posso fazer para diferenciá-los?

linux usb
  • 1 1 respostas
  • 113 Views

1 respostas

  • Voted
  1. Best Answer
    unfa
    2019-02-15T01:45:47+08:002019-02-15T01:45:47+08:00

    Finalmente encontrei uma maneira de fazer isso.

    Aqui está um script Bash que listará as unidades com sua taxa de E/S de leitura/gravação somada a cada segundo. Se uma unidade ou várias unidades estão deixando outras pessoas sem IO - elas podem ser identificadas como as que têm os números mais altos aqui:

    #!/bin/bash
    # hogs.sh - by Tobiasz 'unfa' Karoń - identify IO hogs in the system
    
    rm hogs.a hogs.b 2>/dev/null
    
    while [ 1=1 ]; do
        mv hogs.a hogs.b 2>/dev/null # store old data and make room for new data
    
        for i in /sys/block/sd*; do # cycle through all block devices
                    # sum two last fields of the stat data and put that into a file along with the drive handle
                    echo $(echo -n "$i" | cut -d'/' -f4; cat "$i/stat" | xargs| cut -d' ' -f 10-11 | tr ' ' '+' | bc) >> hogs.a
        done
    
        # sort files
        sort hogs.a > hogs.a2
        sort hogs.b > hogs.b2
        join hogs.a2 hogs.b2 > hogs.c # combine previous and current data into one file so we can calculate a difference
    
        rm hogs.d 2>/dev/null
        while read line; do
        echo "$(echo "$line" | cut -d' ' -f1) $(echo "$line" | cut -d' ' -f 2- | tr ' ' '-' | bc)" >> hogs.d
        done < hogs.c
    
        sort hogs.d > hogs # sort for the final output
    
        echo "max $(cat hogs | cut -d' ' -f2 | sort -n | tail -n1)" >> hogs # add the highest value
        echo "min $(cat hogs | cut -d' ' -f2 | sort -n | head -n1)" >> hogs # add the lowest value
    
        clear
        cat hogs # print the final output
        sleep 1
    
    done
    

    O script usa arquivos /sys/block/sd*/stat para exibir E/S/s para cada dispositivo de bloco presente no sistema. Eu não tenho certeza de que unidades são essas, mas se maldita funciona, e isso é tudo que me importa.

    Este foi um verdadeiro pesadelo. Teste de imagem de 40 unidades com f3 usando 4 hubs USB. Então tudo pára e você não sabe por quê. Se as unidades tiverem LEDs, geralmente os que deixam o resto de IO estão piscando enquanto o resto não - mas muitos módulos de memória flash não têm isso. Portanto, antes de encontrar isso, não havia como descobrir o que causa o problema.

    Observe que isso não é o que relata como taxa de leitura/gravação da unidade - essas leituras são incorretas para essas unidades com mau comportamento. Muitas vezes, todas as leituras estarão em zero, mas usando o script acima você pode distinguir os porcos desagradáveis ​​e removê-los para que o resto possa continuar.

    Finalmente!

    Aqui está a saída típica indicando um problema:

    insira a descrição da imagem aqui

    E aqui está como uma situação relativamente saudável se parece:

    insira a descrição da imagem aqui

    Quanto mais uniforme a distribuição - melhor. Talvez calcular o valor médio também ajude. A diferença entre o máximo e a média provavelmente pode indicar um problema.

    Observe que as capturas de tela não mostram sda, pois as tirei de uma versão diferente do script que listou apenas as unidades nas quais minha ferramenta de teste em massa opera.

    • 1

relate perguntas

  • Existe uma maneira de fazer ls mostrar arquivos ocultos apenas para determinados diretórios?

  • Inicie/pare o serviço systemd usando o atalho de teclado [fechado]

  • Necessidade de algumas chamadas de sistema

  • astyle não altera a formatação do arquivo de origem

  • Passe o sistema de arquivos raiz por rótulo para o kernel do Linux

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