John Wilson wrote:
The one problem I've had has been trying to
duplicate existing CDs in a
direct disk-to-disk copy, it seems to get caught off guard by the EOF, but
it does fine with regular files. This may be something to do with Linux's
sometimes vague notion of the size of raw devices (using llseek() to seek
to EOF doesn't always return a meaningful offset). The mkfs type programs
get around this by doing a binary search to read one byte at 64 different
spots, maybe more recent cdrecords have been updated to do this (I'm a
bit behind).
The problem with direct CD to CD-R copy is that the OS, device driver,
and even the CD-ROM drive do not have any reliable way to know how many
sectors there are on the source disc, unless they can rely on file
system data, i.e., the ISO 9660 header. If the disc isn't 9660, you'd
need some other way to tell.
On my system, I use a script I call cd2cdr to make copies of ISO 9660
discs:
#!/bin/sh
# direct disc-to-disc ISO-9660 CD copy
source=/dev/hdc
dest="0,6,0"
speed=8
cdrecord -v dev=$dest speed=$speed -pad -isosize $source
Obviously you'd need to modify the source, dest, and speed variables to
suit your system. The -pad option tells cdrecord to write some extra
empty sectors at the end, because some systems have trouble reading the
last few sectors of a track. The -isosize option tells cdrecord to
determine the size of the image from the ISO 9660 header.
When writing from an image file (of any sort, not just ISO 9660), you do
not need the -isosize header; cdrecord will use the file length.