1. Home
  2. Tutorials
  3. Burning a CD / DVD
Yolinux.com Tutorial

 

YoLinux Tutorial: Burning a CD or DVD

Using command line and GUI interfaces to burn/rip a CD or DVD.

 

It is typically easiest to use one of the GUI programs to burn a data or audio CD. These are typically graphical front ends to the command line programs cdrecord. My favorite for ease of use and creating / copying CD's is X-CdRoast.

Data CD's require that a file system image be generated prior to burning. This is typically the ISO-9660 CD standard. (And there are many non-standard variants and extensions.)

CD's can be burned in DAO (Disk At Once) or TAO (Track At Once) mode. The only reason to use DAO mode is when burning audio CD's. Audio CD's burned TAO will have 2 second gaps between tracks. If one is copying an entire CD, TAO mode will introduce these 2 second gaps if they do not already exist. DAO mode uses a raw CD access mode and can avoid these gaps between tracks.

DVDs allow for greater storage and also support additional formats for video.

This tutorial will cover audio and data CD and DVD copying, generation and burning software applications. Rip or burn a data backup CD or DVD on linux with ease.

Tux burning a CD
Terms and definitions:

Term Description
CD-R CD-Recordable. Write Once, Read Many. (WORM)
CD-RW CD-Rewritable. Write Many, Read Many.
ISO-9660 DOS compatible file system (8.3 character file names) for CD's. Requires extensions like "Rock Ridge" to fully support UNIX/Linux
Rock Ridge ISO-9660 extension to allow long file names, UNIX symlinks and file protection (rwx). Windows readable.
Joliet Microsoft extension to ISO-9660. Creates MS/Windows 95 like 8.3 file names with translation to 64 character names.
Multisession Allows adding/writing files at a later time. Session must be closed before it is readable.
DAO Burn entire audio CD at once in a single burn. It's the only way to avoid delays between tracks
TAO Burn a track at a time. Results in 2 second delay between audio tracks.

GUI Front Ends for CD Burning:

GNOME: Using the Nautilus desktop "file manager" to burn a data CD:

Within the Nautilus file manager is "CD Creator".

Note: Some systems require that you be root. Also see the YoLinux.com Managing groups tutorial to configure a system to grant users CD privileges.

File or directory backup:

  • Launch "CD Creator" using one of the following methods:
    1. Insert blank CD-R(W), Nautilus "CD Creator" will appear
    2. Type the URL "burn:///" in Nautilus.
    3. From the Nautilus toolbar select "Go" + "CD Creator".
  • Select the "Home Folder" within the tree portion of the GUI
    OR: launch a new instance of the Nautilus file manager by double clicking the "Home" icon on the desktop.
    Select files and directories to back-up. Use ctrl key for multiple selections.
    Right click to bring up an options menu and select "Copy File". (or Cut, ...)
  • Select the "Blank CD-R Disk:" item in the "Tree"
    OR: If using two Nautilus windows, drag files/directories to the "CD Creator" window.
    Right click to bring up an options menu and select "Paste Files".
    [Potential Pitfall]: When the blank CD is inserted into the drive, Nautilus should start with a CD showing no contents. If the contents from the last burn remail listed, select them and press the "delete" key to remove the listing.
  • Select the "Write to Disc" button.
  • This will launch a new dialog box "Write to Disc".
    Select the "Write" button:
  • This will burn a CD with the contents you dropped in the "Blank CD-R Disc" branch of the Tree menu.


CD/DVD system behavior configuration for the Gnome desktop:

Set system behavior using the Gnome command gnome-volume-properties

Command line CD burning and support routines: Info, Downloads and Command line examples

Downloads:

Getting Ready:

Note: Use the command cdrecord -scanbus to scan your SCSI bus to determine the device description. (i.e. 0,4,0). This will perform a scan and provide results for real SCSI systems or for the virtual SCSI subsystem Linux uses with IDE CD/DVD's.

Examples:

  • SCSI CD system:
    #  cdrecord -scanbus
    Cdrecord 1.8 (i686-pc-linux-gnu) Copyright (C) 1995-2000 Jorg Schilling
    Using libscg version 'schily-0.1'
    scsibus0:
    	0,0,0	  0) 'SEAGATE ' 'ST36530W        ' '1498' Disk
    	0,1,0	  1) 'SEAGATE ' 'ST39173W        ' '6244' Disk
    	0,2,0	  2) *
    	0,3,0	  3) *
    	0,4,0	  4) 'HP      ' 'CD-Writer+ 9200 ' '1.0c' Removable CD-ROM
    	0,5,0	  5) *
    	0,6,0	  6) *
    	0,7,0	  7) *
    
                 

  • CD/DVD ATA system: This will report on your SCSI device name to use when burning a CD. In this case "ATA".
    # cdrecord -scanbus
    Cdrecord-Clone 2.01-dvd (--) Copyright (C) 1995-2004 Jorg Schilling
    ...
    scsidev: 'ATA'
    devname: 'ATA'
    scsibus: -2 target: -2 lun: -2
    Linux sg driver version: 3.5.27
    Using libscg version 'schily-0.8'.
    cdrecord: Warning: using unofficial libscg version (schily Red Hat-scsi-linux-sg.c-1.83-RH 
    scsibus1:
            1,0,0   100) '_NEC    ' 'DVD_RW ND-2510A ' '2.15' Removable CD-ROM
            1,1,0   101) *
            1,2,0   102) *
            1,3,0   103) *
            1,4,0   104) *
            1,5,0   105) *
            1,6,0   106) *
            1,7,0   107) *
                   

