This is a complete guide describes how to rescue your data from old and wrecked HDD.

Suppose you are using macOS and your endangered disk is formatted with HFS+.

Beforehand

Inspect

Use diskutil list to verify that which drive is damaged.

This article assumes that disk2 is the damaged AND a partition disk2s2 is what you expected to be rescued. You don’t want to save disk2s1 that is usually EFI partition.

Damage Control

To prevent extra load, unmount the damaged disk: diskutil unmountDisk disk2.

Rescue

If you never been ddrescue, brew install ddrescue to install them on your machine.

cd /Volumes/AnotherDriveLargerThanDamagedDrive
sudo ddrescue -n -v /dev/disk2s2 ./hdimage.dmg ./mapfile

So this command will start rescuing your data from /dev/disk2s2 partition to hdimage.dmg while writing log to mapfile.

You might want to rescue data as fast as possible. option -n is here for. This will skip scraping phase that causes aggressive disk access.

Option -v stand for verbose logging.

sudo ddrescue -r5 -v /dev/rdisk2s2 ./hdimage.dmg ./mapfile

When the first command completed, do it again with different parameters to aggressively scrape bad area failed to access the first time.

Option -r5 means ddrescue will try rescuing damaged area for 5 times.

And /dev/disk2s2 become /dev/rdisk2s2 this time. r stand for raw so this will access the disk more direct way.

Beware: You MUST use same hdimage.dmg and mapfile between two commands. mapfile remains information of which blocks were rescued.

Aftercare

Mount hdimage.dmg and copy files and directories to a new drive. If the image is broken, you can recover it using testdisk.