Como diminuir o tempo que os processos esperariam (bloqueados) por leituras de disco (apenas para descobrir um erro)?

1

Esperar muito tempo ao encontrar um setor ilegível em um disco é realmente muito chato. (Especialmente se você estiver tentando ler quantos dados puder ser lido de um disco com setores defeituosos e fazer isso rapidamente, para backup e restauração).

Os relatórios do disco leem erros (erros de detecção).

O disco (ATA) pode ser configurado para que uma leitura com falha não demore muito, para que possa ser descartado, e o processo de leitura e o disco não sejam bloqueados e a próxima leitura possa ser tentada ?

Ou talvez o driver de disco do Linux possa ser configurado para isso?

Ou o processo de leitura no linux pode fazer algo para evitar leituras longas?

    
por imz -- Ivan Zakharyaschev 29.07.2014 / 21:30

2 respostas

2

Can the disk (ATA) be setup so that a failing read doesn't take too long, so that it can be dropped, and the reading process and the disk wouldn't be blocked, and the next read could be attempted?

Não.

Meu entendimento disso é que é um problema lógico resultante de uma escolha de design (não exclusiva do linux) que favorece o desempenho ea estabilidade do hardware em funcionamento, já que não se pode esperar que o SO lide com as infinitas possibilidades apresentadas por "possivelmente mal funcionamento ". Nós temos um Q & A sobre isso .

if you are trying to read as much data as can be read from a disk with bad sectors

Se são setores ruins, você está com sorte; desmontar as partições afetadas e (supondo que elas estejam formatadas) execute e2fsck -cy /dev/whatever nelas. A opção -c executa badblocks e adiciona endereços individuais a uma "lista de bloqueios inválidos" na partição; quando é posteriormente montado, o sistema nunca tentará acessá-los. Isso pode significar que você perdeu alguns dados; pedaços dele podem ser encontrados no diretório /lost+found . A opção -y evita que você diga "Sim, corrija" às perguntas do fsck, das quais pode haver muitas.

No entanto, se não forem blocos ruins (por exemplo, é um controlador com falha), você está sem sorte. Coisas quebradas, e é por isso que manter backups regulares de dados vitais é tão importante. Não tenho certeza se executar e2fsck -cy em um disco com um controlador quebrado pode piorar a situação, o que é algo a considerar, mas OTOH, se você não conseguir o que precisa de qualquer maneira, não terá nada a perder.

    
por 29.07.2014 / 21:51
1

A maioria dos sistemas Unix não implementou leituras assíncronas de discos locais; tentar a chamada resulta em leituras síncronas. Em particular, no Linux, o sleep para discos locais é ininterrupto (o que é irritante em CDs riscados).

Se o IO do disco local for interrompível em sua plataforma, você poderá usar alarm (); ler(); para definir o tempo máximo que você está disposto a esperar.

    
por 15.06.2016 / 17:11