readom - read or write data Compact Discs


   readom dev=device [ options ]


   Readom is used to read or write Compact Discs.

   The  device  refers to a device location similar to the one used in the
   wodim command. Refer to its manpage for details.

   Also note that this version of readom uses a modified  libusal  library
   which  has a different behaviour compared to the one distributed by its
   original author.


   If no options except the dev= option have been specified,  readom  goes
   into  interactive  mode.  Select a primary function and then follow the

          Print version information and exit.

          Sets the SCSI target for the drive, see notes above.  A  typical
          device  specification  is  dev=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
          be dev=/dev/rcd0.ctl:@ .

          On Linux, drives connected to a parallel port adapter are mapped
          to  a  virtual  SCSI  bus.  Different  adapters  are  mapped  to
          different targets on this virtual SCSI bus.

          If no dev option is present, readom will try to get  the  device
          from the CDR_DEVICE environment.

          If  the  argument  to  the  dev=  option  does  not  contain the
          characters ',', '/', '@' or ':', it is interpreted as  an  label
          name  that  may  be found in the file /etc/wodim.conf (see FILES

          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  no  timeout option is present, a default
          timeout of 40 seconds is used.

   debug=#, -d
          Set the misc debug value to # (with debug=#)  or  increment  the
          misc  debug  level  by  one  (with -d). If you specify -dd, this
          equals to debug=2.  This may help to find problems while opening
          a  driver  for libusal.  as well as with sector sizes and sector
          types.  Using -debug slows down  the  process  and  may  be  the
          reason for a buffer underrun.

   kdebug=#, kd=#
          Tell the usal-driver to modify the kernel debug value while SCSI
          commands are running.

   -silent, -s
          Do not print out a status report for failed SCSI commands.

   -v     Increment the level of general verbosity by one.  This  is  used
          e.g. to display the progress of the process.

   -V     Increment  the  verbose  level  with  respect  of  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.   -VV  will  show data buffer content in
          addition.  Using -V or -VV slows down the process.

   f=file Specify the filename where the output should be written  or  the
          input  should  be  taken  from. Using '-' as filename will cause
          readom to use stdout resp. stdin.

   -w     Switch to write mode. If this  option  is  not  present,  readom
          reads from the specified device.

          Scans  the  whole CD or the range specified by the sectors=range
          for C2 errors. C2 errors are errors that are uncorrectable after
          the  second  stage  of the 24/28 + 28/32 Reed 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  makes  2352 bytes out of 2048 data
          bytes. The ECC/EDC code should be able to correct about  100  C2
          error bytes per 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.

          Scan  all  SCSI devices on all SCSI busses and print the inquiry
          strings. This option may be used to find  SCSI  address  of  the
          devices  on  a  system.   The  numbers printed out as labels are
          computed by: bus * 100 + target

          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,  so  sectors=0-0 will not read anything and may be used to
          check for a CD in the drive.

          Set the speed factor of the read or write process to #.  # is an
          integer,  representing  a  multiple of the audio speed.  This is
          about 150 KB/s for CD-ROM and about 172 KB/s for  CD-Audio.   If
          no speed option is present, readom will 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.

   ts=#   Set  the  maximum  transfer size for a single SCSI command to #.
          The syntax for the ts= option is the same as for wodim  fs=#  or
          sdd bs=#.

          If  no  ts=  option  has  been  specified,  readom defaults to a
          transfer size of 256 kB. If libusal 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.

          Do not truncate the output file when opening it.

          Retrieve a full TOC from the current disk and print it in hex.

   -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 the f= option but the suffix .toc added.

          Do not abort if the high level error checking in readom found an
          uncorrectable error in the data stream.

          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.  If readom completes, the error recovery mode of
          the drive is switched back to the remembered old mode.

          Set  the retry count for high level retries in readom to #.  The
          default is to do 128 retries which may be too much if  you  like
          to read a CD with many unreadable sectors.

          Meter the SCSI command overhead time.  This is done by executing
          several commands 1000 times and printing the total time used. If
          you  divide  the  displayed  times  by 1000, you get the average
          overhead time for a single command.

          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  that  1000
          bytes  are one kilobyte as documented in the SCSI standard.  The
          output data created for this purpose is written to stdout.

          Output the speed values for  meshpoints=#  as  factor  based  on
          single  speed  of the current medium.  This only works if readom
          is able to determine the current medium type.


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

   To  read  the complete media from a CD-ROM writing the data to the file

       readom 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:

       readom dev=2,0 sectors=150-10000 f=cdimage.raw

   To  write  the  data from the file cdimage.raw (e.g. a filesystem image
   from genisoimage) to a DVD-RAM, call:

       readom dev=2,0 -w f=cdimage.raw


   RSH    If the RSH environment is present, the  remote  connection  will
          not be created via rcmd(3) but by calling the program pointed to
          by RSH.  Use e.g.  RSH=/usr/bin/ssh to  create  a  secure  shell

          Note  that  this  forces  wodim  to  create a pipe to the rsh(1)
          program and disallows  wodim  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.

   RSCSI  If the RSCSI environment is present, the remote SCSI server will
          not  be  the  program  /opt/schily/sbin/rscsi  but  the  program
          pointed  to  by RSCSI.  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.


   wodim(1), genisoimage(1), rcmd(3), ssh(1).


   Unless you want to risk getting problems, readom should be run as root.
   If you don't want to allow users to become root on your system,  readom
   may  safely  be  installed  suid  root.   For  more information see the
   additional notes of your system/program distribution or README.suidroot
   which is part of the Cdrkit source.

   Documentation  of  the  wodim  program  contains more technical details
   which could also apply to readom.


   A typical error message for a SCSI command looks like:

          readom: I/O error. test unit ready: scsi sendcmd: no error
          CDB:  00 20 00 00 00 00
          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, Segment 0
          Sense Code: 0x25 Qual 0x00 (logical unit not supported) Fru 0x0
          Sense flags: Blk 0 (not valid)
          cmd finished after 0.002s timeout 40s

   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 tells 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 prints the SCSI command descriptor block for the failed

   The third 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 fourth line is a hex dump of the auto request sense information for
   the command.

   The  fifth  line  is  the  error  text  for the sense key if available,
   followed by the segment number that is only valid if the command was  a
   copy  command.  If  the  error  message  is not directly related to the
   current command, the text deferred error is appended.

   The sixth line is the error text for  the  sense  code  and  the  sense
   qualifier  if available.  If the type of the device is known, the sense
   data is decoded from tables in scsierrs.c .  The text  is  followed  by
   the error value for a field replaceable unit.

   The  seventh line prints the block number that is related to the failed
   command and text for several error flags. The block number may  not  be

   The eight line reports the timeout set up for this command and the time
   that the command really needed to complete.


   The readom program described  here  is  the  Cdrkit  spinoff  from  the
   original  readcd  application  (see AUTHOR section for details). It may
   contain bugs not present in the original implementation.

   It is definitely less portable than the original implementation.

   For platform specific bugs, see the corresponding README.platform  file
   in the Cdrkit documentation (eg. README.linux).


   If you want to actively take part on the development of readom, you may
   join the developer mailing list via this URL:

   The mail address of the list is:


   Joerg Schilling
   Seestr. 110
   D-13353 Berlin

   This is application is a spinoff from the  original  implementation  of
   readcd   delivered  in  the  cdrtools  package  [1]  created  by  Joerg
   Schilling, who deserves the most credits for its success.  However,  he
   is  not  involved into the development of this spinoff and therefore he
   shall not be made responsible for any problem caused by it. Do not  try
   to get support from the original author!

   Additional information can be found on:

   If you have support questions, send them to

   If you have definitely found a bug, send a mail to this list or to

   writing  at  least  a  short description into the Subject and "Package:
   cdrkit" into the first line of the mail body.


   [1] Cdrtools 2.01.01a08 from May 2006,

More Linux Commands

tcpdmatch(8) - tcp wrapper oracle - Linux manual page.......
tcpdmatch predicts how the tcp wrapper would handle a specific request for service. Examples are given below. The program examines the tcpd access control table

fesetenv(3) - floating-point rounding and exception handling
These eleven functions were defined in C99, and describe the handling of floating-point rounding and exceptions (overflow, zero-divide, etc.). Exceptions The di

XF86VidModeSwitchToMode(3) - Extension library for the XFree
These functions provide an interface to the server extension XFree86-VidModeExtension which allows the video modes to be queried and adjusted dynamically and mo

XtAppGetExitFlag(3) - thread support functions (Man Page)...
To indicate that an application context should exit, use XtAppSetExitFlag. To test the exit status of an application context, use XtAppGetExitFlag. SEE ALSO X T

fsadm(8) utility to resize or check filesystem on a device
fsadm utility checks or resizes the filesystem on a device. It tries to use the same API for ext2, ext3, ext4, ReiserFS and XFS filesystem. OPTIONS -e, --ext-of

glDepthRange(3gl) - specify mapping of depth values from nor
After clipping and division by w, depth coordinates range from -1 to 1, corresponding to the near and far clipping planes. glDepthRange specifies a linear mappi

SDL_JoystickOpened(3) - Determine if a joystick has been ope
Determines whether a joystick has already been opened within the application. index refers to the Nth joystick on the system. RETURN VALUE Returns 1 if the joys

h_errno(3) - get network host entry - Linux manual page.....
The gethostbyname*(), gethostbyaddr*(), herror(), and hstrerror() functions are obsolete. Applications should use getaddrinfo(3), getnameinfo(3), and gai_strerr

git-check-ignore(1) Debug gitignore exclude files (ManPage)
For each pathname given via the command-line or from a file via --stdin, show the pattern from .gitignore (or other input files to the exclude mechanism) that d

netsnmp_init_mib(3) - netsnmp_mib_api functions (Man Page)
The functions dealing with MIB modules fall into four groups - those dealing with initialisation and shutdown, with reading in and parsing MIB files, with searc

lscpu(1) - display information on CPU architecture (ManPage)
lscpu gathers CPU architecture information from sysfs and /proc/cpuinfo. The command output can be optimized for parsing or for easy readability by humans. The

XcmsCIELab(3) - Xcms color structure - Linux manual page....
The XcmsColor structure contains a union of substructures, each supporting color specification encoding for a particular color space. SEE ALSO XcmsAllocColor(3)

We can't live, work or learn in freedom unless the software we use is free.