[Potential Pitfall]: You may have to be root to access the CD with the appropriate permissions.

Cdrecord 1.10 (i686-pc-linux-gnu) Copyright (C) 1995-2001 Jorg Schilling
cdrecord: Permission denied. Cannot open '/dev/sg0'. Cannot open SCSI driver.
cdrecord: For possible targets try 'cdrecord -scanbus'. Make sure you are root.
      

Note:

  • Linux Kernel 2.2 and 2.4 use SCSI emulation when accessing an IDE/ATAPI CD drive. See "IDE and Linux Kernel considerations" below.
    Example device reference: dev=0,4,0
  • Linux kernel 2.6 allows one to directly access ATAPI. Prefix the device name with "ATAPI:".
    Example device reference: dev=ATAPI:0,4,0
  • To get a list of supported devices: cdrecord dev=HELP
    i.e.: ATAPI, ATA, RSCSI (remote scsi)

YoLinux SCSI tutorial


Note:

  • Data CD's must be mounted before one may access them. The CD may be mounted by:
    • The automounter
      OR
    • The graphical mounting tool "Start" + "System" + "Disk Management" + "Mount"
      OR
      /usr/bin/usermount
      OR
    • The mount command:
      • Red Hat 7/8/9: mount -r -t iso9660 /dev/cdrom /mnt/cdrom
      • Fedora Core 3 (kernel 2.6): mount -r -t iso9660 /dev/hdc /media/cdrecorder
        Note: Fedora Core 3 is using /media as a mount point for floppy drives, CD-ROMs and DVDs.

      This command should work for a Red Hat installation. Other distributions may require the set-up as described in the YoLinux Sys Admin Tutorial - Mounting a CD.

    Don't forget to un-mount the CD with umount /mnt/cdrom
    [Potential Pitfall]: There is NO "N" in umount!!!

  • It is often required that the user be root in order to perform these functions. Switch user using the command "su -" then enter the appropriate password.

CD burning: Command line examples

Run the CD burning commands as root as this is typically the only user on the system with privileges to burn a CD. One may also configure user groups and permissions to grant access for a user to burn a CD. See the YoLinux tutorial Managing Group Access.

Use the command "cdrecord" as described above to obtain entries for the "dev" and "--device" command line arguments.

Data CD's will require that you create the ISO image first (use command mkisofs) and then burn the ISO image onto the CD (use command cdrecord). See mkisofs instructions below.

