I'm recovering data from an hdd using ddrescue. With "retry" disabled, it takes roughly 30 seconds for every unreadable sector. The hdd has tens of thousands of bad sectors and the process is taking forever.

Can I shorten the read error timeout to, say, 3 seconds? Perhaps with ATA commands? Kernel options? Firmware hacks?

smartctl info:

Device Model:     Hitachi HTS542525K9A300
Firmware Version: BBFOC3EP
User Capacity:    250,059,350,016 bytes
ATA Version is:   8
ATA Standard is:  ATA-8-ACS revision 3f
  • Sorry to comment on such an ancient question. Did you ever find a solution to your problem? Jul 16 '14 at 0:54
  • Unfortuntely, no
    – netvope
    Sep 21 '14 at 2:00

On linux, /sys/block/<deviceName>/device/timeout (such as /sys/block/sda/device/timeout) is the timeout setting in seconds, which currently defaults to 30.

In the same directory, there is a eh_timeout value which is used for the SCSI commands TEST UNIT READY and REQUEST SENSE, so isn't what you're looking for.

As root, echo 1 > /sys/block/<deviceName>/device/timeout will change the timeout to 1 second. (Or, echo 3 for your 3 second example.)

As a non-root user, with sudo privileges, sudo bash -c "echo 1 > /sys/block/<deviceName>/device/timeout" will do the same.

  • 2
    Thanks! I just used this successfully to reduce the wait time for using ddrescue on a USB connected SD card with several bad blocks. Nov 9 '17 at 5:29

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.