krotuss,
As you say, ddrescue is about the best there is, even for SSDs.
It is HDD optimised. The tricks it uses to coax one last read from rotating rust will most likely fail.
ddrescue itself won't take days unless you refuse to accept defeat.
Do a normal default run first. That won't take much longer than reading the entire drive.
That recovers the maximum amount of data in the minimum time.
You must make the map file. At the end of the run, the recovered data will have 'holes' in, where the SSD could not be read. The map is a list of where the 'holes' are.
On subsequent runs, use the same map file. ddrescue will only try to fill the holes.
Post or pastebin the log file, along with the output of smartctl -x for the drive.
I had my first SSD fail the other day. /var was full of bad blocks. /var/db/pkg was broken, so portage had lost its mind but world was intact, so it could all be recreated in a new home.
Code: Select all
# Mapfile. Created by GNU ddrescue version 1.27
# Command line: ddrescue -b512 -O -d -A -r16 /dev/sdi /home/PiRouter.img /home/PiRouter.map
That Command line is the last command I gave ddrescue before I gave up.
Code: Select all
# pos size status
0x00000000 0x1863D000 +
0x1863D000 0x00002000 -
...
The first line, ending in + is a piece of recovered data, then than are two unrecovered 4k blocks ... so the map file continues.
Read the man page to see what those options do. I was surprised that making ddrescue try harder recovered more data after the first pass.
Its possible to mount the partitions in the drive image file and look round too.