Examples:

  • If you download an ISO CD image from the internet (i.e. a Linux CD) for your favorite Linux distro or possess a CD you wish to copy:
    1. Create ISO image file:
      • Copy a data CD (fast): cat /dev/scd0 > RedHat-7.0-i386-powertools.iso
        or
      • Mount CD to copy: mount -t iso9660 -o ro /dev/cdrom /mnt/cdrom
        (Fedora core 3 (kernel 2.6): mount -t iso9660 -o ro /dev/cdrom /media/cdrecorder)
        Create ISO file image copy of CD: mkisofs -r -o RedHat-7.0-i386-powertools.iso /mnt/cdrom

    2. Burn ISO image onto CD:
      • Linux 2.6 kernel: cdrecord -v -eject speed=16 dev=ATA:1,0,0 RedHat-7.0-i386-powertools.iso
      • Linux 2.4 kernel: cdrecord -v speed=2 dev=0,4,0 RedHat-7.0-i386-powertools.iso

    (Tip: Mounting the raw ISO file: mount -t iso9660 -o loop /home/user1/RedHat-9.0-i386-Disk1.iso /mnt/iso-1)

  • Backup a directory to a CD:
    • One step: mkisofs -r -R -J -l -L /home/user1 | cdrecord dev=0,4,0 -v --eject speed=4 -
    • or the two step variation of the process:
      1. mkisofs -r -R -J -l -L -allow-multidot -o /tmp/backup.iso -graft-points "/home/user1=/home/user1"
      2. cdrecord dev=0,4,0 -v --eject speed=4 /tmp/backup.iso
    The "mkisofs" command is covered in detail below.
    Make sure directory does not hold more than CD capacity (700Mb typically). Check with the command: du -s /home/user1

  • Copy a data CD:
    Mount CD to copy (kernel 2.4): mount -t iso9660 -o ro /dev/cdrom /mnt/cdrom
    (Linux kernel 2.6: mount -t iso9660 -o ro /dev/cdrom /media/cdrecorder)
    Create ISO file image copy of CD: mkisofs -r -R -J -l -L -o /tmp/cd-iso-image-file.iso /mnt/cdrom
    Unmount: umount /mnt/cdrom (or umount /media/cdrecorder)
    Load blank CD to burn.
    Burn CD examples:
    • Linux kernel 2.4: cdrecord -v speed=2 dev=0,4,0 -data /tmp/cd-iso-image-file.iso
      (SCSI bus 0, device 4, lun 0)
    • Linux kernel 2.6: cdrecord -v speed=2 dev=ATA:1,0,0 /tmp/cd-iso-image-file.iso
      Note: The flag -data is default unless audio file extensions .au or .wav are used which defaults to -audio.

  • Burn a multisession CD:
    This is easiest with X-CdRoast which can perform the necessary calculations but it can also be done via the command line.
    cdrecord -v -eject speed=4 dev=0,4,0 -multi cd-iso-image-file-1.iso
    The CD is left in a mode which will allow it to receive more data.
    To append data one must know where the last burn left off:
    cdrecord dev=0,4,0 -msinfo
    This will give you the starting and ending track numbers. i.e.: 0,16774. Use this result in mkisofs.
    mkisofs -J -r -V SecondBurn -o cd-iso-image-file-2.iso -C 0,16774 -M 0,4,0 directory-with-files-to-add
    The TOC from the first and second session will be combined.
    Note: Omit the option "-multi on the final burn.

  • Copy then burn single audio tracks TAO:
    cdda2wav -D 0,4,0 -B /tmp/prefix-of-music-files
    The files will be written out as /tmp/prefix-of-music-files_01.inf /tmp/prefix-of-music-files_01.wav /tmp/prefix-of-music-files_02.inf ...
    • Linux 2.6 kernel: cdrecord -v speed=2 dev=ATA:1,0,0 -audio /tmp/prefix-of-music-files*.wav
    • Linux 2.4 kernel: cdrecord -v speed=2 dev=0,4,0 -audio /tmp/prefix-of-music-files*.wav

  • Burn audio tracks DAO:
    Copy to hard drive:
    cdda2wav -D 0,4,0 -g -O wav -S 1 -v30 -P 0 -n 75 -B /tmp/CD/track-01.wav /tmp/CD/track-02.wav ...
    Burn CD:
    • Linux 2.6 kernel: cdrecord dev=ATA:1,0,0 fs=4096k -v -useinfo speed=1 -dao -eject -pad -audio "/tmp/CD/track-01.wav" ...
    • Linux 2.4 kernel: cdrecord dev=0,4,0 fs=4096k -v -useinfo speed=1 -dao -eject -pad -audio "/tmp/CD/track-01.wav" ...

  • Burn WAV files:
    • Linux 2.6 kernel: cdrecord dev=ATA:1,0,0 -eject speed=16 -pad -audio *.wav
    • Linux 2.4 kernel: cdrecord dev=0,4,0 -eject speed=2 -pad -audio *.wav

  • Copy then burn audio CD's DAO (two drives): See cdrdao examples
    Copy the CD from the reader (SCSI 3) and burn on the Read/Writer (SCSI 4):
    cdrdao copy --source-device 0,3,0 --device 0,4,0 --buffers 64
    OR
    cdrdao copy --source-device 0,3,0 --source-driver generic-mmc-raw --device 0,4,0 --driver generic-mmc-raw --buffers 64 toc-file.toc

  • Copy audio CD DAO with one CD drive:
    cdrdao copy --device 0,4,0 --buffers 64 --driver generic-mmc-raw --read-raw toc-file.toc
    This will prompt you to insert the CD-R after an image of the source CD was created. ("Please insert a recordable medium and hit enter") The image file with name "cddata<pid>.bin" will be created in the current working directory. (file removed when done)

  • Extract audio image from CD:
    cdrdao read-cd --device 0,4,0 --buffers 64 --driver generic-mmc-raw --read-raw toc-file.toc
    Creates file data.bin and table of contents file toc-file.toc. This is NOT a fast process.

  • Finalize a disk:
    • CD: cdrecord -fix -dev=/dev/cdrw
    • DVD: cdrecord -fix -dev=/dev/dvdrw

    [Potential Pitfall]: You may get the following error if mounted:

    $ sudo cdrecord -fix -dev=/dev/cdrw
    [sudo] password for user1:
    Error trying to open /dev/cdrw exclusively (Device or resource busy)... retrying in 1 second.
    Error trying to open /dev/cdrw exclusively (Device or resource busy)... retrying in 1 second.
    Error trying to open /dev/cdrw exclusively (Device or resource busy)... retrying in 1 second.
            
    Unmount the device first: sudo umount /media/CDROM

Notes on CD burning:

  • Audio CD's do not have a file system thus they cannot be mounted, just read. Audio CD's can represent frequencies up to 22.05 kHz and at a sample rate of 44.1 kHz.

  • ISO 9660 refers to a data CD storage format and not to the standard audio CD.

  • Don't run any applications while burning as this can lead to buffer under-run condition if your PC was not able to allocate enough time to processing the burn. This will then create a useless CD.

  • I use a SCSI CD but for those that are using IDE you may be required to add the following entry to the end of /etc/lilo.conf and execute lilo -v. This allows linux to use a SCSI interface to the IDE CD drive.
    append = "hdb=ide-scsi" (loads kernel loadable module: /lib/modules/2.X.XX-XX/kernel/drivers/scsi/ide-scsi.o)
    OR
    at the lilo boot prompt enter linux hdb=ide-scsi

  • Want to hear that wav file to make sure it is the right song?
    play file_01.wav

  • Assign a higher priority to the process burning the CD: nice -18 cdrecord ...
    Where the priority range is 19 (lowest) to -20 (highest). Default is 10.

  • Device defaults can be found in the configuration file: /etc/cdrecord.conf
    The default speed can be set: CDR_SPEED=4

