I used to do occasional linux recoveries for a place called Reynolds Data Recovery in Colorado. They weren't a mega-huge recovery company, but they got a few dozen drives every day and did good business. They used a collection of software - some proprietary utilities from the drive manufacturers, some commercial utilities. Also, some drives overheated, so they had a freezer that they could put a drive in, so it ran long enough to copy the data off it, also, they had clean rooms, so they could re-seat heads onto platters if they came off somehow, then they'd run the drive "open" until they could copy the data off. Other times, the electronics (controller card on the drive) were dead, so they had a huge shelf of working controller cards from every possible drive that you could think of. They'd pop the old card off, put in a known-working card, then copy the data off. The data would normally be returned on a 'loaner' drive that the customer would return or a new drive that the customer would pay for. RAIDs were hit-and-miss and sometimes they worked and sometimes they didn't. I'm not sure of any of the names of the software that they used, but it varied depending on how difficult the recovery was.
When I had to do linux recoveries, I slowly built-up a little distro of my own which had tons of tools on it. I'd have my 'distro' on a disk that they could plug in when they needed me to work on a linux disk, then I'd ssh into the machine remotely and work on the disk without having to drive in. I'd fix the partitions or the disk if it was possible and copy the data off onto a backup disk. There are some good tools availble in linux to do recoveries of things, but with the newer filesystems nowadays, it's more and more difficult to get anything off now. I'm not sure about SSD. Never had to deal with them yet. :) ext2, fat, vfat and memory cards, easy. reiserfs & ext3, much more difficult.