ecp – fast copy, handling errors

ecp [ –bcprvZ ] [ –B block–size ] [ –e max–errors ] [ –i issect ] [ –o ossect ] [ –s sector–size ] sectors input output

Ecp copies sectors disk sectors of the specified input file to the specified output file. Ecp copies multiple sectors (a `block') at a time for speed. When ecp encounters an I/O error, it transfers the current block again, assuming the file is seekable, one sector at a time, prints the sector number(s) of the error(s), and continues copying.

Options are:
breblock input on short reads; this was used mainly when reading a pipe on standard input on 4.2+BSD systems.
Bsets the block size (16,384 bytes by default) to block–size.
cask for confirmation on /dev/cons before starting the copy.
esets a maximum number of consecutive I/O errors to permit at the beginning of the copy before quitting to max–errors. Lots of consecutive errors may indicate a deeper problem, such as missing media. By default there is no limit.
iseeks to sector issect (assuming zero–origin) before beginning input.
oseeks to sector ossect (assuming zero–origin) before beginning output.
pprint reassuring progress reports; helpful mainly when dealing with cranky hardware.
rcopy sector groups in reverse order, assuming the files are seekable; this is most useful when input and output overlap.
ssets the sector size (512 bytes by default) to sector–size.
vverify the copy by rereading the input and output files after copying all sectors. This is intended to force the disk to deliver the actual data written on it rather than some cached copy. The locations of any differences are printed.
Z`Swizzle' the input: stir the bits around in some fashion. Intended for diagnosing bad disks by copying a disk to itself a few times with swizzling on (to defeat caching in operating systems or disk controllers).

fcp in cp(1), dd(1), dup(3)

i, –o, –r, –v and error retries only work on devices capable of seeking.

The set of options reflects decades of experience dealing with troublesome hardware.

If the input file is a tape and the last record on the tape before a file mark is less than blocksize bytes long, then ecp will read through past the file mark and into the next file.