The gddrescue tool copies data from one file or block device (hard disc, cdrom, etc) to another, trying hard to rescue data in case of read errors.
gddrescue does not truncate the output file if not asked to. So, every time you run it on the same output file, it tries to fill in the gaps.
The basic operation of gddrescue is fully automatic. That is, you don't have to wait for an error, stop the program, read the log, run it in reverse mode, etc. If you use the logfile feature of gddrescue, the data is rescued very efficiently (only the needed blocks are read). Also you can interrupt the rescue at any time and resume it later at the same point.
Automatic merging of backups: If you have two or more damaged copies of a file, cdrom, etc, and run gddrescue on all of them, one at a time, with the same output file, you will probably obtain a complete and error-free file. This is so because the probability of having damaged areas at the same places on different input files is very low. Using the logfile, only the needed blocks are read from the second and successive copies.
The logfile is periodically saved to disc. So in case of a crash you can resume the rescue with little recopying. Also, the same logfile can be used for multiple commands that copy different areas of the file, and for multiple recovery attempts over different subsets.
gddrescue aligns its I/O buffer to the sector size so that it can be used to read from raw devices. For efficiency reasons, also aligns it to the memory page size if page size is a multiple of sector size.
Please note that this is the GNU ddrescue version providing the ddrescue executable. The package is named gddrescue because the ddrescue version of Kurt Garloff used to have the ddrescue package name already.