Reduz os tempos de repetição / espera de blocos danificados no Ubuntu

10

Como posso reduzir o tempo de espera de IO 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 uso para fazer cópias do conteúdo de demonstração que é emprestado aos clientes para os discos rígidos comuns de desktop SATA. Nós conectamos muitas unidades de uma vez via SAS e copiamos conteúdo para elas usando um script.

Como as unidades são emprestadas, ocasionalmente algumas voltam danificadas, mas não sei se estão danificadas, portanto, na próxima vez em que a unidade for reutilizada em uma operação de cópia, ela diminuirá a velocidade de outras unidades à medida que o sistema tentar novamente. essa unidade. Às vezes, pode levar horas até eu perceber a unidade defeituosa e removê-la. Depois que a unidade for removida, o restante das unidades começará a gravar na velocidade normal.

Eu não me importo em recuperar os discos ruins. Eu só preciso eliminá-los para que eles não diminuam todo o resto.

Eu também estou pesquisando badblocks e smartmontools e considerando escrever uma pré-verificação nas unidades antes de começar a escrever.

SO: Ubuntu Linux (12.04 lts)

    
por Ryan Sorensen 14.07.2014 / 23:44

2 respostas

7

Eu não usei este ajuste antes, mas você provavelmente quer ajustar o eh_timeout (tratamento de erros timeout) para o disco em questão:

[root@localhost device]# cat /sys/block/sda/device/eh_timeout
10
[root@localhost device]# 

O acima mostra sda definido para 10 segundos. Do Red Hat Knowledgebase:

In certain storage configurations (for example, configurations with many LUNs), the SCSI error handling code can spend a large amount of time issuing commands such as TEST UNIT READY to unresponsive storage devices. A new sysfs parameter, eh_timeout, has been added to the SCSI device object, which allows configuration of the timeout value for TEST UNIT READY and REQUEST SENSE commands used by the SCSI error handling code. This decreases the amount of time spent checking these unresponsive devices. The default value of eh_timeout is 10 seconds, which was the timeout value used prior to adding this functionality.

    
por 05.08.2014 / 05:27
2

Monitore /sys/block/<dev>/stat para os dispositivos nos quais você está interessado e compare o 10º parâmetro (io_ticks).

por exemplo, ticks = io_ticks - prev_ticks / seconds_deltatime / 10

Esta é a porcentagem de tempo disponível que o disco gastou aguardando pelo disco io.

Perto de 100% valeria a pena conferir, claro, ou então ficar realmente esperto e compará-lo com a média de todos os seus discos e pegar em qualquer disco (s) acima da média.

Veja a documentação sobre estatísticas da camada de bloqueio .

Além disso, use algo parecido com Munin e faça um gráfico. Você pode obter Munin para alertar se ele ultrapassar um limite, por exemplo, 90% ou qualquer que seja o seu gráfico mostra ser uma boa figura de alerta.

por exemplo, veja estes dois gráficos do Munin mostrando que o / dev / sdi precisa de olhar. Neste exemplo, se / dev / sdi for parte de uma matriz, toda a matriz sofreria por causa disso.

Se você olhar para 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 série 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 iria com um script se tivesse tempo, mas Munin se eu apenas quisesse uma solução rápida e conectá-lo ao servidor era fácil.

    
por 05.08.2014 / 13:13