Re-Writing a CD-RW:

The re-writable CD can be "blanked" before re-burning. (optional)

  • Using XCdRoast GUI:
    • "Create CD"
    • "Write Tracks"
    • "Blank CD-RW"
    The CD is now ready to be re-inserted for burning.

  • Command to "blank" a CD-RW:
    • Fast blanking. Data is not overwritten:
          cdrecord dev="1,0,0" -v -eject speed=4 blank=fast
    • Full blanking. Data is overwritten and entire media is erased:
          cdrecord dev="1,0,0" -v -eject speed=4 blank=all
    where dev is the device as defined by "cdrecord -scanbus" as discussed above.

mkisofs: Creating an ISO image file (Creating Data CD image)

An ISO 9660 standard CD is a mountable file system. One may first generate an ISO image of the data files and directories on the hard drive before burning the CD. Once this is generated, it can be burned directly onto the CD. This is the standard used for data CD's and NOT the standard used for your typical CD player. The mkisofs command is used to generate an ISO image. The command cdrecord can then be used to burn an ISO image onto the CD.

Examples:

  • Copy a directory tree from the hard drive into an ISO-9660 image:
    (for the preferred Linux backup see the next option.)
    mkisofs -r -o /fully-qualified-file-name-of-iso-image.iso /name-of-directory-containing-files-to-format-into-iso-image

  • Copy an existing CDROM into a new ISO-9660 image:
    mkisofs -r -o /fully-qualified-file-name-of-iso-image.iso /dev/cdrom

  • Copy a directory tree from the hard drive into an ISO image (but probably not compatible with MS DOS): (Better for Linux backup as hidden files beginning with "." and long file names are preserved.)
    mkisofs -r -R -J -l -L -o /fully-qualified-file-name-of-iso-image.iso /name-of-directory-containing-files-to-format-into-iso-image

  • Example of command used to make Red Hat Power Tools CD:
    mkisofs -A Red Hat Powertools/i386 7.1 -V Red Hat Powertools/i386 7.1 -r -R -J -v -T -x ./lost+found -o /ISO/Powertools-7.1-i386.iso

  • Example of command to create Red Hat boot/install disk:
    mkisofs -A Red Hat Linux/i386 7.1 -V Red Hat Linux/i386 7.1 -J -r -R -v -T -x ./lost+found -o /ISO/qa0408.4-i386-disc1.iso -b dosutils/autoboot/cdboot.img -c boot.cat

  • Write Multiple directories to CD and place in a root directory of the assigned name: (Command is all on one line.)
    mkisofs -r -R -J -l -L -o /ISO/MyBackupCD-20031214.iso -graft-points "/=/home/user1/DirectoryNameA" "/=/home/user1/DirectoryNameB/SubDirectoryNameC" "/=/home/user1/DirectoryNameD/FileName_1" "/=LocalDirectoryNameE"

    This will create a CD ISO image with the following directory structure:

        /FilesFromDirectoryNameA_1
        /FilesFromDirectoryNameA_2
        ...
        /SubDirectoryFromDirectoryNameA/...
        /FilesAndDirectoriesFromDirectoryNameC/...
        /FileName_1 
        /FileFromLocalDirectoryNameE_1 
        /FileFromLocalDirectoryNameE_2 
        /FileFromLocalDirectoryNameE_3 
        /...
        
    Note:
    • The last directory specified in the path name is NOT put on the CD but it's contents are.
    • The reference to LocalDirectoryNameE is the directory which can be listed from the directory where the mkisofs command is issued.
    • Double check what you created by mounting the ISO image (see below) and viewing the files.

  • Specify root directory name of copied directories: (Command is all on one line.)
    mkisofs -r -R -J -l -L -o /ISO/MyBackupCD-20031214.iso -graft-points "/DirectoryNameA=/home/user1/DirectoryNameA" "/SubDirectoryNameC=/home/user1/DirectoryNameB/SubDirectoryNameC"

    This will create a CD ISO image with the following directory structure:

        /DirectoryNameA/...
    /SubDirectoryNameC/...
    Note:
    • When referencing a local directory sometimes one must end the CD directory name with a closing "/" in order to have the directory created on the CD. This was true with older versions (RH 8.0 but not 9.0) of mkisoffs:
      -graft-points "/CD-dirname/=HardDriveLocal-dirname"

  • The last directory specified in the path name is NOT put on the CD but it's contents are.

mkisofs options:

