READCD(1)
๐ฟ NAME ๐ฟ
readcd(1) from Schilyยดs USER COMMANDS โ readcd โ read or write data Compact Discs or related madia. That's the whole vibe. ๐ฟโจ
๐ SYNOPSIS ๐
readcd [ dev=device ][ options ]
๐ฆ DESCRIPTION ๐ฆ
okay so readcd is used to read or write Compact Discs. That's the core. periodt. ๐
๐ Device naming ๐
Most users do not need to care about device naming at all. Literally. If no dev= option was specified, readcd implements auto target support and automagically finds the drive in case that exactly one CD-ROM type drive is available in the system. โจ
In case that more than one CD-ROM type drive exists on the system, a list of possible device name parameters may be retrieved with readcd -scanbus or from the target example from the output of readcd dev=help, then the dev= parameter may be set based on the device listing. iykyk. ๐
The device parameter to the dev= option explained below refers to the SCSI CAM standard notation for scsibus/target/lun of the CD/DVD/BluRay-Recorder. If a file /etc/default/cdrecord exists, the parameter to the dev= option may also be a drive name label in said file (see FILES section). ๐ซถ
โญ OPTIONS โญ
If no options except the dev= option have been specified, readcd goes into interactive mode. Select a primary function and then follow the instructions. It's giving choose-your-own-adventure but for your optical drive. ๐
๐ Informative options ๐
-helpโ display version information forreadcdon standard output. ๐-versionโ Print version information and exit. Bye bestie. โจ-vโ Increment the level of general verbosity by one. This is used e.g. to display the progress of the process. Morev= more lore. ๐
๐ฅ Readcd functional options ๐ฅ
-cloneโ Do a clone read. Read the CD with all sub-channel data and a full TOC. The full TOC data will be put into a file with similar name as with thef=option but the suffix.tocadded. ๐
Note that reading in clone mode results in having no error correction at sub-channel level. Even in the main data channel, there is less error correction than with other read modes. This results in a slightly quality degradation. Avoid copying audio CDs in clone mode for this reason. ๐ญ
-c2scanโ Scans the whole CD or the range specified by thesectors=rangefor C2 errors. C2 errors are errors that are uncorrectable after the second stage of the24/28 + 28/32Reed Solomon correction system at audio level (2352 bytes sector size). If an audio CD has C2 errors, interpolation is needed to hide the errors. If a data CD has C2 errors, these errors are in most cases corrected by the ECC/EDC code that makes2352 bytesout of2048 data bytes. The ECC/EDC code should be able to correct about100 C2 error bytesper sector. ๐ฉบ
If you find C2 errors you may want to reduce the speed using the speed= option as C2 errors may be a result of dynamic unbalance on the medium. ๐ช๏ธ
-cxscanโ Scans the whole CD or the range specified by thesectors=rangefor C1/C2/CU errors. In non-verbose mode, only a summary is printed. With-v, a line for each non error free second is printed. with-vv, a line for each second is printed. This scan method only works for a few drives. ๐ญ-edc-corrโ In this mode,readcdreads CD data sectors in uncorrected audio mode and then tries to correct the data using the ECC/EDC decoder library from Heiko Eissfeldt. As this library implements looping over two layers of error correction,readcdmay be able to correct more data than the firmware of the CD-ROM drive. ๐ง
This option is currently experimental and only applicable with CD media and currently only supports plain 2048 Byte CD-ROM sectors. ๐จ
f=fileโ Specify the filename where the output should be written or the input should be taken from. Using'-'as filename will causereadcdto use stdout resp. stdin. ๐ฏ-factorโ Output the speed values formeshpoints=#as factor based on single speed of the current medium. This only works ifreadcdis able to determine the current medium type. ๐งฎ-fulltocโ Retrieve a full TOC from the current disk and print it in hex. ๐ขmeshpoints=#โ Print read-speed at#locations. The purpose of this option is to create a list of read speed values suitable for e.g. gnuplot. The speed values are calculated assuming that1000 bytesare one kilobyte as documented in the SCSI standard. The output data created for this purpose is written to stdout. ๐-nocorrโ Switch the drive into a mode where it ignores read errors in data sectors that are a result of uncorrectable ECC/EDC errors before reading. Ifreadcdcompletes, the error recovery mode of the drive is switched back to the remembered old mode. ๐-noerrorโ Do not abort if the high level error checking inreadcdfound an uncorrectable error in the data stream. ๐-notruncโ Do not truncate the output file when opening it. ๐-overheadโ Meter the SCSI command overhead time. This is done by executing several commands1000 timesand printing the total time used. If you divide the displayed times by1000, you get the average overhead time for a single command. โฑ๏ธ-pi8scanโ Scans the whole DVD or the range specified by thesectors=rangefor pisum8 errors. In non-verbose mode, only a summary is printed. With-v, a line for each non error free block of8 * 32 kBis printed. with-vv, a line for each block of8 * 32 kBis printed. This scan method only works for a few drives. ๐ฟ-pifscanโ Scans the whole DVD or the range specified by thesectors=rangefor pif errors. In non-verbose mode, only a summary is printed. With-v, a line for each non error free block of32 kBis printed. with-vv, a line for each block of32 kBis printed. This scan method only works for a few drives. ๐-plotโ This option modified the behavior for-cxscan,-pi8scanand-pifscan. The output is better suited for gnuplot. ๐retries=#โ Set the retry count for high level retries inreadcdto#. The default is to do128retries which may be too much if you like to read a CD with many unreadable sectors. ๐sectors=rangeโ Specify a sector range that should be read. The range is specified by the starting sector number, a minus sign and the ending sector number. The end sector is not included in the list, sosectors=0-0will not read anything and may be used to check for a CD in the drive. ๐ฏspeed=#โ Set the speed factor of the read or write process to#.#is an integer, representing a multiple of the audio speed. This is about150 KB/sfor CD-ROM and about172 KB/sfor CD-Audio. If no speed option is present,readcdwill use maximum speed. Only MMC compliant drives will benefit from this option. The speed of non MMC drives is not changed. ๐
Using a lower speed may increase the readability of a CD or DVD. ๐ข
-wโ Switch to write mode. Writing is only possible to DVD-RAM media. For other media, usecdrecordinstead. Note thatcdrecordalso supports to write DVD-RAM media. โ๏ธ
If this option is not present, readcd reads from the specified device. ๐
๐ SCSI options ๐
dev=targetโ Set the SCSI target for the CD/DVD/BluRay-Recorder, see notes above. A typical target device specification isdev=1,6,0. If a filename must be provided together with the numerical target specification, the filename is implementation specific. The correct filename in this case can be found in the system specific manuals of the target operating system. On a FreeBSD system without CAM support, you need to use the control device (e.g./dev/rcd0.ctl). A correct device specification in this case may bedev=/dev/rcd0.ctl:@. ๐ฏ
๐งญ General SCSI addressing ๐งญ
The target device to the dev= option refers to the SCSI CAM standard notation for scsibus/target/lun of the CD/DVD/BluRay-Recorder. Communication on SunOS is done with the SCSI general driver scg. Other operating systems are using a library simulation of this driver. Possible syntax is: dev= scsibus,target,lun or dev= target,lun. In the latter case, the CD/DVD/BluRay-Recorder has to be connected to the default SCSI bus of the machine. Scsibus, target and lun are integer numbers. Some operating systems or SCSI transport implementations may require to specify a filename in addition. In this case the correct syntax for the device is: dev= devicename:scsibus,target,lun or dev= devicename:target,lun. If the name of the device node that has been specified on such a system refers to exactly one SCSI device, a shorthand in the form dev= devicename:@ or dev= devicename:@,lun may be used instead of dev= devicename:scsibus,target,lun. ๐ง
๐ Remote SCSI addressing ๐
To access remote SCSI devices, you need to prepend the SCSI device name by a remote device indicator. The remote device indicator is either REMOTE:user@host: or REMOTE:host:. A valid remote SCSI device name may be: REMOTE:user@host: to allow remote SCSI bus scanning or REMOTE:user@host:1,0,0 to access the SCSI device at host connected to SCSI bus # 1,target 0, lun 0. In order to allow remote access to a specific host, the rscsi(1) program needs to be present and configured on the host. ๐ฐ๏ธ
๐ Alternate SCSI transports ๐
Cdrecord is completely based on SCSI commands but this is no problem as all CD/DVD/BluRay writers ever made use SCSI commands for the communication. Even ATAPI drives are just SCSI drives that inherently use the ATA packet interface as SCSI command transport layer build into the IDE (ATA) transport. You may need to specify an alternate transport layer on the command line if your OS does not implement a fully integrated kernel driver subsystem that allows to access any drive using SCSI commands via a single unique user interface. ๐
To access SCSI devices via alternate transport layers, you need to prepend the SCSI device name by a transport layer indicator. The transport layer indicator may be something like USCSI: or ATAPI:. To get a list of supported transport layers for your platform, use dev= HELP:. ๐
Portability Background ๐ปโจ
okay so here's the whole portability situation, bestie. To make readcd portable to all UNIX platforms, the syntax dev= devicename:scsibus,target,lun is the preferred one โ because it hides all the OS-specific device-name lore from you ๐ซถ. Heads up tho: a specific OS may not necessarily support a way to specify a real device file name, and it also might not support a way to specify scsibus,target,lun at all. like, it's giving "we tried our best" ๐ญ.
Scsibus 0 is the default SCSI bus on the machine. Watch the boot messages for more info, or peek into /var/adm/messages for the deets about your machine's SCSI configuration ๐. And if you're struggling to figure out what values for scsibus,target,lun you should use, just try the -scanbus option of readcd described below โ it's literally your bestie for this ๐.
Using logical names for devices ๐ท๏ธ
If no dev option is present, readcd will try to get the device from the CDR_DEVICE environment variable.
If a file /etc/default/cdrecord exists, and if the argument to the dev= option or the CDR_DEVICE environment does not contain the characters ',', '/', '@' or ':', then it's interpreted as a device label name that was defined in the file /etc/default/cdrecord (see the FILES section ๐).
Autotarget Mode ๐ฏ
If there's no dev= option and no CDR_DEVICE environment present, or if it only contains a transport specifier but no address notation, readcd tries to scan the SCSI address space for CD-ROM drives. If exactly one is found, that one is used by default. main character energy honestly ๐.
debug=#,-dโ Set the misc debug value to # (withdebug=#) or increment the misc debug level by one (with-d). If you specify-dd, that equalsdebug=2. This may help you find problems while opening a driver for libscg, plus with sector sizes and sector types ๐. Using-debugslows down the process and may be the reason for a buffer underrun โ so like, don't leave it on for fun ๐.kdebug=#,kd=#โ Tell the scg-driver to modify the kernel debug value while SCSI commands are running.-scanbusโ Scan all SCSI devices on all SCSI busses and print the inquiry strings. This option may be used to find the SCSI address of the devices on a system โจ. The numbers printed out as labels are computed by:bus * 100 + target.scgopts=list โ A comma separated list of SCSI options that are handled by libscg. The implemented options may be updated independently from applications. Currently, one option โignore-residโ is supported, to work around a Linux kernel bug ๐.-silent,-sโ Do not print out a status report for failed SCSI commands. ๐คซtimeout=#โ Set the default SCSI command timeout value to # seconds. The default SCSI command timeout is the minimum timeout used for sending SCSI commands. If a SCSI command fails due to a timeout, you may try to raise the default SCSI command timeout above the timeout value of the failed command. If the command runs correctly with a raised command timeout, please report the better timeout value and the corresponding command to the author of the program ๐ซถ. If notimeoutoption is present, a default timeout of 40 seconds is used.ts=#โ Set the maximum transfer size for a single SCSI command to #. The syntax for thets=option is the same as forcdrecord fs=#orsdd bs=#.
If no ts= option has been specified, readcd defaults to a transfer size of 256 kB. If libscg gets lower values from the operating system, the value is reduced to the maximum value that is possible with the current operating system. Sometimes, it may help to further reduce the transfer size or to enhance it โ but note that it may take a long time to find a better value by experimenting with the ts= option ๐ญ.
-Vโ Increment the verbose level with respect to SCSI command transport by one. This helps to debug problems during the process that occur in the CD-Recorder ๐ฅ. If you get incomprehensible error messages, you should use this flag to get more detailed output.-VVwill show data buffer content in addition. Using-Vor-VVslows down the process.
๐ธ EXAMPLES ๐ธ
For all the examples below, it will be assumed that the drive is connected to the primary SCSI bus of the machine, and that the SCSI target id is set to 2 ๐ .
To read the complete media from a CD-ROM, writing the data to the file cdimage.raw:
readcd dev=2,0 f=cdimage.raw
To read sectors from range 150 ... 10000 from a CD-ROM, writing the data to the file cdimage.raw:
readcd dev=2,0 sectors=150-10000 f=cdimage.raw
To write the data from the file cdimage.raw (e.g. a filesystem image from mkisofs) to a DVD-RAM, call:
readcd dev=2,0 -w f=cdimage.raw
๐ฆ ENVIRONMENT ๐ฆ
RSHโ If theRSHenvironment is present, the remote connection will not be created viarcmd(3)but by calling the program pointed to byRSH. Use e.g.RSH=/usr/bin/sshto create a secure shell connection ๐.
Note that this forces cdrecord to create a pipe to the rsh(1) program, and disallows cdrecord to directly access the network socket to the remote server. This makes it impossible to set up performance parameters and slows down the connection compared to a root-initiated rcmd(3) connection. ngl, that's a tradeoff ๐ฌ.
RSCSIโ If theRSCSIenvironment is present, the remote SCSI server will not be the program/opt/schily/sbin/rscsibut the program pointed to byRSCSI. Note that the remote SCSI server program name will be ignored if you log in using an account that has been created with a remote SCSI server program as login shell ๐.
๐ AUTHOR ๐
Okay so the person behind all of this โ the mastermind, the main character, the one who literally wrote the thing โ is:
Joerg Schilling
Seestr. 110
D-13353 Berlin
Germany
Bestie, if you want even more info about him and the project, it's all sitting right here:
http://cdrecord.org/private/cdrecord.html
๐ got questions? got bugs?
Not me breaking this into vibes for you, because the mailing list situation is lowkey iconic and has rules:
- Support questions โ like, "how do I do the thing," "why is it doing this," general help-me energy โ send them to
cdrtools-support@lists.sourceforge.net - Definitely found a bug โ as in you're sure, no cap โ mail
cdrtools-developers@lists.sourceforge.netorjoerg.schilling@fokus.fraunhofer.de
And if you wanna subscribe (which, honestly, do it, iykyk):
https://lists.sourceforge.net/lists/listinfo/cdrtools-developers- or
https://lists.sourceforge.net/lists/listinfo/cdrtools-support
๐ซถ Pro tip from the manpage, not from me: the two lists are for two different things. Don't send your "it doesn't work on my laptop" to the bug list unless it's actually a bug. Respect the split, periodt.
โจ INTERFACE STABILITY โจ
Okay this part is actually kind of a flex. The interfaces that readcd gives you are designed for long term stability โ like, they're not gonna randomly change on you and break your scripts in six months. That's the dream. That's the vibe. ๐
BUT โ and here's the fine print, bestie โ readcd depends on interfaces provided by the underlying operating system. So the stability of the interfaces offered by readcd depends on the interface stability of the OS interfaces. Meaning:
- If your OS keeps its interfaces stable โ
readcdstays stable, slay ๐ - If your OS goes and modifies its interfaces โ that may enforce modified interfaces in
readcd
๐ญ So basically: readcd is stable, but it can't be more stable than the OS it's standing on. Chain of stability. The whole thing is only as iconic as the platform underneath it.
๐ธ and that's the whole page, bestie ๐ธ
This was readcd, Version 3.02, dated 2017/06/06 โ written by the one and only Joerg Schilling. Go read some discs, treat your OS interfaces kindly, and remember: every fact on this page stayed exactly where it was supposed to be. ๐โจ๐๐ฆ
๐ฆ where this page comes from
- arch rolling: cdrtools 3.02a09-6 ยท GPL-2.0-or-later AND LGPL-2.1-or-later AND CDDL-1.0
- Copyright 1996-2017 J. Schilling
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms