dd_rescue copies data from one file or block device to another. It is intended for error recovery, so by default, it doesn't abort on errors and doesn't truncate the output file. It uses large block sizes to quicken the copying, but falls back to small blocks upon encountering errors. It produces reports that allow you to keep track of bad blocks. dd_rescue features a number of optimizations, such as sparse block detection, preallocation, and Linux zerocopy (splice). It supports data protection by (multi-pass) overwriting of files or partitions with good and fast random numbers.