Ddrescue


GNU ddrescue is a data recovery tool. It copies data from one file or block device to another, trying hard to rescue data in case of read errors. GNU ddrescue is a program written in C++ that was initially released in 2004 and has since become available in most Linux distributions.

Description

GNU ddrescue is not a derivative of dd, nor is it related to dd in any way except in that both can be used for copying data from one device to another. The difference is that ddrescue uses a sophisticated algorithm to copy data from failing drives causing them as little additional damage as possible. GNU ddrescue 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.
If one uses the "mapfile" feature of ddrescue, the data is rescued very efficiently. One can also interrupt the rescue at any time and resume it later at the same point.
ddrescue does not write zeros to the output when it finds bad sectors in the input, and does not truncate the output file if not asked to. As such, every time one runs ddrescue on the same output file, it tries to fill in the gaps without wiping out the data already rescued.

Other uses

Automatic merging of backups: If one has two or more damaged copies of a file, CD-ROM, etc., and run ddrescue on all of them, one at a time, with the same output file, one will probably obtain a complete and error-free file. Using the mapfile, only the needed blocks are read from the second and successive copies.
ddrescue recommends lzip for compression of backups because the lzip format is designed for long-term data archiving and provides data recovery capabilities which nicely complement those of ddrescue.. If the cause of file corruption is damaged media, the combination ddrescue + lziprecover is the best option for recovering data from multiple damaged copies.
ddrescue also features a "fill mode" able to selectively overwrite parts of the output file, which has a number of interesting uses like wiping data, marking bad areas or even, in some cases, "repair" damaged sectors.