How to change hdd read error timeout

bad-sectorsdata-recoveryddrescuehard drivekernel

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

Best Answer

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.

Related Question