I have been wondering whether this can be dealt with with the option -a or --min-read-rate= ... but the manual is so terse that I was not sure. Besides, I do not understand on what basis one should choose a read rate for this option. Should it be the above 18 MB/s?
A opção --min-read-rate=
deve ajudar. As unidades modernas tendem a gastar muito tempo na verificação interna de erros, portanto, embora a taxa fique extremamente lenta, isso não é relatado como uma condição de erro.
even after reading 50 GB of good disk with no problem.
O que também significa: você nem sabe mais se há problemas. A unidade pode ter um problema e decidir não denunciá-la.
Agora, ddrescue
suporta o uso de um valor --min-read-rate=
dinâmico, de info ddrescue
:
If BYTES is 0 (auto), the minimum read rate is recalculated every
second as (average_rate / 10).
Mas, na minha experiência, a configuração automática não parece ajudar muito. Uma vez que a unidade fica travada, especialmente se isso acontecer logo no início, eu acho que o average_rate nunca fica alto o suficiente para que seja eficaz.
Então, em uma primeira passagem, quando você quiser obter o máximo de dados possível, as áreas rápidas primeiro, basta defini-las como average_rate / 10
manualmente, average_rate sendo a taxa média da unidade se ela estiver intacta.
Então, por exemplo, você pode ir com 10M
aqui (para uma unidade que deve ir a ~ 100M / s) e então você pode sempre voltar e tentar a sua sorte com as áreas mais lentas depois.
the behavior I observed seems to me to be a bug.
Se você tem um bug, então você precisa depurá-lo. É difícil reproduzir sem o mesmo tipo de falha de unidade. Também poderia ser a própria unidade que está presa em algum modo de recuperação.
Ao lidar com unidades defeituosas, você também deve verificar dmesg
se houver alguma coisa estranha acontecendo, como redefinições de barramento e coisas do tipo. Alguns controladores também são piores em lidar com unidades com falha do que outros.
Às vezes, a intervenção manual não pode ser evitada.
Even then, I am surprised this is not done by default.
A maioria dos programas não vem com padrões normais. O dd
ainda usa blocos de 512 bytes por padrão, o que é a opção "errada" na maioria dos casos ... O que é considerado sensato também pode mudar com o tempo.
I am asking for facts that I need for my work, not opinions.
Ter bons backups é melhor do que depender de ddrescue
. Obter dados de uma unidade com falha é uma questão de sorte em primeiro lugar. A recuperação de dados envolve muita experiência pessoal e, portanto, opiniões.
A maioria das ferramentas de recuperação que temos também é estúpida. A ferramenta não tem um AI que reporta a um servidor central, e diz: "Ah, eu vi esse padrão de falha neste modelo de unidade particular antes, então vamos mudar nossa estratégia ...". Então essa parte tem que ser feita por humanos.