Command Option Description
-b Specifies the path and filename of the boot image to be used when making an "El Torito" bootable CD.
The pathname must be relative to the source path specified to mkisofs.
Required to make a bootable CD. The boot image must be exactly the size of either a 1.2, 1.44, or a 2.88 meg floppy.
-c Specifies the path and filename of the boot catalog to be used when making a bootable CD.
The pathname must be relative to the source path specified to mkisofs.
-l Allow 31 character file names. CD will not be 8.3 DOS compatible. (Who cares! Thus use this option.)
-o Name of iso9660 output image file
-r Set file permissions on CD to be publicly readable
-v Verbose execution.
-x Exclude given path from being written to CDROM.
-A Text string that will be written into the volume header
-J Generate Joliet directory records in addition to regular iso9660 file names.
This preserves the case (upper/lower) of file and directory names. Useful for use with MS/Windows environments.
-L
-allow-leading-dots
Allows files to begin with "." (period). Use this option to write Unix/Linux hidden files. CD will not be DOS compatible. (Who cares! Thus use this option.)
-allow-multidot Allows files to contain multiple "."s (periods). Use this option to write Unix/Linux files which may contain more than one period. CD will not be DOS compatible. (Who cares! Thus use this option.)
-R Add Rock Ridge records to further describe the files. Preserves filename length and case.
-V Specifies the volume ID to be written into the master block.
-T Generate a file TRANS.TBL in each directory.
-graft-points Translate a directory to the root ("/") of the CD. See examples. (i.e.: -graft-points "/=DirectoryName/")
-pad Default (not necessary to specify this option). Pads the end of the whole image by 150 sectors (300 kB). Avoids read ahead errors on last file.

More info:

Rip it: Getting the data from an existing CD or DVD

Ripping an entire CD/DVD to an ISO image:

  • Copy all the data from a CD/DVD: cat /dev/scd0 > data.iso
    Note: This will not pick up the MBR from a bootable installation CD or DVD.

  • Copy all the data from a CD/DVD:
    • DVD dev link: dd if=/dev/dvd of=/tmp/isofile.iso
    • SATA/EIDE: dd if=/dev/hdc of=/tmp/isofile.iso
      (View device name: "dmesg|grep DVDR" or "df")
    • SCSI: dd if=/dev/scd0 of=/tmp/isofile.iso

    Note: This will capture boot information from a bootable CD or DVD.
    Also good for ripping a video DVD to an ISO image for duplication.

  • Create ISO file image copy of CD: mkisofs -r -R -J -l -L -o /tmp/cd-iso-image-file.iso /mnt/cdrom
    Note: The CD must be mounted first.

Ripping an audio CD:

See examples of ripping audio CDs (above) in this tutorial or the YoLinux.com MP3 tutorial: Ripping MP3s.

Ripping video from a video DVD:

Check the title (play title 4): mplayer dvd://4
(It will also tell you the number of titles, chapters and other stats like frame rate (fps), bit rate (kbps), etc.)

Rip DVD video:
  • Re-encode DVD video to specified AVI: mencoder dvd://4 -ovc lavc -oac copy -o title4.avi
  • Do not re-encode DVD video (just dump): mplayer -dumpstream dvd://4 -dumpfile title4.mpeg
    (DVD original quality video. The penalty is the much larger file size.)
    This is the same as cp /media/cdrecorder/VIDEO_TS/VTS_01_1.VOB title1.mpeg
    The DVD "VOB" file typically is an MPEG (I or II) video although all variations are not allowed.
    Full video and sound are captured. The DVD video format allows for multiple language sound tracks thus copying a movie released in multiple languages may have surprising audio results.

Mounting an ISO file as a file system:

After you have created an ISO 9660 image file, one can verify it's contents by mounting the raw ISO file as a file system.

    mount -t iso9660 -o loop /home/user1/RedHat-9.0-i386-Disk1.iso /mnt/iso-1
This can also be mounted using an entry in the file: /etc/fstab
    /home/user1/RedHat-9.0-i386-Disk1.iso /mnt/iso-1 iso9660 loop,ro 0 3

Sharing the ISO by http:

The mounted IS can be shared via Apache httpd with the following configuration file: /etc/httpd/conf.d/iso-share.conf
Alias /iso /mnt/iso-1
<Directory /iso /mnt/iso-1>
    Options Indexes FollowSymLinks
    Order deny,allow
    Allow from all
</Directory>

Gathering CD information: isoinfo

The isoinfo utility can be used to gather information in a ISO file or on a CD and verify the integrity of an iso9660 image.

Command Option Description
-h Help and summary of options
-d Primary volume descriptor (PVD) of iso9660 image.
-f Use find output formatting
-i /path-of-image
or
dev=/dev/cdrom
Path of image to examine
or
specify device (one or the other, not both)
-p Output path table information
-R Print permissions, file names and ownerships (Rock Ridge extensions)
-J Print file names (Joliet extensions)
-T sector Print info about multi-session images.

