The Ydreniv Time

Introduction to ddrescue

, by Ydreniv

Let’s suppose one of your friends come to you with a computer issue. They’ve got a failing hard drive, and want to recover the data stored on their device. They are quite worried, as they have important files on it, and it’s their only copy. Of course, this would never happen to you, because you keep multiple encrypted backups of all your data, in multiple place. Only a worldwide apocalypse would get you a dataloss. So this definitely could only happen to a friend, or a family member, but not you. It would be preposterous to think otherwise.

So anyway, you want to copy the hard-drive. You quickly plug it in your computer, mount it and open the file explorer. But the mount takes a long time, accessing the files is very slow, and copying them does not always work. Plus, the SMART statistics show that this drive has issues. How do you extract the important data then ? By the look of it, the vast majority of the drive sectors are fine, so what you’re looking for still exists. It’s merely hard to access. It’s only a hardware problem.

If you manage to image the drive, you can then either use it as a mounted file, or burn it to another drive. You could use good old dd. Maybe this would work. But here, with your friend’s disk on its deathbed, you’d like a tool adapted for this situation. Here comes… ddrescue.

ddrescue operates on unmounted devices, and will copy a device block by block. Even better, it has error handling integrated. When it cannot read a block, it will either retry or pass it, depending on the options you’ve selected. And, crucially, it can store its status in a file, meaning that if you stop the process, you’ll be able to resume it later. This way, you can quickly recover all easily available blocks, while still retaining the ability to do several passes on the failing ones.

I’m still a novice in ddrescue, so read the Archlinux wiki page to get specific instructions. The Archlinux wiki is overall pretty good, and is one of my main source of help on Linux, even with other distributions. In my experiment, it has been able to recover all the disk’s sectors, except for 47 of them. I let it run for at least 50 hours I guess (I haven’t counted) over multiple sessions. I could probably try to make more passes, to eventually recover the full disk, but I’m not sure it’s worth it (and even possible).

It’s reassuring to know that I’ve now safeguarded most of the data. Now that I have a mostly complete image, I’ve started trying to read them. Unfortunately, the missing blocks do prevent me from simply mounting the resulting image. So I’ve still gotta do some work to actually get what I wanted (copying the files to another drive), but at least I know that the current image is safe, and that there shouldn’t be further data loss.

So if you’re confronted with data recovery, I recommend giving ddrescue a look. It’s quite a useful tool !