CDRECORD(1)

NAME
cdrecord - record audio or data Compact Discs from a master

SYNOPSIS
cdrecord [ general options ] dev=device [ track options ] track1...trackn

DESCRIPTION
Cdrecord is used to record data or audio Compact Discs on an Orange Book CD-Recorder.

The device refers to scsibus/target/lun of the CD-Recorder. Communication is done with the SCSI general driver scg. Possible syntax is: scsibus,target,lun or target,lun. In the latter case, the CD-Recorder has to be connected to the default SCSI bus of the machine.

Scsibus , target and lun are integer numbers. Scsibus 0 is the default SCSI bus on the machine. Watch the boot messages for more information or look into /var/adm/messages for more information about the SCSI configuration of your machine.

Each track corresponds to a single file that contains the prepared data for that track. If the argument is `-', standard input is used for that track.

GENERAL OPTIONS

General options must be before any track file name or track option.

-v  Be verbose during work, display the progress of the writing process.

-V  Be verbose in respect of SCSI command transport. This helps to debug problems during the writing process, that occur in the CD-Recorder. If you get incomprehensible error messages you should use this flag to get more detailed output.

-debug
    Print additional debug messages. This may help to find out problems with sector sizes and setor types.

-dummy
    The CD-Recorder will go through all steps of the recording process, but the laser is turned off during this procedure. It is recommended to run several tests before actually writing to a Compact Disk, if the timing and load response of the system is not known.

-multi
    Allow multi session CD's to be made. This flag needs to be present on all sessions of a multi session disk, except you want to create a session that will be the last session on the media. The fixation will be done in a way that allows the CD-Recorder to append additional sessions later. This is done by generation a TOC with a link to the next program area. The so generated media is not 100% compatible to manufactured CD's. Use only for recording a multi session CD. If this option is present, the default track type is CD-ROM XA mode 2.

-msinfo
    Retrieve multi session info in a form suitable for mkisofs-1.10.

-toc
    Retrieve and print out the table of content or PMA of a CD. With this option, cdrecord will work also with a CD-Rom drive.

-fix
    The disk will only be fixated (i.e. a TOC for a CD-Reader will be written). This may be used, if for some reason the disk has been written but not fixated.

speed=#
    Set the speed factor of the writing process to #. # is an integer, representing a multiple of the audio speed. This is about 151 KB/s for CD-ROM and about 175 KB/s for CD-Audio.

dev=target
    Sets the SCSI target for the CD-Recorder, see notes above.

TRACK OPTIONS

Track options may be mixed with track file names.

-audio
    If this flag is present, all subsequent tracks are written in CD-DA (similar to Red Book) audio format. The file with data for this tracks should contain stereo, 16-bit digital audio with 44100 samples/s. The byte order should be the following: MSB left, LSB left, MSB right, LSB right, MSB left and so on. The track should be a multiple of 2352 bytes. It is not possible to put the master image of an audio track on a raw disk because data will be read in multiple of 2352 bytes during the recording process.

-swab
    If this flag is present, audio data is swapped before writing to CD. This is needed on some types of CD-Writers e.g. Yamaha and probably Sony because they are using the wrong byte order for audio data (they are ignoring the fact that the SCSI-protocol otherwise correctly uses network byte order). In a future release cdrwite will know itself which CD-Recorder needs byte swapping.

-data
    If this flag is present, all subsequent tracks are written in CD-ROM mode 1 (Yellow Book) format. The data is a multiple of 2048 bytes. The file with track data should contain an ISO-9660 or Rock Ridge filesystem image (see mkisofs for more details). If the track data is an ufs filesystem image, fragment size should be set to 2 KB or more to allow CR-drives with 2 KB sector size to to be used for reading.

    -data is the default, if no other flag is present.

-mode2
    If this flag is present, all subsequent tracks are written in CD-ROM mode 2 format. The data is a multiple of 2048 bytes.

-xa1
    If this flag is present, all subsequent tracks are written in CD-ROM XA mode 1 format. The data is a multiple of 2048 bytes.

-xa2
    If this flag is present, all subsequent tracks are written in CD-ROM XA mode 2 format. The data is a multiple of 2048 bytes.

-cdi
    If this flag is present, all subsequent tracks are written in CDI format. The data is a multiple of 2048 bytes.

-isosize
    Use the ISO-9660 file system size as the size of the next track. This currently cannot be used to determine the size of a file system if the multi session option is present.

-pad
    If the track is a data track, 15 sectors of zeroed data will be added to the end of this and each subsequent data track. Use this if your CD-drive is not able to read the last sectors of a track. If the track is an audio track, cdrecord will pad the audio data to be a multiple of 2352 bytes. The audio data padding is done with binary zeroes which is equal to absolute silence.

-nopad
    Do not pad the following tracks - the default.

-preemp
    If this flag is present, all TOC entries for subsequent audio tracks will indicate that the audio data has been sampled with 50/15 µsec preemphasis. The data, however is not modified during the process of transferring from file to disk. This option has no effect on data tracks.

-nopreemp
    If this flag is present, all TOC entries for subsequent audio tracks will indicate that the audio data has been mastered with linear data - this is the default.

bytes=#
    If the master image for the next track has been stored on a raw disk, use this option to specify the valid amount of data on this disk. If the image of the next track is stored in a regular file, the size of that file is taken to determine the length of this track. The isosize program, usually included in the mkisofs distribution, can be used to determine the length of an ISO 9660 filesystem image.

EXAMPLES

For all examples below, it will be assumed that the CD-Recorder is connected to the primary SCSI bus of the machine. The SCSI target id is set to 2.

To record a pure CD-ROM at double speed, using data from the file cdimage.raw:

    cdrecord -v speed=2 dev=2,0 cdimage.raw

To create an image for a ISO 9660 filesystem with Rock Ridge extensions:

    mkisofs -R -o cdimage.raw /home/joerg/master/tree

To check the resulting file before writing to CD:

    mount -r -F fbk -o type=hsfs /dev/fbk0:cdimage.raw /mnt
    ls -lR /mnt
    umount /mnt

If the overall speed of the system is sufficient and the structure of the filesystem is not too complex, cdrecord will run without creating an image of the ISO 9660 filesystem. Simply run the pipeline:

    mkisofs -R /master/tree | cdrecord -v speed=2 dev=2,0 -

If your system is loaded, you should run mkisofs in the real time class too. To raise the priority of mkisofs replace the command

    mkisofs -R /master/tree
by
    priocntl -e -c RT -p 59 mkisofs -R /master/tree

on Solaris and by

    nice -18 mkisofs -R /master/tree

on SunOS.

Cdrecord runs at priority 59 on Solaris, you should run mkisofs at no more than priority 58. On SunOS, you should run mkisofs at no less than nice -18.

Creating a CD-ROM without file system image on disk has been tested on a Sparcstation-2 with a Yamaha CDR-100. It did work up to double speed. A faster machine may be able to handle quad speed also.

To record a pure CD-DA (audio) at single speed, with each track contained in a file named track01.cdaudio, track02.cdaudio, etc:

    cdrecord -v speed=1 dev=2,0 -audio track*.cdaudio

To check if it will be ok to use double speed for the example above. Use the dummy write option:

    cdrecord -v -dummy speed=2 dev=2,0 -audio track*.cdaudio

To record a mixed-mode CD with an ISO 9660 filesystem from cdimage.raw on the first track, the other tracks being audio tracks from the files track01.cdaudio, track02.cdaudio, etc:

    cdrecord -v -dummy dev=2,0 cdimage.raw -audio track*.cdaudio

SEE ALSO
mkisofs(1), scg(7), fbk(7).

NOTES
The current version of cdrecord will only record track at once Yellow Book Compatible Discs. If the so made disks contain more than one track, they are not suitable for direct mass production by CD manufacturers. You will need the disk at once option to record such disks. Nevertheless the disks made with cdrecord will normally be read in all CD players. Some old players however may produce a two second click between two audio tracks.

You should not use the -multi flag, unless you know that you really want to create a multi session CD. As cdrecord currently has no support to retrieve the first writable address for the next session, multi session CD's are currently not possible. We will need a modified mkisofs to do this according the Kodak Photo-CD spec.

The minimal size of a track is 4 seconds or 300 sectors. If you write smaller tracks, the CD-Recorder will add dummy blocks. This is not an error, even though the SCSI-error message looks this way.

Cdrecord has been tested on an upgraded Philips CDD-521 recorder at single and double speed on a SparcStation 20/502 with no problems, slower computer systems should work also. The newer Philips/HP/Plasmon/Grundig drives as well as Yamaha CDR-100 and CDR-102 work also. The Plasmon RF-4100 does not work. Although it uses the same drive mechanism as the Philips CDD-522, it has a different SCSI-processor and a different command set. A Philips CDD-521 that has not been upgraded will not work.

You should run several tests in single and double speed with the -dummy option turned on if you are using cdrecord on an unknown system. Writing a CD is a realtime process. You can currently not use cdimages that are located on NFS file systems. Nfs will not deliver constantly the needed data rates. I used cdrecord with with medium load on a SS20/502 and even at quad speed on a Sparcstation-2 which was heavily loaded, but it is recommended to leave the system as lightly loaded as possible while writing a CD. Cdrecord needs to run as root to get access to the /dev/scg? device nodes and to be able to lock itself into memory.

If you don't want to allow users to become root on your systen, cdrecord may safely be installed suid root. This allows all users or a group of users with no root privileges to use cdrecord. Cdrecord in this case checks, if the real user would have been able to read the specified files. To give all user access to use cdrecord, enter:

    chmod 4711 /usr/local/bin/cdrecord

To give a restricted group of users access to cdrecord enter:

    chmod 4710 /usr/local/bin/cdrecord
    chgrp cdburners /usr/local/bin/cdrecord

and add a group cdburners on your system.

Never give write permissions for non root users to the /dev/scg? devices unless you would allow anybody to read/write/format all your disks.

You should not connect old drives that do not support disconnect/reconnect to either the SCSI bus that is connected to the CD-Recorder or the source disk.

A Compact Disc can have no more than 99 tracks.

When creating a disc with both audio and data tracks, the data should be on track 1. CDplus has not yet been tested.

Many systems are not able to read more than a single data track, or need special software to do so.

More information on the SCSI command set of a HP CD-Recorder can be found at:

    http://www.hp.com:80/isgsupport/cdr/index.html

If you have more information or SCSI command manuals for other CD-Recorders than Philips CDD 522 or the HP drive mentioned above please contact the author.

The Philips CDD 521 CD-Recorder (even in the upgraded version) has several firmware bugs. Some of them will force you to power cycle the device or to reboot the machine.

DIAGNOSTICS

You have 9 seconds to type ^C to abort cdrecord after you see the message:

Starting to write CD at speed %d in %s mode for %s session.

A typical error message for a SCSI command looks like:

    cdrecord: I/O error. test unit ready: scsi sendcmd: no error
    status: 0x2 (CHECK CONDITION)
    Sense Bytes: 70 00 05 00 00 00 00 0A 00 00 00 00 25 00 00 00 00 00
    Sense Key: 0x5 Illegal Request, Code 0x25 (invalid lun) blk 0

The first line gives information about the transport of the command. The text after the first colon gives the error text for the system call from the view of the kernel. It usually is: I/O error unless other problems happen. The next words contain a short description for the SCSI command that fails. The rest of the line tell you if there were any problems for the transport of the command over the SCSI bus. fatal error means that it was not possible to transport the command (i.e. no device present at the requested SCSI address).

The second line gives information on the SCSI status code returned by the command, if the transport of the command succeeds. This is error information from the SCSI device.

The third line is a hex dump of the auto request sense information for the command.

The fourth line is the error text for the sense bytes if available. If the type of the device is known, the sense data is decoded from tables in scsierrs.c .

The following message is not an error:
    Track 01: Total bytes read/written: 2048/2048 (1 sectors).
    cdrecord: I/O error. flush cache: scsi sendcmd: no error
    status: 0x2 (CHECK CONDITION)
    Sense Bytes: F0 00 05 80 00 00 27 0A 00 00 00 00 B5 00 00 00 00 00
    Sense Key: 0x5 Illegal Request, Code 0xB5 (dummy data blocks added) blk -2147483609 valid

It simply notifies, that a track that is smaller than the minimum size has been expanded to 300 sectors.

BUGS

Cdrecord should verify that the input data will fit on the media. Currently you get unpredictable results in this case.

There should be an option to write index numbers for audio tracks.

There should be a recover option to make disks usable, that have been written during a power failure.

AUTHOR
Joerg Schilling
Seestr. 110
D-13353 Berlin
Germany

Mail bugs and suggestions to:

joerg@schily.isdn.cs.tu-berlin.de or js@cs.tu-berlin.de or jes@fokus.gmd.de