Examples:

  • List contents of an iso file: isoinfo -f -R -i isoFile.iso

  • List info about a CD: isoinfo -d -i /dev/cdrom

    CD-ROM is in ISO 9660 format
    System id: LINUX
    Volume id: FC/3 x86_64
    Volume set id:
    Publisher id:
    Data preparer id:
    Application id: FC/3 x86_64
    Copyright File id:
    Abstract File id:
    Bibliographic File id:
    Volume set size is: 1
    Volume set sequence number is: 1
    Logical block size is: 2048
    Volume size is: 326239
    El Torito VD version 1 found, boot catalog is in sector 123
    Joliet with UCS level 3 found
    Rock Ridge signatures version 1 found
    Eltorito validation header:
        Hid 1
        Arch 0 (x86)
        ID ''
        Key 55 AA
        Eltorito defaultboot header:
            Bootid 88 (bootable)
            Boot media 0 (No Emulation Boot)
            Load segment 0
            Sys type 0
            Nsect 4
            Bootoff 7C 124
                        
    Note: The block and volume size can be used as input to the following command to:
    • Find the check sum of the CD:
      dd if=/dev/cdrom bs=2048 count=326239 conv=notrunc,noerror | md5sum
      (Linux 2.6 kernel 2.6: /media/cdrecorder)
    • Create an iso image:
      dd if=/dev/cdrom bs=2048 count=326239 conv=notrunc,noerror > file-name.iso

Man Pages:

cdrdao: (DAO) Creating Audio CD's

The "Disc at once" (DAO) feature allows one to burn an audio CD without the two second gap between tracks. This is most useful when copying CDs as it allows one to burn the CD to be just like the original. The cdrdao command uses a "table of contents" (TOC) file as shown below.

Usage: cdrdao command [options] toc-file

Example: cdrdao write toc-file.toc

command Description
show-toc Prints out table of contents (toc) then exits
toc-info Prints out short toc-file summary
toc-size Prints total number of blocks for toc
read-toc Create toc file from audio CD
read-cd Create toc and rip audio data from CD
show-data Prints out audio data and exits
read-test Reads all audio files and exits
disk-info Shows information about inserted medium
unlock Unlock drive after failed writing
simulate Shortcut for 'write --simulate'
write Writes CD
copy Copies CD

option Description
--device x,y,z
SCSI bus, device, lun
i.e. 0,4,0
Sets SCSI device of CD-writer
--source-device x,y,z sets SCSI device of CD-ROM reader
(used by 'copy')
--driver driver-id Force usage of specified driver
--source-driver driver-id Force usage of specified driver for source device
(used by 'copy')
--simulate Perform a write simulation
--speed CD-speed Set writing speed
--multi Session will not be not closed
--eject Ejects cd after writing or simulation
--swap Swap byte order of audio files
--on-the-fly No image file is created. Perform copy in process.
--datafile file-name Name of toc file
Used by read-toc, read-cd and copy
--buffers number Sets fifo buffer size (min. 10, def 32)
--session number Selects session for read-toc/read-cd
--fast-toc Do not extract pre-gaps and index marks
--read-raw Read raw sectors for read-cd
--paranoia-mode number DAE paranoia mode (0..3)
--reload Reload the disk if necessary for writing
--force Force execution of operation
-v verbose-level Set verbose level
-n No pause before writing

See cdrdao examples and how to generate a toc file to control gaps (or lack thereof) during CD burn.

Create toc (table of contents file) which shows(read)/determines(write) the gaps in tracks.
cdrdao read-toc --driver generic-mmc-raw --read-raw --device 0,4,0 toc-file.toc

Sample TOC (Table Of Contents) file:

CD_DA

CATALOG "0075590506829"

// Track 1
TRACK AUDIO
NO COPY
NO PRE_EMPHASIS
TWO_CHANNEL_AUDIO
SILENCE 00:01:00
FILE "data.wav" 0 03:28:70
START 00:01:00


// Track 2
TRACK AUDIO
NO COPY
NO PRE_EMPHASIS
TWO_CHANNEL_AUDIO
FILE "data.wav" 03:28:70 02:14:45
START 00:04:52

...
..

// Track 10
TRACK AUDIO
NO COPY
NO PRE_EMPHASIS
TWO_CHANNEL_AUDIO
FILE "data.wav" 26:05:40 05:03:37


// Track 11
TRACK AUDIO
NO COPY
NO PRE_EMPHASIS
TWO_CHANNEL_AUDIO
FILE "data.wav" 31:09:02 04:50:50
     
Minimal example:
CD_DA

TRACK AUDIO
AUDIOFILE "song1.wav" 0

TRACK AUDIO
AUDIOFILE "song2.wav" 0

TRACK AUDIO
AUDIOFILE "song3.wav" 0

...
..
Where the "0" refers to the beginning of the file

Links:

The IDE device interface and Linux Kernel considerations:

Most kernels as released by the various Linux distributions include SCSI emulation support and thus support for the IDE CD drive. Check this with the following command: dmesg | grep -i scsi

SCSI subsystem initialized
scsi0 : sata_via
scsi1 : sata_via
This shows that the SCSI subsystem is working. (example: Fedora Core 3)

The Linux kernel 2.6 (RH Fedora Core) can use ATAPI directly by prefixing "ATAPI:" (or for ATA devices, ATA:) to the device argument.
If using Linux kernel 2.2 or 2.4, SCSI emulation is required. The kernel module ide-scsi enables this support.

