O programa que o "causou" (na verdade, é causado por hardware ruim, seria mais apropriado dizer que "o programa que foi vítima dele") pode nem existir mais.
Por exemplo, envie uma gravação e saia. A gravação ficará nos buffers do kernel até que o kernel execute writeback. Nesse ponto, pode ocorrer um erro de E / S.
Quando o programa ainda existe, ele já será informado do erro. Por exemplo, read
definirá errno
para EIO
. (Esse erro também pode voltar de write
, fsync
, fdatasync
ou mesmo close
.)
O motivo que leva para sempre não tem nada a ver com o kernel, é inteiramente a unidade. A unidade gasta um tempo tentando ler novamente para ver se consegue entender o setor corrompido. Se você não quer isto (por exemplo, porque você está rodando em RAID, e irá apenas reprogramar o setor para o espelho do disco) você pode tentar alterar as configurações do SCT Error Recovery Control usando smartctl. Tenha em atenção que muitos discos não empresariais não suportam isto.
Exceto no caso de RAID (ou similar), não há como corrigi-lo automaticamente. Os dados foram perdidos. O kernel não pode consertar isso.
Se você estiver executando o RAID de software do Linux (mdraid), mesmo com um kernel meio recente, o mdraid corrigirá automaticamente lendo o setor com erro do espelho e gravando o setor correto de volta na unidade com um erro de leitura .
Se você está fazendo isso em um write em vez de em read , substitua a unidade.
(BTW: READ FPDMA QUEUED não é um erro. É apenas o comando (S) ATA que falhou. "Erro Médio" é o erro.)