I'm testing my friends external HDD, which can't be accessed on Windows 7 - it installs as USB device, but does not mount. On linux, SMART readings show, that the disk has too many bad sectors, but I can still mount it and read the files (didn't try writing). I've started reading files using find . -type f and dd if={} of=/dev/null -bs=256k and I've found just a few files with I/O Errors. Unfortunately, there's also at least one path, that did not exist in the directory before (corrupted MFT).
Question is: What is the proper way to fix such partition corruption without losing data (apart from the already corrupted) and make it mountable on windows, so it wouldn't need linux to copy the data from?