The Linux CD interface uses SCSI as a hardware interface with Linux kernel 2.2 or 2.4. If you have an IDE/ATAPI CD and Linux kernel 2.2 or 2.4, you must use Linux SCSI emulation. Compile this in as part of your kernel by adding the following support using "make xconfig":

  • Block devices -> Include IDE/ATAPI CDROM support = n
  • Block devices -> SCSI emulation support = y
Both SCSI support and SCSI CDROM support will be enabled. (y) not (M).
Support for SCSI controller card support should be disabled.

Linux kernel configuration parameters:

Kernel config parameter Description
CONFIG_ISO9660_FS=y ISO CD-ROM file system support.
CONFIG_BLK_DEV_IDE=y
CONFIG_BLK_DEV_IDECD=y
IDE/ATAPI CD-ROM device support.
CONFIG_SCSI=y
CONFIG_CHR_DEV_SG=y
CONFIG_SCSI_device-specific-driver=y
SCSI CD-ROM device support. (generic and driver specific)
CONFIG_UDF_FS=y DVD file system support.
CONFIG_UDF_RW=y Read/Write DVD file system.

See YoLinux Optimization: Compiling the Kernel

The SCSI driver is loaded when the kernel boots and is held in:

  • Fedora Core 3: /etc/modprobe.conf
  • Red Hat 7/8/9: /etc/modules.conf
  • Red Hat (or for older systems) 5: /etc/conf.modules
  • Debian /etc/modules
Example for a system actually equipped with a SCSI card:
     alias scsi_hostadapter aic7xxx
Examples for IDE systems:
    alias scsi_hostadapter sata_via 
or
alias scsi_hostadapter ide-scsi

The module can be loaded manually: insmod ide-scsi
and
removed manually: rmmod ide-scsi

On systems with an IDE/ATAPI CD-Rom, the system will be emulating SCSI for interfacing with the CD-ROM. (kernel 2.2, 2.4) If the CD was device /dev/hdb (example) it will now be the first CD-ROM SCSI device /dev/scd0. The emulation will now let your IDE CD-ROM act like a SCSI device. The old /dev/cdrom soft link should now be re-linked to the new device.

   rm /dev/cdrom
ln -s /dev/scd0 /dev/cdrom

If using the lilo boot loader add the following line: (for CD device /dev/hdb)
append=" hdb=ide-scsi"

The module may be loaded manually with the command: insmod ide-scsi

You know you are successful when cdrecord -scanbus recognizes your CD-ROM drive.

Related Linux CD Commands:

  • cdda2wav - a sampling utility that dumps CD audio data into wav sound files
  • hpcdtoppm - convert a Photo-CD file into a portable pixmapmcd (RPM: netpbm-progs)
  • ascd - An AfterStep and WindowMaker CD player
  • xcdroast - CD-Writer Software

CD HowTOs:

More CD Information:

List of CDDB servers:

freedb.freedb.org cddbp 8880 Requires no fees or registration
us.cddb.com cddbp 8880 Random US site
sc.ca.us.cddb.com cddbp 8880 Santa Clara, CA US
sc2.ca.us.cddb.com cddbp 8880 Santa Clara, CA US
sj.ca.us.cddb.com cddbp 8880 San Jose, CA US
sj2.ca.us.cddb.com cddbp 8880 San Jose, CA US

Software to generate CD covers:

  • CdLabelgen: home page - Generated postscript files. Integrates with gcombust CD burner software.

CD standards:

Burn a DVD: (using growisofs)

DVDs allow for greater storage capacity. They are also different from CDs in that they must first be formatted. The growisofs command will perform this task automatically if it detects that the DVD is unformatted. The DVDs in these examples are burned DAO (Disk At Once).

Examples:

  • Copy a simple video DVD with Linux:
    1. Rip: Create the ISO image with mkisofs as detailed above.
      Copy a DVD and create ISO image file: (Paths reflect Fedora Core 3 / Linux kernel 2.6 mount point: /media/cdrecorder)
      Examples:
      • mkisofs -pad -J -R -oCourtneyDVD.iso -graft-points "/AUDIO_TS=/media/cdrecorder/AUDIO_TS" "/VIDEO_TS=/media/cdrecorder/VIDEO_TS"
      • mkisofs -dvd-video -oCourtneyDVD.iso -graft-points "/AUDIO_TS=/media/cdrecorder/AUDIO_TS" "/VIDEO_TS=/media/cdrecorder/VIDEO_TS"
        (Use option -dvd-video to generate a DVD-Video compliant UDF file system. This will sort files appropriately and add padding. File video names must be in upper case.)

    2. Burn: Burn DVD with Linux and the growisofs command. Since growisofs is also a front-end to mkisofs, one can append mkisofs commands:
      Examples:
      • growisofs -dvd-compat -Z /dev/dvd=CourtneyDVD.iso -speed=2
        Note: /dev/dvd and /dev/dvdwriter are soft links to /dev/hdc
      • Example of burning DVD using "dvdrecord":
        • Linux 2.6 kernel: dvdrecord speed=1 -dao dev=ATA:1,0,0 CourtneyDVD.iso
        • Linux 2.4 kernel: dvdrecord speed=1 -dao dev=1,0,0 CourtneyDVD.iso

  • Blanking a rewritable DVD: growisofs -Z /dev/dvd=/dev/zero
    Not required before burning but erases sensitive data.

  • Burning a data DVD: growisofs -dvd-compat -speed=2 -Z /dev/dvd -R -J -pad /dir-path/file1 /dir-path/file2

  • Burn data file to DVD: growisofs -Z /dev/dvd -R -J /dir/file-name

  • Burning a data backup DVD using more mkisofs commands: (works on DVD+R and double layer DVD+R DL - Fedora Core 3)
    • Example 1: growisofs -speed=8 -Z /dev/dvd -R -J -allow-multidot -allow-leading-dots -l -pad -graft-points "/home/user1=/home/user1"
      (may not be DOS compatable because of long file name support, possible leading dot or multidot file names, but do you really care?)
    • Example 2: growisofs -dvd-compat speed=2 -Z /dev/dvd -R -J -pad -graft-points "/DirectoryNameA=/home/user1/DirectoryNameA" "/SubDirectoryNameC=/home/user1/DirectoryNameB/SubDirectoryNameC"
      (write a DVD which MS/Windows can read - but not MS/DOS due to the "-l" option and long file names)


