Ddrescue

GNU ddrescue is a data recovery tool for disk drives, CD-ROMs, and other digital storage media. It copies raw blocks of storage, such as disk sectors, from one device or file to another, while handling read errors in an intelligent manner to minimize data loss by "scraping" good sectors from partially read blocks.
GNU ddrescue is written in the C++ programming language, and is available as open-source software that was originally released in 2004. It is also available in binary form as a component in most Linux distributions.
Description.
ddrescue uses a sophisticated algorithm to copy data from disk drives, and other storage devices, causing as little additional damage, if they are failing, as possible. It is considered to have the most sophisticated implementation of a block-size-changing algorithm in free and open source software, and is considered an essential data recovery tool.
The status of the copy process is recorded in a "map file" (previously called "logfile") that aids in the progress of multiple stages of the recovery algorithm, and facilitates interrupting the recovery, and repeating it as needed to recover more data. The program does not write zeros to the output in place of bad blocks, so that additional errors not encountered previously do not destroy previously recovered blocks. This makes it possible to merge multiple defective copies of CD-ROMs or DVDs into one backup file. By virtue of the map file, only the needed blocks are read from the second and successive copies.
ddrescue also features a "fill mode", able to selectively overwrite parts of the output file, which has uses such as wiping data, marking bad areas or even, in some cases, repair damaged sectors.
Unrelated recovery tools.
GNU ddrescue is not a derivative of dd which also copies blocks of storage from disk storage, but does not operate in a strategic, algorithmic manner.
GNU ddrescue is also distinct from the similarly named program "dd_rescue".