On some OSes dd is required for this sort of thing due to needing to use a block device and the kernel not dealing very well with writes not matching block sizes. cp and cat (well, the shell's output redirection algorithm, technically) assume that they can write as much or as little as they want in each individual operation, but with dd you can specify that the block size be a specific size. Linux has none of these problems, though, nor do any other modern Unices I can think of.
_________________________
Bitt Faulk