Usage: growisofs [growisofs-options] /dev/dvd [mkisofs-options]

growisofs command line options:

Command Description
-version List version of program growisofs.
-Z /dev/dvd Burn initial session to specified path. Closes DVD and no additions can be made. You can specify -Z or -M but not both.
-M /dev/dvd Merge a new session to an existing one at the specified path. Multi-session. You can specify -Z or -M but not both.
-dvd-compat Write with DVD compatibility. Write once disks are closed at the end of the session.
-dry-run Perform steps but do not burn DVD. Checks for overburn condition (too much data for DVD). 4.7 Gbyte (4.7 x 10003) DVDs actually hold 4.377 Gb (4.3 x 10243) as measured by the computer system.
-overburn Don't use this. Turns off overburn condition checking.
-speed=1 Specify recording velocity. Recommend 1 or 2. Not as reliable as CDs for high speed burning.

Note that the -R (Rock Ridge) and -J (Joliet) are mkisofs commands as described above which are appended to growisofs.

Formatting is not required as it is performed by the growisofs command if required. A DVD can be re-formatted using the command dvd+rw-format or to "erase" data.

[Potential Pitfall]: The automounter will detect a formatted DVD and mount it. You can not burn a mounted DVD. To disable the automounter, make sure the mount option "noauto" is used in the file /etc/fstab for the mount point /media/cdrecorder

/dev/hdc /media/cdrecorder auto pamconsole,exec,noauto, ... 0 0
fstab man page

[Potential Pitfall]: Do NOT use the mkisofs option "-o" as this is unsupported with growisofs. There is no option to generate a file, you will be burning a DVD.

[Potential Pitfall]: If you hit the "memorylocked" resource limit and get the following error when issuing the growisofs (V6.0) command:

"unable to anonymously mmap 33554432: Resource temporarily unavailable"
Issue the following bash shell command: ulimit -l unlimited

[Potential Pitfall]: If using the Linux 2.4 kernel (i.e. 2.4.18), you will have to apply kernel patches to get full DVD support. The 2.6 kernel (i.e. Fedora Core 3) has good built-in DVD support.

DVD Media Tools:

The following tools are included in the Fedora Core RPM package dvd+rw-tools:

  • growisofs: Burn DVD. See tutorial above.

  • dvd+rw-format: Format DVD. Also performed by growisofs if needed.
    Format a DVD: dvd+rw-format -lead-out /dev/dvd
    Usage: dvd+rw-format [-force[=full]] [-lead-out|-blank[=full]] [-ssa[=none|default|max]] /dev/dvd

  • dvd+rw-booktype: Utility for manipulating Book Type Field of Physical Format Descriptor located in lead-in of DVD+RW media.
    Usage: dvd+rw-booktype [-dvd-rom-spec|-dvd+rw-spec|-dvd+r-spec|-inq] [-media|-unit|-unit+rw|-unit+r] /dev/dvd

  • dvd+rw-mediainfo: Information about mounted DVD media. Note: This never worked for me.
    Usage: dvd+rw-mediainfo /dev/dvd

  • dvd-ram-control
    Usage: dvd-ram-control [-arre] [-awre] [-rdonly|-rdwr] /dev/dvd

DVD Links:

DVD Tools:

DVD HowTos:

DVD Standards:

The eject command:

This command allows one to open and close the CD tray as well as control a multi-disk changer. Note that the first disk in a changer is referred to as disk "0", the second as disk "1", etc...

eject man page

Samples:

  • Open tray (eject): eject /dev/cdrom
    (Fedora core 3 (kernel 2.6): eject /media/cdrecorder)
  • Open tray (eject) default CD device: eject
  • Close tray: eject -t /dev/cdrom
  • Rotate changer to second CD: eject -c 1 /dev/cdrom

There is rumor of a device driver for /dev/changer but I have no info on this.