Como posso reduzir o tempo de espera de E / S e os tempos de nova tentativa para que o sistema operacional não tente gravar continuamente em uma unidade com falha?
Eu tenho um sistema que eu uso para fazer cópias de conteúdo demo que são emprestadas aos clientes em discos rígidos de desktop SATA comuns. Conectamos várias unidades ao mesmo tempo via SAS e copiamos o conteúdo para elas usando um script.
Como as unidades são emprestadas, ocasionalmente algumas voltam danificadas, mas eu não sei se elas estão danificadas; portanto, na próxima vez em que a unidade for reutilizada em uma operação de cópia, ela desacelera outras unidades à medida que o sistema tenta E / S novamente nessa unidade. Às vezes, pode levar horas até eu notar a unidade defeituosa e removê-la. Depois que a unidade é removida, o restante começa a gravar na velocidade normal.
Eu não ligo para recuperar as unidades defeituosas. Eu só preciso eliminá-los para que eles não diminuam o ritmo.
Também estou pesquisando badblocks e smartmontools e considerando a possibilidade de escrever uma pré-verificação nas unidades antes de começar a escrever.
Sistema operacional: Ubuntu Linux (12.04 lts)
udisks
/smartmonctl
? Um problema XY clássico aqui, acho.ddrescue
que ele nem toque nos setores informados pela SMART.)Respostas:
Eu não usei esse ajuste antes, mas você provavelmente deseja ajustar o eh_timeout (tempo limite de tratamento de erros) para a unidade em questão:
O exemplo acima mostra
sda
definido para 10 segundos. Da Base de Conhecimento da Red Hat:fonte
eh_timeout
mas mudeitimeout
para realizar a tarefa em questão.Monitore
/sys/block/<dev>/stat
os dispositivos de seu interesse e compare o 10º parâmetro (io_ticks).por exemplo,
ticks = io_ticks - prev_ticks / seconds_deltatime / 10
Essa é a porcentagem de tempo disponível que o disco gastou aguardando o disco io.
Vale a pena verificar quase 100%, é claro, ou fique realmente esperto e compare-o com a média de todos os seus discos e escolha qualquer disco acima da média.
Veja a documentação estatística da camada de blocos .
Caso contrário, use algo como Munin e faça um gráfico. Você pode alertar Munin se ultrapassar um limite, por exemplo, 90% ou o que o gráfico mostrar for um bom valor de alerta.
por exemplo, veja estes dois gráficos de Munin mostrando que / dev / sdi precisa ser visualizado. Neste exemplo, se / dev / sdi fizer parte de uma matriz, toda a matriz sofrerá por causa disso.
Se você olhar o gráfico da semana, verá que / dev / sdc também pode ser lento.
Devo acrescentar que / dev / sdi acima não está quebrado, é apenas um disco lento (na verdade, um disco verde que alguém adicionou a uma matriz de discos sata de nível corporativo) que reduziu a velocidade da matriz. Um disco com falha real se destacaria como um polegar dolorido.
Em resumo, eu provavelmente usaria um script se tivesse tempo, mas Munin se quisesse apenas uma solução rápida e a conexão com o servidor era fácil.
fonte