Como o Linux md-RAID lida com erros de leitura de disco?

6

Existem dois casos:

  • o comando de leitura expira no nível do kernel (30 segundos por padrão),
  • o disco relata sua incapacidade de ler um determinado setor antes do kernel perder a paciência (o caso em que estou interessado).

Tempo limite do kernel

Como o acesso à unidade geralmente está passando pela camada SCSI do Linux, acho que o processo de tempo limite é completamente manipulado por essa camada. De acordo com esta documentação , tenta o comando várias vezes depois de ter reiniciado a unidade, depois o barramento, depois o host, etc. Se nada disso funcionar, a camada SCSI ficará off-line no dispositivo. Neste ponto, eu acho que a camada md apenas "descobre" que uma unidade se foi, e marcá-lo como ausente (falhou). Isso está correto?

Erro relatado na unidade

Algumas unidades podem ser configuradas para relatar um erro de leitura após um determinado tempo limite, abortando assim as tentativas internas de recuperação. Isso é chamado de ERC (ou TLER, CCTL). O tempo limite do disco geralmente é configurado para disparar antes do tempo limite do sistema operacional (ou controlador RAID hw), para que o último saiba o que realmente aconteceu em vez de apenas "aguardar e interromper".

A minha pergunta é: como o Linux (e md) lida com erros de leitura relatados pela unidade?

Será que ele tentará novamente, fazer algo inteligente ou apenas offline a unidade sem passar por todas as tentativas descritas em "Tempo limite do kernel" acima? É mesmo ciente quando tal coisa acontece?

Algumas pessoas sugerem que o ERC é perigoso no Linux, já que Não dê tempo suficiente para a unidade tentar se recuperar. Eles também dizem que o ZFS-raid é legal porque se ocorrer um erro de leitura, ele computará os dados do setor ilegíveis que faltam, graças à redundância RAID, e sobrescrevê-lo novamente na unidade. O último deve então parar de tentar ler o setor desagradável, marcá-lo automaticamente como ruim (para não ser mais usado) e refazê-lo em um bom setor sã.

O md também é capaz de fazer isso?

    
por Totor 03.11.2013 / 23:05

2 respostas

1

Isso é descrito com algum detalhe na página man md (4), seção RECOVERY .

[...] a read-error will instead cause md to attempt a recovery by overwriting the bad block. i.e. it will find the correct data from elsewhere, write it over the block that failed, and then try to read it back again. If either the write or the re-read fail, md will treat the error the same way that a write error is treated, and will fail the whole device.

Quanto a tempos de espera, embora haja relatos de que os drives tenham sido expulsos se estivessem em estado de espera, isso nunca aconteceu comigo. Eu tenho 7 HDDs que geralmente desaceleram (já que o sistema principal funciona sem SSD e pode passar sem acesso a HDD por longos períodos de tempo) e funciona sem problemas (exceto que md desperta uma unidade após a outra em vez de todas -at-once).

Acho que depende do que as outras camadas relatam para md .

    
por 06.11.2013 / 13:20
0

Quanto ao TLER ser perigoso, acho que não. Na verdade, ainda não consigo acreditar que esse recurso fosse necessário; nenhuma unidade deve demorar tanto tempo tentando. Mesmo apenas 7 segundos é suficiente para que até mesmo uma unidade lenta de 5400 rpm tente várias centenas de vezes. Se você não pode acertar depois de vários, muito menos várias centenas de tentativas, então você nunca vai.

    
por 26.03.2014 / 19:58