Hello, I use ddrescue a lot to recover damaged disks, most of them are
WD (green and blue), I want to share my own experience because I believe
it can help improving your software
This story starts with a big 2TB green WD disk, which started to copy at
a rate of 32MB/sec with some (fast and very slow) peaks. It was a LOT of
data to recover so I spent 6 days running ddrescue constantly (and
checking it visually). I noticed sometimes when the reading speed
dropped (very very slow, about 1KB/sec or less) that by pressing CTRL-C
and re-running ddrescue the reading speed was fast again (sometimes fast
and sometimes very slow as before), so I tried modifying parameters as
sector size, block size, dynamic access, reverse direction, but such
modifications were not helpful, instead killing and starting ddrescue
again with default parameters every 7 seconds helped me to improve read
speed.
I didn't read ddrescue sources, so I don't know if it gots stucked on a
bottleneck when some read error is found, but the this experience made
me to create two bash files
1) rekill_recover.sh
#!/bin/bash
while :
do
echo "Killing again..."
killall ddrescue
sleep 12
done
(you can try 7-12-20 seconds, the block of time you detect as the best
to kill and rerun)
2) rerun_recover.sh
#!/bin/bash
while :
do
echo "Running again..."
ddrescue /dev/source /rescued.img /tmp/rescued_img.log
done
I used those scripts and I rescued (almost) the entire disk faster than
expected. I thought it was just luck
Two days ago I received a very damaged HDD WD (blue this time) with same
reading speed drops, I used those scripts again (each one in different
terminals obviously) and voilá, I got better reading speeds again, so my
"guess" is one of this two options
1) When I kill ddrescue, "he" forgets what was reading, ignores that
block and I lose data (but I BELIEVE this is not happening)
2) When I kill ddrescue, "he" forgets he was reading slowly and starts
again with all the power, energy and faith he can do the job
I think 2) is happening, and I want it too
I don't know if this can help you to improve your software, just sharing
my experience.
By the way, when I detect (visually) that the reading speed is
considerably fast again (more than 10MB/sec) I stop killing ddrescue for
a while, until I detect he stucks again and I start to call rekill script.
Maybe, maybe, maybe you can apply some of this experience on the sources
or by creating a simple bash script (I don't think can be better than
mine ;) with the ability to do some "smart-automagic"
kill-rerun-rekill-rerun depending on reading speeds
If you need to, I can provide with a secure shell connection to a
terminal with this second disk connected to check it for yourself. Or
perhaps by vnc, teamviewer, anything I can do to help you improving your
algorythm
Best regards
--
_______________________________
Santiago Cassina
Lic. en Análisis de Sistemas
M.P. 8064
Cel/Whatsapp: (0387) 154-752661
_______________________________________________
Bug-ddrescue mailing list
Bug-ddrescue@gnu.org
https://lists.gnu.org/mailman/listinfo/bug-ddrescue