LDP/LDP/howto/linuxdoc/CD-Writing-HOWTO.sgml

1940 lines
77 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype linuxdoc system>
<article>
<title>CD-Writing HOWTO
<author>Winfried Trümper <tt/&lt;winni@xpilot.org&gt;/
<date>v2.9.3, 23 July 2000
<abstract>
This document explains how to write CD-ROMs under Linux.
</abstract>
<toc>
<sect>Introduction
<p>
Many people use Linux to burn CD-ROMs, because it is reliable
and easy. No bluescreens while burning and no headaches about
getting the right combination of hard- and software. It just
works once properly set up. The CD-writing HOWTO explains the
setup, how to put data on the media and gives some interesting
applications kindly submitted by the readers.
<sect1>Copyright, license and terms of usage
<p>
Copyright Winfried Trümper 1996-2000. All rights reserved.
Redistribution and use, with or without modification, are permitted
provided that the name of the author may not be used to endorse or
promote products derived from this software without specific prior
written permission. In this sense, translations are welcome and need
not to be authorized by me.
<bf>
The author disclaims all warranties with regard to this
document, including all implied warranties of merchantability and
fitness for a certain purpose; in no event shall the author be liable
for any special, indirect or consequential damages or any damages
whatsoever resulting from loss of use, data or profits, whether in
an action of contract, negligence or other tortious action, arising
out of or in connection with the use of this document.
</bf>
Short: read and use at your own risk. No money-back guarantee.
If you want to understand why this document has always been
under a very weak license and not under the gnu GPL or similar restrictive,
then you should read this article from the german computer magazine
c't: <url url="http://www.heise.de/tp/deutsch/inhalt/te/8375/1.html"> (currently only in German language).
<sect1>Availability
<p>
As the editor of this document I mostly sum up what other people report to
me. I'm not a software developer nor an expert in hardware, so for
specific problems with hard- or software you may want to ask somebody else.
What always makes sense is to report solutions for problems not already
covered by the HOWTO to me.
<p>
I get several hundred e-mails concerning the CD-Writing HOWTO each year.
So please be patient with me, as I cannot always answer within hours.
However, I read everything immediately and put you on my CDR-queue. Before
you ask a question, please make sure you are aware of the newest
version of this document; it is always available from
<url url="http://www.guug.de/~winni/linux/">.
<sect1>Suggested readings
<p>
You may need the handbook for your Linux-distribution to learn about
installing a new kernel. I'm really clueless about this issue when
it comes to any other Linux distribution than my own.
The <url url="http://www.fadden.com/cdrfaq/" name="CD-R FAQ">
is a general FAQ about compact-disk recordables (CD-R), CD-writers and
the required software.
As most CD-writers can be used to read CD-ROMs, too, you may want to read
the <it>Linux CD-ROM HOWTO</it>, the <it>Linux SCSI
HOWTO</it> and the <it>Linux Kernel HOWTO</it>.
<sect1>Terminology ... lasers at maximum ... fire!
<p>
<it>CD-ROM</it> stands for <it>Compact Disc Read Only Memory</it>, a
storage medium utilizing an optical laser to sense microscopic pits on a
colorful shimmering disk. The pits represent the bits of the information
and are so petite that some billions of them fit on the
disc. Thus a CD is a mass-storage medium.
The term <it>CD-R</it> is a short form of <it>CD-ROM recordable</it> and
refers to a CD that doesn't have those microscopic pits on its surface.
Thus it is empty. The CD-R has a special chemical film inside into which
pits can be burned. This is done by giving the laser which normally just
senses the pits a little bit more power so it burns the pits. This action
can only be taken <bf>once</bf> on a CD-R. You can leave out some
areas for later writing, creating a so called <it>multi-session CD</it>.
The <it>CD-ROM rewritable</it> (short: <it>CD-RW</it>) was developed to
work around the limitation of CD-R media. With a CD-RW burner the laser
can do both, burn pits into the media and also melt the media back into
its original state. This is possible, because the laser does not really
burn holes into the media, which would get lost in a puff of smoke.
A decent analogy for the technique is an ice-hockey game: by
driving over the ice, a players (laser) leave scratches in
it. The pattern in the ice (media) is a recording of what
happened on the ice during one round. In between the periods
of the game, the Zamboni cleaning car drives over the ice and
fills the scratches by melting the very top layer of the ice.
(Zamboni is <it>the</it> brand name for cleaning cars in
ice-hockey stadiums). This way the pattern on the ice is
cleared and a new round can begin. The scientific term for
evaporating, condensing, melting and freezing is "phase
change", thus the name "phase change devices" for
CD-RW-writers.
This HOWTO deals with the task of writing CD-Rs and CD-RWs. Welcome on board,
captain.
<sect2>Adaptor vs. Adapter
<p>
The the most frequent spelling within the kernel sources is adapter
(adapter: 4283, adaptor: 154). Even more important, the parameters of
module options and aliases are naturally affected, like in
"scsi_hostadapter". So in order to achieve a consistent spelling throughout
configuration examples and document text, I follow that convention
regardless of the correct spelling.
<sect1>Supported CD-writers
<p>
USB CD-writers are currently not supported at all. Apart from that you can
safely assume that most newer IDE/ATAPI- and SCSI-writers work under
Linux. Newer drives are mostly MMC-compliant and are therefore supported. If
the SCSI-version of a particular writer works, the IDE/ATAPI-version will
most likely work and vice versa. However, some people want to get a warm
and fuzzy feeling by reading the exact model of their writer in some sort
of compatibility list. That is the reason why I didn't throw the following
list out of the HOWTO.
Here is a comprehensive summary of drives reported to work with cdrecord:
<tscreen><verb>
Acer: CDRW 4432A, CDRW 6206A, CD-R/RW 6X4X32, 8432A
BTC: BCE 621E (IDE)
Compro: CW-7502, CW-7502B
Creative: MK 4211, RW 4224E,
Delta: OME-W 141
Dysan: CRW-1622
Elite: Elite b444.41
Goldstar: CED-8041B
Grundig: CDR 100 IPW
Guillemot: Maxi CD-R 4X/8X
HP: SureStore 4020i, SureStore 6020i,
C4324, C4325
CD-writer+ 7100, 7200i, 7500e, 8100i, 8110i, 8200i Plus,
8250i, 9100i, 9110i, 9200e, 9210, 9300i, 9310i
Hi-Val: CDD 2242, CDD-3610,
Iomega: ZIPCD 4x650
JVC: XR-W 2001, XR-W 2010, XR-W 2040, XR-W 2042, XR-RW 2224,
YR 2626
Kiss: CDRW (no model given)
Kodak: PCD 200, PCD 225, PCD 260, PCD 600
Matsushita: matsushita is the japanese name for panasonic, please see there
Memorex: CRW-620, CDR-622, CRW-1622, CRW-2224, CDRW-4420
Microboards: PlayWrite 2000, PlayWrite 4000 RW, PlayWrite 4001 RW
MicroNet: MasterCD Plus 4x4, MasterCD Plus 4x6
Mitsubishi: CDRW-226
Mitsumi: CR-2401-TS, CR-2600 TE, CR-2801 TE,
CR-4801 TE, CR-4802 TE, CR-4804 TE
Nomai: 680.RW
Olympus: CDS 615E, CDS 620E
Optima: DisKovery 650 CD-R
OTI: CDRW 965, CDRW 975 (Socrates 1.0)
Panasonic: CW-7285, CW-7502, CW-7503, CW-7582
Philips: CDD-521/10, CDD-522,
CDD-2000, CDD-2600, CDD-3600, CDD-3610, CDD 4201
PCA 267cr, PCA 460 RW, PCRW 404,
Omniwriter 26, Omniwriter 26A,
CDRW800
Pinnacle: RCD-100, RCD-1000, RCD-5020, RCD-5040
Pioneer: DW-S114X
Plasmon: CDR 480, CDR 4220, RF-4100, RF-4102, CDR 4400
Plextor: CDR PX-24 CS, PX-412 C, PX-R412 C
PX-R 810Ti, PX-R 820T, PX-W 4220Ti, PX-W 8220T, PX-W 8432T
Plexwriter RW 4/2/20
Procom: PCDR 4
REC: 820s
Ricoh: RO-1420C+, MP 1420C, MP 6200S, MP 6201S, MP 7040A, MP-7060A
Samsung: SW-204
Sanyo: CRD-R24S
Smart and
Friendly: CD-RW 226, CD-R 1002, CD-R 1002/PRO, CD-R 1004,
CD-R 2004, CD-R 2006 PLUS, CD-R 2006 PRO, CD-RW 2224,
CD-R 4000, CD-R 4006, CD-R 4012, CD-RW 4424A
CD-R 8020, CD-R 8220
Sony: CDRX 100E, CDRX 120E, CDRX 140S-RP,
CDU 920S, CDU 924, CDU 926S, CDU 928E, CDU 948S
Taiyo Yuden: EW-50
TEAC: CD-R50S, CD-R55S, CDR-55S, CDR-55K,
CDR-56S-400, CD-R56S-600, R56S-614
Traxdata: CRW 2260,
CDR 4120, CDR 4120 Pro, CDRW 4260, CDRW 4424, CDR 4800
Turtle Beach: 2040R
Waitec: wt 2036, wt 2444ei
WPI (Wearnes): CDRW-622, CDR-632P
Yamaha: CDR-100, CDR 102, CDR-200, CDR-200t, CDR-200tx
CDR-400, CDR-400c, CDR-400t, CDR-400tx, CDR-400Atx
CDW-2216E, CRW-2260, CRW-2260t,
CRW-4250tx, CRW-4260t, CRW-4260tx, CRW-4261, CRW-4416S,
CRW-6416S, CRW-8424E
</verb><it>Table: CD-writers supported under Linux</it></tscreen>
The detailed list of models which have been reported to work or not to work
under various Unix-like operating systems is available online from
<url url="http://www.guug.de:8080/cgi-bin/winni/lsc-orig.pl">.
<!--url="http://www.fokus.gmd.de/research/cc/glone/employees/joerg.schilling/private/cdwriters-1.6.html" -->
If your hardware isn't supported you can still use Linux to create an image
of the CD. You may wish to do so because most burning software for DOS does
not deal with RockRidge-extensions (Unix-like filesystems on CD-ROM). In a
second step, you can use DOS or Macintosh software to write the image to
the CD-R.
<sect1>Supported "features"
<p>
Two There are two classes of utilities: the hardware drivers
and the data-formatters. The hardware drivers support the following
features:
<tscreen><verb>
Supported Feature cdwrite-2.1 cdrecord-1.6 cdrdao
----------------------------------------------------------
IDE/ATAPI yes yes yes
Parallel Port no yes yes
CD-RW no yes yes
Audio CD yes yes yes
Data CD-ROM yes yes partial
Multisession partial yes no
TAO (track at once) yes yes yes
DAO (disk at once) no partial yes
packet writing no no no
</verb><it>Table: </it></tscreen>
<tt>cdwrite</tt> is unmaintained software referenced only for
completeness. Please use <tt>cdrecord</tt> instead, as it
supports a wider range of hardware and has significantly
more features. The main benefit of cdrdao is the ability to create audio
CDs without two seconds of silence between the tracks (writing
in disk-at-once (DAO) mode).
The tools classified as "data-formatters" organize the data
on the media ("put a filesystem on it").
<tscreen><verb>
Feature mkisofs mkhybrid mkvcdfs
-------------------------------------------------------
ISO 9660 yes yes no
RockRidge yes yes no
El Torito yes yes no
HFS no yes no
Joliet yes yes no
Multisession yes yes no
CD-Extra yes yes no
Video-CD no no yes
</verb><it>Table: </it></tscreen>
The most obvious difference between the ISO 9660 filesystem compared to the
ReiserFS or Extended-2 filesystem is: you can't modify files once they are
written. Other limitations of the ISO-9660-filesystem include:
<itemize>
<item> only 8 levels of sub-directories allowed (counted from
the top-level directory of the CD)
<item> maximum length for filenames: 32 characters
<item> 650 MB capacity
</itemize>
<it>RockRidge</it> is an extension to allow longer filenames and a deeper
directory hierarchy for the ISO-9660 filesystem. When reading a CD-ROM with
RockRidge extensions under Linux, all the known properties of files like
owner, group, permissions, symbolic links appear ("feels like a Unix
filesystem"). These extensions are not available when reading the CD-ROM
under DOS or the heterogenous Windows-family of operating systems.
<it>El Torito</it> can be used to produce bootable CD-ROMs. For this feature
to work, the BIOS of your PC must support it. Roughly speaking, the
first 1.44 (or 2.88 if supported) Mbytes of the CD-ROM contains a
floppy-disk image supplied by you. This image
is treated like a floppy by the BIOS and booted from. (As a consequence,
while booting from this virtual floppy, your original drive A: (/dev/fd0)
may not be accessible.)
<it>HFS</it> lets a Macintosh read the CD-ROM as if it were an HFS volume
(the native filesystem for MacOS).
<it>Joliet</it> brings long filenames (among other things) to newer variants
of Windows (95, 98, NT). However, the author knows of no tool that allows long
filenames under plain DOS or Windows 3.11.
<it>Video-CDs</it> can be directly played on DVD-devices.
Section 2.8 lists the availability of the mentioned software.
<sect1>Mailing Lists
<p>
If you want to join the development team (with the intention
to actively <it>help</it> them), send e-mail to
cdwrite-request@other.debian.org and put the word <tt>subscribe</tt> in
body of the message.
<sect>Setup the Linux-system for writing CD-ROMs
<p>
This section applies to the following types of CD-writers: SCSI, IDE/ATAPI
and the devices for the parallel port. USB CD-writers are not supported as
of May 2000. Non-SCSI writers require compatibility
drivers, which make them appear as if they were real SCSI devices. On the
one side such a unifying strategy is easy ("everything is SCSI"), because
on the application level you can share your knowledge with other users
regardless of their kind of CD-writer. On the other side, you have to
reconfigure applications like audio CD players or the mount utility to
reflect the change of the driver name. For example, if you accessed your
ATAPI CD-writer through the device file /dev/hdc before, you will have to
access it through /dev/scd0 after activating the SCSI compatibility
drivers.
Once you succeed setting up your hardware and the rest of your Linux-system,
the command <tt>cdrecord -scanbus</tt> shows you a list of devices
on your SCSI busses.
The goal of this section is to guide you in setting
up your Linux-system, so that you finally end up seeing something like:
<tscreen><verb>
shell&gt; cdrecord -scanbus
Cdrecord release 1.7a1 Copyright (C) 1995-1998 Jörg Schilling
scsibus0:
0,0,0) 'Quantum ' 'XP34300 ' 'F76D' Disk
0,1,0) 'SEAGATE ' 'ST11200N ' '8334' Disk
0,2,0) *
0,3,0) 'TOSHIBA ' 'MK537FB/ ' '6258' Disk
0,4,0) 'WANGTEK ' '5150ES SCSI 36 ' 'ESB6' Removable Tape
0,5,0) 'EXABYTE ' 'EXB-8500-85QUE ' '0428' Removable Tape
0,6,0) 'TOSHIBA ' 'XM-3401TASUNSLCD' '3593' Removable CD-ROM
0,7,0) *
scsibus1:
1,0,0) 'Quantum ' 'XP31070W ' 'L912' Disk
1,1,0) *
1,2,0) *
1,3,0) 'TEAC ' 'CD-R55S ' '1.0H' Removable CD-ROM
1,4,0) 'MATSHITA' 'CD-R CW-7502 ' '4.02' Removable CD-ROM
1,5,0) *
1,6,0) 'YAMAHA ' 'CDR400t ' '1.0d' Removable CD-ROM
1,7,0) *
</verb><it>Listing: Detecting devices on your SCSI bus</it></tscreen>
The example was provided by Jörg Schilling and shows a total of four
CD-writers. Please note that -scanbus also reports other devices,
e.g. regular CD-ROMs and hard disk drives. The last column gives the SCSI
description of the device, from which you cannot clearly distinguish
ordinary CD-ROM drives from those with burning capability. But the product
identification (middle column) often has hints about the feature in form of
a R, -R or -RW.
<sect1>Quickstart
<p>
This section is an attempt to provide an fast and easy description of the
configuration. Not all possible setups are covered, but please go on and
try it out anyways. First of all, check the Linux kernel version printed by
the command "uname -r". It should be something like 2.0.X or 2.2.Y, where
X is higher than 36 and Y is higher than 11. If you run older versions or
the so called development kernels, you are on your own. Installing a new
kernel is as much work as fixing an old one, so I have removed all hints
you need for buggy kernels.
The listing below shows a set of commands you could start with. The
commands create device file entries under /dev unless they already exists.
<tscreen><verb>
test `whoami` = 'root' || echo "You must be root to execute the commands."
cd /dev/
umask -S u=rwx,g=rwx,o-rwx
[ -f loop0 ] \
|| ./MAKEDEV loop \
|| for i in 0 1 2 3 4 5 6 7; do mknod loop$i b 7 $i; done
[ -f sg0 -o -f sga ] \
|| ./MAKEDEV sg \
|| for i in 0 1 2 3 4 5 6 7; do mknod sg$i c 21 $i; done
</verb><it>Listing: creating of devicefiles</it></tscreen>
Hardware access is usally implemented through device files under Linux. So
before any other thing you make sure those files do exists in the
directory /dev. Still nobody could give me a compelling reason why this has
not been automated through techniques like the device filesystem
(devfs). The devfs is available for years know, brings a safer (!) and a far
clearer naming of devices and makes the device entries appear automatically
under /dev. Some prominent people argue devfs is not the perfect solution,
but they do not come up with anything better, not even something comparable
and last but least nothing available and tested now. Lets start to use
devfs, so I can remove the above commands from this document. (<url
url="http://www.atnf.CSIRO.AU/~rgooch/linux/kernel-patches.html">)
Next thing to ensure is, that the Linux kernel is equiped with the
necessary drivers. The following commands check various files for the
presence of drivers in the running Linux kernel. Usally the command
"cdrecord -scanbus" should trigger an automatic loading of all drivers. In
case a driver is not present in the kernel afterwards, it is reported and
the modularized driver (module) is manually loaded through insmod.
<tscreen><verb>
test `whoami` = 'root' || echo "You must be root to execute the commands."
cdrecord -scanbus > /dev/null
if ! (pidof kerneld || test -f "/proc/sys/kernel/modprobe"); then
echo "Neither kerneld nor kmod are running to automatically load modules".
fi
report_no_autoload() {
echo "Ensure the module $1 is loaded automatically next time."
}
if test ! -f "/proc/scsi/scsi"; then
report_no_autoload scsi_mod && insmod scsi_mod
fi
if ! grep "^........ sg_" /proc/ksyms > /dev/null; then
report_no_autoload sg && insmod sg
fi
if ! grep "^........ sr_" /proc/ksyms > /dev/null; then
report_no_autoload sr_mod && insmod sr_mod
fi
if ! grep "^........ loop_" /proc/ksyms > /dev/null; then
report_no_autoload loop && insmod loop
fi
if ! grep iso9660 /proc/filesystems > /dev/null; then
report_no_autoload iso9660 && insmod iso9660
fi
echo "The following is only needed for IDE/ATAPI CD-writers."
if ! grep ide-scsi /proc/ide/drivers > /dev/null; then
report_no_autoload ide-scsi && insmod ide-scsi
fi
cdrecord -scanbus
</verb><it>Listing: Testing for drivers</it></tscreen>
Please read the next chapter if insmod complains about missing module files.
If you are
in text mode (console), the loading of modules may cause some messages to
be printed on your screen. If you are in graphics mode (X11, KDE, Gnome),
you can recall these messages with the command dmesg.
There are several ways to load the modules next time you start
up your Linux system:
<tscreen><verb>
(1) Put the relevant insmod command into the startup sequence
(a shell script named rc.local or equivalent).
(2a) Run kerneld or kmod and
(2b) configure them in /etc/modules.conf (to be more precise,
you configure the utility modprobe, which is called by the daemons)
</verb></tscreen>
People with a SCSI-writer can skip the rest of this section, because
cdrecord will most likely already detect their hardware. If not, then
please send me an email with some information about your setup, so I can
improve the section about SCSI-writers.
Now to the people with CD-writers for IDE/ATAPI. As
written in the previous chapter, you have to load the compatibility driver
ide-scsi. But this driver can only access your CD-Writer if no other
driver has already done so. In other words, you have to tell the
regular IDE driver to leave your CD-writer unrecognized, so the ide-scsi
driver can grab it.
<tscreen><verb>
hda = IDE bus/connector 0 master device
hdb = IDE bus/connector 0 slave device
hdc = IDE bus/connector 1 master device
hdd = IDE bus/connector 1 slave device
</verb><it>Table: device file names of IDE/ATAPI devices</it></tscreen>
The table above shows the relation of device file names and the placing of
devices on the IDE busses. The device file name representing your CD-Writer
has to be passed to the driver in the Linux kernel. Example: hdb=ide-scsi.
Such a setting should be added to lilo.conf or chos.conf if the driver is
statically compiled into your kernel, which seems to be the most common
setup. If you need to pass more than one parameter to the kernel,
then seperate them with spaces (like shown in the chos example). The next
two listings show example configurations containing more lines than just
the relevant append-line. Please note the append- and cmdline-entries
are image-specific (ie. don't add them immediatly at the top).
<!--
All other variants
like hdb=ignore or hdb=none will not do what you need. "Ignore" just means
"no autoprobing" and "none" will even block access to the device for
ide-scsi.
-->
<tscreen><verb>
image=/boot/zImage-2.2.14
label=Linux
read-only
append="hdb=ide-scsi"
</verb><it>Listing: Example configuration for lilo (/etc/lilo.conf)</it></tscreen>
<tscreen><verb>
linux "Linux 2.1.14" {
image=/boot/zImage-2.0.37
cmdline= root=/dev/hda5 readonly hdb=ide-scsi
}
</verb><it>Listing: Example configuration for chos (/etc/chos.conf)</it></tscreen>
If the driver for IDE/ATAPI CD-ROMs is loaded as a module, then the above
won't make any difference to you, but make sure you include the
options-line from the next listing. The last three lines of that listing
are generally suggested to further automate the loading of the required
modules.
<tscreen><verb>
options ide-cd ignore=hdb # tell the ide-cd module to ignore hdb
alias scd0 sr_mod # load sr_mod upon access of scd0
#pre-install ide-scsi modprobe imm # uncomment for some ZIP drives only
pre-install sg modprobe ide-scsi # load ide-scsi before sg
pre-install sr_mod modprobe ide-scsi # load ide-scsi before sr_mod
pre-install ide-scsi modprobe ide-cd # load ide-cd before ide-scsi
</verb><it>Listing: Example configuration for /etc/modules.conf</it></tscreen>
If your CD-writer is the only CD-ROM attached to your machine, then
remember you have to access the CD-ROM in the writer through the device file
/dev/scd× where ×=0,..,8. You may want to change the symbolic name cdrom to
point to the new device file name. The listing below shows the command to
achieve this with the example scd0.
<tscreen><verb>
cd /dev && rm cdrom && ln -s scd0 cdrom
</verb><it>Listing: Making cdrom a symbolic name for scd0</it></tscreen>
If your CD-writer and CD-ROM-drive are two different devices, then don't
change the cdrom symlink.
<!--
<sect2>Special notes for kernel versions up to 2.2.9
<p>
Up to kernel version 2.2.9, don't enable CONFIG_SCSI_MULTI_LUN ('probe for
multiple luns') and ide-scsi support at the same time, there is an
ide-scsi bug which prevents this.
<p>
Some users reported conflicts with pre-compiled binaries and the
2.2-release. This is a problem with the Linux kernel. Possible solutions:
<itemize>
<item>It may go away if you recompile cdrecord so that it adopts to the actual
values in linux/include/scsi/sg.h.
These values must be the values of the running kernel due to the
dumb sg user interface.
<item>It may be caused by a loadable sg driver which cannot
get enough memory that is suitable for DMA (Kernel releases up to 2.2.5).
</itemize>
-->
<sect2>Special notes about SCSI CD-writers
<p>
Please make sure that your writer is recognized by the BIOS of your SCSI
hostadaptor card. Every SCSI hostadaptor scans the SCSI bus after power on
and reports all devices found connected to the bus. The report includes
the SCSI ID of the devices and their product label. It makes no sense
to proceed unless your CD writer is listed in that report.
If you plan to connect your SCSI device through the parallel port (not to
confuse with the IDE drives for the parallel port), you need a special
active cable and a special kernel driver. Read <url
url="http://www.torque.net/parport/parscsi.html"> to learn more about this
option.
<sect2>Special notes about CD-writers for the parallel port
<p>
I have no clue about this, sorry. Please read <url
url="http://www.torque.net/parport/paride.html"> or your local file
/usr/src/linux/Documentation/paride.txt.
<sect2>Compiling missing kernel modules (optional)
<p>
You don't need to read this section if you hardware is already sucessfully
recognized and configured by the previously described configuration steps.
The Linux kernel can be equipped with drivers for various features. You can
compile the drivers into the kernel image statically or you can compile
them as a module for on-demand loading. The last method is preferred for
drivers not essential for bringing your Linux-system into life, because
your kernel will be smaller and faster then. However, some drivers are
essential for the system to come up and you shouldn't compile them as a
module. Example: if your system lives on an IDE hard disk, you must have the
driver for IDE hard disks in the kernel -- not as a module.
There are three different types of CD-writers: SCSI, IDE/ATAPI and external
writers that work through the parallel port. The table shows how to
configure the Linux kernel for those hardware types. The first column of
the table is the section of the kernel configuration menu, where you can
find the setting. The second column is the description of the feature
(taken from the kernel configuration menu, too). The third column gives the
name of the resulting module. The columns named SCSI, IDE and PP contain
the necessary options for the associated hardware (PP = parallel port).
<tscreen><verb>
Sect. Description Module SCSI IDE PP
------------------------------------------------------------
BLOCK Enhanced IDE/MFM/RLL... Y
BLOCK IDE/ATAPI CDROM ide-cd M
BLOCK SCSI emulation support ide-scsi M
BLOCK Loopback device loop M M M
PARIDE Parallel port IDE device paride Y/M
PARIDE Parallel port ATAPI CD-ROMs M
PARIDE Parallel port generic ATAPI M
PARIDE (select a low-level driver) Y
SCSI SCSI support scsi_mod Y/M Y/M
SCSI SCSI CD-ROM support sr_mod Y/M Y/M
SCSI Enable vendor-specific Y Y
SCSI SCSI generic support sg Y/M Y/M
SCSI (select a low-level driver) Y
FS ISO 9660 CDROM filesystem iso9660 Y/M Y/M Y/M
FS Microsoft Joliet cdrom... joliet Y Y Y
</verb><it>Table: driver selection for different writer types</it></tscreen>
Y stands for yes and means you should put the beast into the kernel. M
stands for module and means you should or must compile this feature as a
module. Y/M gives you the option to decide between either (order indicates
choices with less potential problems). Empty settings don't need to be
modified and not changing them increases the chance that the resulting
kernel will work for you (if it did before...). Especially in environments
where SCSI and ATAPI devices are mixed, you better build most things as
modules.
Compiling loopback device is optional. It allows you to test the image
before writing it to the media. If you want to be able to read CD-ROMs, you
need support for the ISO 9660 filesystem. This driver automatically
includes RockRidge Extensions. The Microsoft Joliet CD-ROM extensions have
to be explicitly added to the ISO 9660 filesystem. In any case, you need a
low-level driver for your hardware. Low-level refers to the driver, which
interacts directly with the hardware. For SCSI and the parallel port,
there are a lot of low-level drivers available.
Installing the resulting Linux-kernel is beyond the scope of this
HOWTO. Please consult the documentation of your Linux-distribution.
Users of RedHat Linux be aware that you have to compile in the
features "Ramdisk support" and "Initial ramdisk". Furthermore, you
have to generate a new ramdisk with the new modules by issuing a
command like "mkintrd --preload ide-cd initrd-2.2.14.img 2.2.14".
<!--
If you are on your own, then try to install a package called
"Linux Kernel source", which was shipped with your distribution.
Afterwards issue the following commands:
<tscreen><verb>
cd /usr/src/linux
make menuconfig # follow instructions and menu
make dep
make zImage # or "make bzImage"
# insert a floppy-disk before proceeding
dd if=arch/i386/boot/zImage of=/dev/fd0
make modules
make modules_install
</verb><it>Table: making a bootable floppy disk</it></tscreen>
This will produce a bootable floppy disk. If you are really clueless about
this whole stuff, you better read other documentation like the Kernel HOWTO or get help from a friend before you completely
mess up your system. Remember the kernel is the heart of the system.
If your kernel allows it, compile the
driver for IDE/ATAPI CD-ROMs as a module. If not, disable it (N) and use
the driver for SCSI CD-ROMs instead. For the 2.2 series of the Linux
kernel, it is no longer possible to run the drivers for IDE and SCSI on the
same physical device at the same time (if you still have 2.0.36, read
below).
-->
<sect1>Get the user software for burning CD-Rs
<p>
A more detailed survey of tools related to produce CD-ROMs is available from
<url url="http://www.fokus.gmd.de/research/cc/glone/employees/joerg.schilling/private/cdb.html">.
<sect2>Command line utilities
<p>
One of the following packages are required to generate images of CD-Rs
(only required for data CD-ROMs):
<quote>
<url url="ftp://tsx-11.mit.edu/pub/linux/packages/mkisofs/"> (mkisofs)<p>
<url url="ftp://ftp.ge.ucl.ac.uk/pub/mkhfs"> (mkhybrid)
</quote>
To write images to the CD-R, you need one of the following software packages:
<quote>
<url url="ftp://ftp.fokus.gmd.de/pub/unix/cdrecord/"> (cdrecord) <p>
<url url="http://www.ping.de/sites/daneb/cdrdao.html"> (cdrdao) <p>
<url url="http://www.munich-vision.de/vcd/"> (mkvcdfs)
</quote>
Don't trust the man page of old versions of <tt>mkisofs</tt> which state
you need version 1.5 of <tt>cdwrite</tt>. Just use cdrecord and you are
fine. Please note that newer versions of cdrecord ship with an enhanced
version of mkisofs and some extra tools in the subdirectory misc/ (readcd,
isosize) not found elsewhere.
<sect2>Graphical user interfaces (optional)
<p>
Front-ends are really front-ends under Linux. That means, you still have to
install the command-line utilities, but you access them in a better looking
manner.
<it>X-CD-Roast</it> is a program package dedicated to easy CD creation under
Linux. It combines command line tools like <tt>cdrecord</tt> and
<tt>mkisofs</tt> into a nice graphical user interface.
<quote>
<url url="http://www.fh-muenchen.de/home/ze/rz/services/projects/xcdroast/e&lowbar;overview.html">
</quote>
<it>BurnIT</it> is a JAVA front-end to cdrecord, mkisofs and
cdda2wav-0.95 making it a complete package for burning CDs on
the Unix platform. It is available from
<quote>
<url url="http://sunsite.auc.dk/BurnIT/">
</quote>
<it>CD-Tux</it> is a character based frontend for the programs mkisofs
and cdrecord. "It creates an easy to use enviroment for doing almost anything to a CD in full color through the use of the (in)famous NCURSES Library. And it does all this whith an executable of under 75K."
<quote>
<url url="http://www.datadictator.co.za/cdtux/">
</quote>
<sect>Burning CD-Rs
<p>
<quote>
<it>"If to smoke you turn I shall not cease to fiddle while you burn."</it>
(Roman emperor Nero about burning his own classic-CDs, AD64. He
misunderstood it completely and burned Rome down.)
</quote>
<p>
Writing CD-ROMs consists of two steps under Linux:
<itemize>
<item> packaging the desired data (files, music or both) into files
with special formats
<item> writing the data from the files to the CD-R with the utility <tt>cdrecord</tt>
</itemize>
This chapter describes the steps for data and audio CDs in greater detail.
<sect1>Writing CD-ROMs (pure data)
<p>
Note that collecting the data to put onto a CD usually takes longer than one
expects. Consider that missing files cannot be added once the CD is
written and fixated. This is also true for CD-RW, which can currently
only be rewritten as a whole. Using the multi-session feature is no
option for single files, as it consumes much space for a new complete
table of contents (TOC). UDF is not ready yet for Linux.
Also keep in mind that a certain amount of the free space of a CD is used
for storing the information of the ISO-9660-filesystem (usually a few MB).
620 MB data will always fit on a 650 MB CD-R.
<sect2>Creating an image of the later CD-ROM
<p>
Before any storage medium (e.g. floppy disk, hard disk or CD) can be used,
it must get a filesystem (DOS speak: get formatted). The filesystem is
responsible for organizing and incorporating the files that should be
stored on the medium.
The usual utilities for creating filesystems on hard disk partitions write an
empty filesystem onto them, which is then mounted and filled with files by
the users as they need it. A writable CD is only writable once so if we
wrote an empty filesystem to it, it would get formatted and remain
completely empty forever. This is also true for rewritable media as you
cannot change arbitrary sectors yet; you must erase their whole content.
So what we need is a tool that creates the filesystem while copying the
files to the CD. This tool is called <tt>mkisofs</tt>. A sample usage
looks as follows:
<tscreen><verb>
mkisofs -r -o cd_image private_collection/
`---------' `-----------------'
| |
write output to take directory as input
</verb></tscreen>
The option '-r' sets the permissions of all files to be public readable on
the CD and enables RockRidge-extensions. You probably want to use this option
unless you really know what you're doing
(hint: without '-r' the mount point gets the permissions of
<tt>private_collection</tt>!).
<tt>mkisofs</tt> will try to map all filenames to the 8.3 format used by
DOS to ensure the highest possible compatibility. In case of naming conflicts
(different files have the same 8.3 name), numbers are used in the filenames
and information about the chosen filename is printed via STDERR (usually
the screen). Don't panic: Under Linux you will never see these odd 8.3
filenames because Linux makes use of the Rock Ridge extensions which
contain the original file information (permissions, filename, etc.).
Remeber do use the Option -J (MS Joliet extensions) or use mkhybrid if you
want to generate a more Windows-friendly CD-ROM. For HFS CD-ROMS used on
the Macintosh, you better read the man-page of mkisofs' bigger sister
mkhybrid for details on various options.
Now you may wonder why the output of <tt>mkisofs</tt> is not directly sent
to the writer device. There are three reasons:
<itemize>
<item><tt>mkisofs</tt> knows nothing about driving CD-writers.
<item>You may want to test the image before burning it.
<item>On slow machines it would not be reliable (see section 4.).
</itemize>
There is a method to write a CD-R in one go, which will be described below.
One also could think of creating an extra partition and writing the image
to that partition instead to a file. I vote against such a strategy because
if you write to the wrong partition due to a typo, you can lose your
complete Linux system. Read: that happened to me... Furthermore, it is a
waste of disk space because the CD-image is temporary data that can be
deleted after writing the CD. However, using raw partitions saves you the
time for deleting files of 650 MB size.
<sect2>Test the CD-image
<p>
Linux has the ability to mount files as if they were disk partitions. This
feature is useful to check that the directory layout and file access
permissions of the CD image matches your wishes. Although media is very
cheap today, the writing process is still time consuming, and you may at
least want to save your time by doing a quick test.
To mount the file <tt>cd_image</tt> created above on the directory
<tt>/cdrom</tt>, give the command
<tscreen><verb>
mount -t iso9660 -o ro,loop=/dev/loop0 cd_image /cdrom
</verb></tscreen>
Now you can inspect the files under <tt>/cdrom</tt> -- they appear exactly
as they were on a real CD. To umount the CD-image, just say <tt>umount
/cdrom</tt>. (Warning: On Linux kernels prior to 2.0.31 the last file on
<tt>/cdrom</tt> may not be fully readable. Please use a more recent kernel
like 2.0.36. The option -pad for cdrecord applies to audio CDs only and the
option -pad for mkisofs requires a patch, which is as much work
to apply than to upgrade to a bug-free Linux kernel.)
Note:
<quote>
Some ancient versions of <tt>mount</tt> are not able to deal with
loopback devices. If you have such an old version of <tt>mount</tt>, then upgrade your Linux-system.
Several people have already suggested putting information about how to get the
newest mount utilities into this HOWTO. I always refuse this. If your
Linux distribution ships with an ancient <tt>mount</tt>, report it as a
bug. If your Linux distribution is not easily upgradable, report it as a
bug.<p>
If I include all the information that is necessary to work around bugs
in badly designed Linux distributions, this HOWTO would be a lot bigger and
harder to read.
</quote>
<sect2>Write the CD-image to a CD
<p>
This section only covers writing data CDs in TAO mode, because it is the
most frequently used mode for data. For more information about the
differences of TAO and DAO, please see the chapter about audio CD-Rs. If
you use DAO mode with the tool cdrdao, then remember to add a dummy audio
track at the end of the TOC file (see the README).
Not much more left to do. If you haven't already tried, it's a good time for
the command
<tscreen><verb>
cdrecord -scanbus
</verb></tscreen>
This will tell you to which SCSI device your CD-writer is attached to. All
other methods of guessing the information printed so nicely by cdrecord
have been removed from the HOWTO.
Before showing you the last command, let me warn you that CD-writers want
to be fed with a constant stream of data. So the process of writing the CD image to the CD must not be
interrupted or a corrupt CD will result. It's easy to interrupt the
data stream by deleting a very large file. Example: if you delete an old
CD-image of 650 Mbytes size, the kernel must update information about
650,000 blocks on the hard disk (assuming you have a block size of 1 Kbyte for
your filesystem). That takes some time and is very likely to slow down
disk activity long enough for the data stream to pause for a few seconds.
However, reading mail, browsing the web, or even compiling a kernel
generally will not affect the writing process on modern machines.
Please note that no writer can re-position its laser and continue at
the original spot on the CD when it gets disturbed. Therefore any strong
vibrations or other mechanical shocks will probably destroy the CD you are
writing.
When you are mentally prepared, dress up in a black robe, multiply the
SCSI-id of the CD-writer with its SCSI-revision and light as many candles,
speak two verses of the ASR-FAQ (newsgroup alt.sysadmin.recovery) and
finally type:
<tscreen><verb>
shell&gt; SCSI_BUS=0 # taken from listing 1 "scsibus0:"
shell&gt; SCSI_ID=6 # taken from listing 1 "TOSHIBA XM-3401"
shell&gt; SCSI_LUN=0
shell&gt; cdrecord -v speed=2 dev=$SCSI_BUS,$SCSI_ID,$SCSI_LUN \
-data cd_image
# same as above, but shorter:
shell&gt; cdrecord -v speed=2 dev=0,6,0 -data cd_image
</verb></tscreen>
For better readability, the coordinates of the writer are stored in three
environment variables with natural names: SCSI_BUS, SCSI_ID, SCSI_LUN.
If you use cdrecord to overwrite a CD-RW, you must add the option
"blank=..." to erase the old content. Please read the man page to learn
more about the various methods to blank the CD-RW.
In times where everybody except me owns a 400 Mhz machine, people feed the
output of mkisofs directly into cdrecord:
<tscreen><verb>
shell&gt; IMG_SIZE=`mkisofs -R -q -print-size private_collection/ 2>&1 \
| sed -e "s/.* = //"`
shell&gt; echo $IMG_SIZE
shell&gt; [ "0$IMG_SIZE" -ne 0 ] && mkisofs -r private_collection/ \
|cdrecord speed=2 dev=0,6,0
tsize=${IMG_SIZE}s -data -
# don't forget the s --^ ^-- read data from STDIN
</verb></tscreen>
The first command is an empty run to determine the size of the image (you
need the mkisofs from the cdrecord distribution for this to work). You need
to specify all parameters you will use on the final run (e.g. -J or -hfs).
Maybe your writer does not need to know the size of the image to be
written, so you can leave this dry run out. The printed size must be passed
as a tsize-parameter to cdrecord (it is stored in the environment variable
IMG_SIZE). The second command is a sequence of mkisofs and cdrecord,
coupled via a pipe.
The
<sect1>Writing audio CDs
<p>
Writing audio CDs is very similar to the steps described above for data
CDs. You can choose between two techniques: DAO or TAO. TAO (track at
once) is less suitable for music, because you will hear clicks between the
individual tracks. It is described first anyways, because it is a little bit
easier to deal with and DAO is not available for all drives yet.
The main difference compared to writing data CD-Rs is the format of the
images. ISO-9660 (or whatever filesystem you prefer) would not be suitable,
because no audio CD player is able to deal with filesystems. Instead the
audio data must be writen as "16 bit stereo samples in PCM coding at 44100
samples/second (44.1 kHz)".
One utility to convert your sound files into the required format is sox.
Its usage is straightforward:
<tscreen><verb>
shell&gt; sox killing-my-software.wav killing-my-software.cdr
</verb></tscreen>
This command would convert the song killing-my-software from the WAV-format
into the CDR audio-format. See the man page for sox for more details about
formats and filename-extensions sox recognizes. Because the output of the
manual conversion takes up much disk space, it was made a built-in feature
of cdrecord for the sound formats WAV and AU. So as long as your sound
files have the extensions .wav or .au (and the sample rate "stereo, 16 bit,
44.1 kHz"), you can use them as audio tracks without manual conversion into
the CDR format. However, cdrecord requires
the size of the sound data to be a integer multiple of 2352 and to be
greater than 705,600 bytes, which is not fullfilled for some WAV files. For
such files the usage of sox is needed to pad the audio data up to 2352
bytes.
<sect2>Writing audio CDs (TAO)
<p>
An audio CD consists of audio tracks, which are organized as separate
images when using TAO mode. So if you want to have ten tracks on your CD,
you have to make ten images.
Cdrecord writes CD images as audio tracks if the option -audio is
specified. The other options are identical to those used for writing
data-CDs (unless you have very special requirements). These three examples
all do the same thing, but read the tracks from different sound file formats:
<tscreen><verb>
shell&gt; cdrecord -v speed=2 dev=0,6,0 -audio track1.cdr track2.cdr...
shell&gt; cdrecord -v speed=2 dev=0,6,0 -audio track1.wav track2.wav...
shell&gt; cdrecord -v speed=2 dev=0,6,0 -audio track1.au track2.au...
</verb></tscreen>
By doing this, you will produce an audio CD which has a 2
seconds of pause between audio tracks.
One notable format not directly readable by cdrecord is MPEG Layer 3. To
convert files in this format to the CDR-format, you can use the command
"mpg123 --cdr - track1.mp3 > track1.cdr". The option --cdr ensures the
track is encoded in the required format (see above). Older versions of
mpg123 require -s instead of the plain - to write to stdout. The other
direction (converting from WAV to MPEG) can be done with LAME for WAV-files
(extract the track with cdda2wav from the audio CD and encode it into MP3
with the help of LAME).
To create a CD-R from a whole bunch of MP3-files, you can use the following
command sequence:
<tscreen><verb>
for I in *.mp3
do
mpg123 --cdr - "$I" | cdrecord -audio -pad -nofix -
done
cdrecord -fix
</verb></tscreen>
Depending on the speed of your machine, you may want to slow down writing
to "speed=1" (cdrecord option). If you use "speed=4", your machine must be
able to play the MP3-file at quadruple speed. mpg123 consumes much
CPU-time! If you are in doubt, try an empty run with -dummy (keeps the
laser switched off).
<sect2>DAO
<p>
If you want to get rid of the pauses between the audio tracks, you have to
use disk-at-once (DAO) recording versus the (individual)
track-at-once (TAO) recording described above. Support for DAO is currently
most advanced in cdrdao. Please see its homepage for details.
If you master the CD in DAO mode, then you use a monolithic image (sound
file) and control track information with a configuration file.
<tscreen><verb>
CD_DA
TRACK AUDIO
FILE "live.wav" 0 5:0:0
INDEX 3:0:0
TRACK AUDIO
FILE "live.wav" 5:0:0 5:0:0
TRACK AUDIO
FILE "live.wav" 10:0:0 5:0:0
INDEX 2:0:0
</verb></tscreen>
<sect1>Mixed mode CD-ROMs
<p>
There is not much to say about this topic. Just indicate the type of the
(subse quent) images with the options -data and -audio. Example:
<tscreen><verb>
cdrecord -v dev=0,6,0 -data cd_image -audio track*.cdr
</verb></tscreen>
<sect>Dear Winfried,...
<p>
This is the section usually known as "frequently asked
questions with answers". If you have a problem with your partner, kids or
dog, just send it in, as long as it is related to writing CD-Rs or is
otherwise entertaining.
<sect1>How sensitive is the burning process?
<p>
Test it. Use the option -dummy to do an empty run of cdrecord. Do
everything you would do otherwise and watch if the burning process
survives.
If you feed cdrecord directly from mkisofs, then disk intensive processes
such as updating the <it>locate</it> database lower the maximum flow rate
and may corrupt the CD. You better check such processes are not started
via <tt>cron</tt>, <tt>at</tt> or <tt>anacron</tt> while you burn
CD-Rs on older machines.
<sect1>Has file fragmentation a bad impact on the throughput?
<p>
Fragmentation of files is usually so low that its impact isn't noticed. However,
you can easily construct pathological cases of fragmentation, which lower
the throughput of your hard disks under 100 kbytes/second. So don't do
that. :-)
Yes, files on a hard disk get fragmented over the years. The faster, the
fuller the filesystem is. Always leave 10% or 20% free space, and you
should run fine with respect to writing CD-Rs.
If you're uncertain then look at the messages printed while booting. The
percentage of fragmentation is reported while checking the filesystems. You
can check for this value with the very dangerous command
<tscreen><verb>
shell&gt; e2fsck -n /dev/sda5 # '-n' is important!
[stuff deleted -- ignore any errors]
/dev/sda5: 73/12288 files (12.3% non-contiguous)
</verb></tscreen>
In this example the fragmentation seems to be very high -- but there are
only 73 very small files on the filesystem. So the
value is <it>not</it> alarming.
There is an experimental utility called e2defrag to defragment extended-2
filesystems. The current version does not work reliable enough to use
it even for private environments. If you really want to defragment your
filesystem, make a backup copy (better: two copies), practice restoring the
data, then create a new filesystem (that will destroy the old) and restore the
data. This sketch is currently the safest technique.
<sect1>Is it possible to store the CD-image on an UMSDOS-filesystem?
<p>
Yes. The only filesystem that isn't reliable and fast enough for writing
CD-ROMs from is the <it>network filesystem</it> (<it>NFS</it>).
I used UMSDOS myself to share the disk-space between Linux and DOS/Win
on a PC (486/66) dedicated for writing CD-ROMs.
<sect1>Isn't there some way to get around the ISO-9660 limitations?
<p>
Yes. You can put any filesystem you like on the CD. But other operating
systems than Linux won't be able to deal with this CD.
Here goes the recipe:
<itemize>
<item>Create an empty file of 650MB size.
<tscreen><verb>
dd if=/dev/zero of="empty_file" bs=1024k count=650
</verb></tscreen>
<item>Create an extended-2 filesystem on this file
<tscreen><verb>
shell&gt; /sbin/mke2fs -b 2048 empty_file
empty_file is not a block special device.
Proceed anyway? (y,n) y
</verb></tscreen>
<item>Mount this empty file through the loopback devices (you need a reasonable new mount for this; read above).
<tscreen><verb>
mount -t ext2 -o loop=/dev/loop1 empty_file /mnt
</verb></tscreen>
<item>Copy files to /mnt and umount it afterwards.
<item>Use <tt>cdrecord</tt> on empty_file (which is no
longer empty) as if it were an ISO-9660-image.
</itemize>
If you want to make an entry in <tt>/etc/fstab</tt> for such
a CD, then disable the checking of the device file on system
startup. For example:
<tscreen><verb>
/dev/cdrom /cdrom ext2 defaults,ro 0 0
</verb></tscreen>
The first 0 means "don't include in dumps" (backup), the second
(=important) one means "don't check for errors on startup" (fsck would fail
to check the CD for errors).
<sect1>How to read the tracks from audio CDs?
<p>
There are several software packages available. The newest one is
"cdpranoia" and can be downloaded from
<quote>
<url url="http://www.xiph.org/paranoia/"><p>
</quote>
Or you want to try the combination of "cdda2wav" and "sox", available from
sunsite and its mirrors:
<quote>
<url url="ftp://sunsite.unc.edu/pub/Linux/apps/sound/cdrom/cdda2wav0.71.src.tar.gz"><p>
<url url="ftp://sunsite.unc.edu/pub/Linux/apps/sound/convert/sox-11gamma-cb3.tar.gz">
</quote>
<tt>cdda2wav</tt> enables you to get a specific interval (or a whole track)
from your audio CD and converts it into a .wav-file. <tt>sox</tt> converts
the WAV files back into the (audio CD) cdda-format so it can be written to
the CD-R using <tt>cdrecord</tt>. You don't necessarily need <tt>sox</tt> if
you use a recent version of <tt>cdrecord</tt>, because it has built-in
support for .au and .wav files.
<sect1>How to probe for SCSI devices after boot?
<p>
The file <tt>drivers/scsi/scsi.c</tt> contains the information
<tscreen><verb>
/*
* Usage: echo "scsi add-single-device 0 1 2 3" >/proc/scsi/scsi
* with "0 1 2 3" replaced by your "Host Channel Id Lun".
* Consider this feature BETA.
* CAUTION: This is not for hot plugging your peripherals. As
* SCSI was not designed for this you could damage your
* hardware !
* However perhaps it is legal to switch on an
* already connected device. It is perhaps not
* guaranteed this device doesn't corrupt an ongoing data transfer.
*/
</verb></tscreen>
Please note that this should only be used if your add SCSI devices to the
end of the chain. Inserting new SCSI devices into an existing chain
disturbs the naming of devices (directory /dev) and may destroy the
complete content of your hard disk.
Some kernel versions do not like re-scanning the SCSI bus at all and your
system may freeze solid when trying out the above. You have been warned.
<sect1>Is it possible to make a 1:1 copy of a data CD?
<p>
<!-- FIXME: this is highly unclear -->
<!-- FIXME: add this
The correct answer is yes and no. Yes, you can make a 1:1 copy of an
ISO data image. You cannot make a 1:1 copy if there is any
copy-protection in the means of subcode data - - at least, not without a
drive that can do MMC-DAO-Raw-Writing. Many Plextors can do this.
Yamahas can't.
-->
<!-- FIXME: add this:
cdrdao copy - -source-device 0,2,0 - -device 0,5,0 - -buffers 64
-->
Yes. But you should be aware of the fact that any errors while reading the
original (due to dust or scratches) will result in a defective copy.
Please note that both methods will fail on audio CDs! You have to use cdrdao or
cdda2wav on audio CDs.
First case: you have a CD-writer and a separate CD-ROM drive. By issuing the
command
<tscreen><verb>
cdrecord -v dev=0,6,0 speed=2 -isosize /dev/scd0
</verb></tscreen>
you read the data stream from the CD-ROM drive attached as
<tt>/dev/scd0</tt> and write it directly to the CD-writer.
Second case: you don't have a separate CD-ROM drive. In this case you have
to use the CD-writer to read out the CD-ROM first:
<tscreen><verb>
dd if=/dev/scd0 of=cdimage
</verb></tscreen>
This command reads the content of the CD-ROM from the device /dev/scd0 and
writes it into the file "cdimage". The contents of this file are equivalent
to what <tt>mkisofs</tt> produces, so you can proceed as described earlier
in this document (which is to take the file cdimage as input for cdrecord).
If you want to see a progress-meter and other fancy stuff, then you can also
use Jörg Schillings <tt>sdd</tt>.
In case you run into errors, then install a recent version of cdrecord,
which ships a tool called "readcd" (found under misc/). It gives you the
same result as dd, but reads sectors on the CD-ROM several times in case
of errors.
<sect1>Can Linux read Joliet CD-ROMs? (obsolete answer)
<p>
Yes. Newer Kernels (2.0.36 and the upcoming 2.2) have built-in support for
the joliet format. Remember you have to use both options in your
/etc/fstab: the keywords iso9660 and joliet (later is really an extension).
For more details, see <url url="http://www-plateau.cs.berkeley.edu/people/chaffee/joliet.html">.
<sect1>How do I read/mount CD-ROMs with the CD-writer?
<p>
Just as you do with regular CD-ROM drives. No tricks at all. Note that you
have to use the scd devices (SCSI CD-ROM) to mount CD-ROMs for reading,
even if you have an ATAPI CD-ROM (remember you configured your
ATAPI devices to act like SCSI). Example entry for /etc/fstab:
<tscreen><verb>
/dev/scd0 /cdrom iso9660 ro,user,noauto 0 0
</verb></tscreen>
<sect1>How to put even more data on the CD-R?
<p>
Use <tt>bzip2</tt> instead of any other compressor like <tt>gzip</tt> or
<tt>pkzip</tt>. It will save you up to 30% of disk-space for larger
(&gt;100kb) files. You can download it from
<quote>
<url url="http://www.muraroa.demon.co.uk/"><p>
</quote>
<!-- FIXME: add this
If you're storing images, such as JPEGS, many people set the quality
factor of the JPEG much higher than needed. This produces larger than
necessary files for only a marginally better image. By reducing the
quality down to about 75% from 95%, you can gain 40 to 50% more space.
The difference in image clarity will be negligible.
If an image was created with a high quality value, it can be changed by
using the command:
djpeg infile.jpg | cjpeg -smooth 5 -quality 75 -output outfile.jpg
-->
Instead of writing a true audio CD, you can optionally convert your
WAV audio files into MP3 audio files and store them on a ISO-9660
filesystem as regular files. Usually MPEG III give you a compression of
1:10. Of course, most CD-players are not able to read files... this is the
drawback. On the other hand, why not running the music for your next party
from hard disk? 18 Gbytes are enough for 3000-4000 titles. :-)
A software MPEG III-encoder is available from
<quote>
<url url="http://www.sulaco.org/mp3/"><p>
</quote>
A MPEG III-player is available from
<quote>
<url url="http://www.mpg123.org/"><p>
</quote>
For recorded speech, you may want to try to reduce its size using
<tt>shorten</tt> or "GSM lossy speech compression":
<quote>
<url url="ftp://svr-ftp.eng.cam.ac.uk/pub/comp.speech/"><p>
<url url="http://kbs.cs.tu-berlin.de/~jutta/toast.html"><p>
</quote>
<sect1>How to make bootable CD-ROMs?
<p>
You must have an 1.44 MB bootable floppy-disk. Create an exact image of
this floppy-disk by issuing the command
<tscreen><verb>
dd if=/dev/fd0 of=boot.img bs=18k
</verb></tscreen>
Place this floppy image into the directory holding the collection of your
files (or into a subdirectory of it, just as you like). Tell mkisofs about
this file with the option '-b' and also use '-c'. For details read the file
README.eltorito in the mkisofs-distribution.
An interesting application for a custom bootable CD is as a virus safe DOS-
or Windows-system. It saves you the money for the hard disks (if you have a
network and use samba to put the user-data on a file server). The German
computer magazine c't has a article about this issue in the issue 11/99,
page 206 (<url url="http://www.heise.de/">).
Some details about the bootable RedHat CD-ROM is available from <url url="http://members.bellatlantic.net/~smithrod/rhjol-technical.html">.
<sect1>How to make CD-ROMs writable like a hard disk?
<p>
There is an <it>overlay filesystem</it> available for Linux, which is
mounted over the CD-ROM and intercepts all writing operations. New and
modified files are stored elsewhere, but for the user it looks like the
CD-ROM is modified. For more information, see <url
url="http://home.att.net/~artnaseef/ovlfs/ovlfs.html">.
If that is not enough for your needs: wait for the UDF-filesystem to be
supported by Linux or help developing it (see <url
url="http://trylinux.com/projects/udf/">. At the moment only reading of
CD-media is supported due to a limitation in the CD-ROM drivers of the
Linux kernel.
<sect1>Is it possible to use several writers at once?
<p>
Yes. It is reported to work with at least 3 writers at full speed (6x) on a
PC with 233 Mhz and a single SCSI bus running kernel 2.2.12. You need
either a recent version of the Linux kernel (2.2.12 or higher).
<!--
or a a
kernel patch to get enough buffers in the SCSI generic driver (<url
url="ftp://ftp.fokus.gmd.de/pub/unix/cdrecord/alpha">; works up to 2.2.5).
-->
<sect1>What about Solaris, *BSD, AIX, HP-UX, etc.? Is my variant of Unix supported?
<p>
Only chapter 2 is Linux-specific. You can apply chapter 3 and 4 even if you
run another family of operating systems than Linux. Please see the files
README.NetBSD, README.aix, README.hpux, README.next,
README.solaris, README.sunos, README.vms or README.xxxBSD from the
cdrecord-distribution.
Probably yes. Compile cdrecord for your platform and issue the command
"cdrecord -scanbus". Read the README.* file for your Unix distributed with
the sources of cdrecord. However, not all variants of Unix can read the
RockRidge, Joliet or HFS extensions on your newly written CD-R.
<sect1>Where to store the local configuration permanently?
<p>
You have two options. Either you use the built-in configuration file for
cdrecord, or you use a shell wrapper like the one shown below. This
shell script reads a configuration file, which lists the options and
parameters for cdrecord line by line. The names are exactly the same
as on the command line, but without the leading dash. Comments are allowed.
Example:
<tscreen><verb>
# be verbose
v
# set the speed of the writer
speed=2
# the device-coordinates in the form BUS,ID,LUN
dev=0,6,0
</verb></tscreen>
The configuration files for the wrapper belong into /etc/cdrecord/
and must be referenced on the command line. Example: if you want
to refer to the configuration /etc/cdrecord/mywriter.cfg, then
you can issue the command "cdrecord.sh mywriter.cfg -audio track1...".
Everything after mywrite.cfg is passed to cdrecord.
<tscreen><verb>
#! /bin/bash
CFGDIR="/etc/cdrecord"
CFG="$1"
shift
ARGS_LEFT="$@"
if [ ! -f "$CFGDIR/$CFG" ]
then
echo "Configuration file $CFGDIR/$CFG not found. Exiting."
exit 1
fi
while read LINE
do
case $LINE in
\#*|"") continue;;
esac
old_IFS="$IFS"
IFS="$IFS="
set -- $LINE
IFS="$old_IFS"
O_NAME="$1"
O_VALUE=""
while shift
do
case $1 in
"") continue;;
esac
O_VALUE="$1"
done
if [ -z "$O_VALUE" ]
then
O_CDRECORD="$O_CDRECORD -$O_NAME "
continue
fi
O_CDRECORD="$O_CDRECORD $O_NAME=$O_VALUE "
done < "$CFGDIR/$CFG"
set -x #DEBUG
exec cdrecord $O_CDRECORD $ARGS_LEFT
echo "Execution of cdrecord failed."
</verb></tscreen>
<sect1>How can the CD-info be retrieved?
<p>
Somewhere behind the first 32 k on the CD, a block with information about
the CD is located. You can extract the information with the following
shell script:
<tscreen><verb>
#! /bin/bash
RD=/dev/cdrom
for i in 32768,7 32776,32 32808,32 32958,128 33086,128 33214,128 \
33342,128 33470,32 33581,16 33598,16 33615,16 33632,16
do
old_IFS="$IFS"
IFS=","
set -- $i
IFS="$old_IFS"
OFFSET=$1
LENGTH=$2
echo "*`dd if=$RD bs=1 skip=$OFFSET count=$LENGTH 2> /dev/null`#"
done
</verb></tscreen>
<sect1>What about re-writing
<p>
When overwriting CD-RW media, specify the parameter blank=fast to
cdrecord. That's all. See the man page of cdrecord for details about this
parameter.
<sect1>How to create a multi-session CD?
<p>
First of all, the image for a multi-session CD must be formatted using the
ISO-9660 filesystem using RockRidge-extensions. And you must use the option
-multi for cdrecord as long as you want to add further sessions. So at
least for the first session, you must specify the option -multi.
Some CD-writers have no support for CD-ROM XA mode 2 or for session-at-once
(SAO), so you need to specify the switch -data for cdrecord on the command
line.
The images for the second and subsequent sessions are a little bit more
complicated to generate. Mkisofs must know where the free space on the
CD-R begins. That information can be gathered by using the option -msinfo
on cdrecord (see example below).
<tscreen><verb>
shell&gt; NEXT_TRACK=`cdrecord -msinfo dev=0,6,0`
shell&gt; echo $NEXT_TRACK
shell&gt; mkisofs -R -o cd_image2 -C $NEXT_TRACK -M /dev/scd5
private_collection/ \
</verb></tscreen>
For more information, please read the file README.multi, which is
distributed with cdrecord.
<sect1>Should I use the SCSI adapter shipped with the writer?
<p>
Reported via email: Most CD-writer docs say to use a separate SCSI bus
if going from a CD-ROM to a CD-writer and I have seen this myself in
the following scenario:
Adaptec 2940UW SCSI card, a 24x SCSI CD-ROM and a 4x4 SCSI CD-writer. When
I got the CD-writer, it came with its own ISA SCSI card which could only
handle one device. I figured I'd toss this and use my better adaptec card
for all the stuff. I noticed it was quite prone to buffer under-runs when
recording at the 4x speed, but as soon as I tried hooking up the ISA SCSI
card, it had no problems. I know 2 other people (both using adaptec 2940
cards), who have experienced exactely the same symptoms, usually when writing
from a CD-ROM to a CD-recorder. Though I've never experienced the problem
when going from a hard drive to a CD-writer on the same bus.
<sect1>How to burn over the network?
<p>
Usally a file transfer with FTP is fast enough to feed a CD-recorder at
quadruple (4x) speed even over a 10 Mbit ethernet. You can couple the
ftp-client and cdrecord via a fifo. First create a fifo named cdimage:
<tscreen><verb>
mkfifo cdimage
ftp other.host.org
get cdimg cdimage
</verb></tscreen>
Then treat cdimage like a regular file, i.e. issue the following command:
<tscreen><verb>
cdrecord dev=0,1,0 speed=2 cdimage
</verb></tscreen>
Your ftp-client will notice when cdrecord wants to read from the file and
will start transfering data from the ftp-host.
<sect1>I hear a crack or click sound at the end of the each track.
<p>
You have to use disk-at-once mode (DAO) to get rid of the cracks.
<sect1>How can this be set up so that a user can burn CDs instead of always
being root?
<p>
You can add the setuid-bit to the cdrecord-executable. However, this might
be a security risk. Just setting the permissions on the device files does
not help as cdrecord issues privileged commands via the SCSI generic
interfaces.
<tscreen><verb>
which cdrecord
chown root.root /usr/bin/cdrecord
chmod 4111 /usr/bin/cdrecord
</verb></tscreen>
<sect1>Where do I get the "Yellow Book" and "Orange Book" standards?
<p>
You get the printed specifications from Philips and they are expensive.
<sect1>I've been searching for information on burning Video-CD under Linux.
<p>
Here you can find utilities for creation of MPEG videos and Video-CDs:
<url url="http://www.mainconcept.de/">
<url url="http://www.johanni.de/munich-vision/vcd/">
Political correct people mention the Berkeley-tools and other
YUV-strategies. Their usage is complicated, takes much time and
harddisk-space and gives you no audio track. I recommend to
use conceptually higher level applications like the ones mentioned
above.
<sect1>Which is easier to set up, IDE or SCSI?
<p>
SCSI CD-writers are slightly easier to set up with regard to CD-writing
under Linux. And they are reported to have better error recovery. If that
outweights the higher price cannot be answered generally.
<sect1>How can I overburn a CD using {cdrecord,cdrdao}?
<p>
Overburning a CD-R is nothing special. It is at your own risk that the data
fits on the CD-ROM, but thats all. There are no 650 Mbytes-limits in the
software under Linux.
<sect1>What will cdrecord do when it stops getting input from the pipe?
<p>
It will finish writing. So you can just couple your favourite backup tool
with cdrecord using a pipe, like in "bru -size=640m -f - | cdrecord
dev=0,1,0 speed=2 -". You have to take special care within the backup
utility if the backup spans multiple CD-Rs.
<sect1>Is there an equivalent to ignore=hdX for the ide-scsi emulation?
<p>
I know of no way, but anybody is welcome to add this feature to the
Linux kernel sources.
<sect1>How many times can you re-use CD-RW before they become faulty?
<p>
Good question.
<sect1>Which format to choose for a platform independant CD-ROM?
<p>
A CD-ROM to be read by all systems can only use the plain ISO 9660
format. That means stupid 8+3 filenames from old MS-DOS and without any HFS
(Macintosh), Joliet (Microsoft) or RockRidge (newer Unices) extensions.
There is no extension for longer filenames, which could be read by all
operating systems.
<sect1>Is multi-session for audio tracks possible?
<p>
Audio CD-players are only able to deal with audio tracks stored in the first
session. In other words, you cannot add audio tracks using subsequent
sessions. However, writing data tracks into the second session effectively
hides them from audio CD-players. This way you prevent having an silent
track on your mixed mode CD (audio and data mixed).
<sect1>What hardware resources do I need? Is an old Pentium enough?
<p>
An answer depends on your wishes. If you need a reason to buy a new
computer, here is the answer from the international association of computer
manufactures: Whatever you plan to do, you need a processor with 800
Mhz. Because it won't fit into your existing motherboard, you need a new
motherboard, too. The easiest solution is just to buy the typical complete
offer as seen in advertisements on TV. Please ignore the rest of this
section.
Now the case if you just want a rational answer: I wrote several CD-ROMs
sucessfully using a "486" with 66 Mhz. Although MS does not consider them
to be PCs anymore, but recommends to run a CE version on them (seen on the
CeBIT), Linux runs even fine on the predecessors of the Pentium and is even
able to write CDs. You can easily find out if the power of your hardware is
sufficient for writing CD-ROMs by testing it out. Just add the command line
switch -dummy when executing cdrecord and the laser will be kept off. Watch
the burning process.
<sect>Troubleshooting
<p>
Always remember, that you can still use corrupt CD-ROMs as coasters. :-)
<sect1>It doesn't work: under Linux
<p>
Please check first, that the writer works under the software it is shipped
with (=under another operating system). Concretely:
<itemize>
<item>Does the controller recognize the writer as a SCSI device?
<item>Does the driver software recognize the writer?
<item>Is it possible to make a CD using the accompanied software?
</itemize>
If "it doesn't even work" with the accompanied software you have a hardware
conflict or defective hardware. If it works and you use loadlin to boot
Linux, then that is a problem with loadlin. Loadlin makes a warm-boot with
most of the hardware already initialized and that can confuse the Linux
kernel.
<sect1>Error-message: No read access for 'dev=0,6,0'.
<p>
Under Linux, some versions of the C-library are incompatible (buggy), so
that an application linked against one version will not work with
another. An example for an error triggered by pre-compiled binaries is the
following:
<tscreen><verb>
[root@Blue /dev]# cdrecord -eject dev=0,6,0
cdrecord: No such file or directory. No read access for 'dev=0,6,0'.
</verb></tscreen>
The solution is to install a newer C-library.
<sect1>It doesn't work: under DOS and friends
<p>
Try to use Linux. Installation and configuration of SCSI drivers
for DOS is the hell. Linux is too complicated? Ha!
<sect1>SCSI errors during the burning phase
<p>
Most likely those errors are caused by
<itemize>
<item>missing dis-/reconnect feature on the SCSI bus
<item>insufficiently cooled hardware
<item>defective hardware (should be detected by 5.1.)
</itemize>
Under various circumstances SCSI devices dis- and reconnect themselves
(electronically) from the SCSI bus. If this feature is not available (check
controller and kernel parameters) some writers run into trouble during
burning or fixating the CD-R.
Especially the NCR 53c7,8xx SCSI driver has the feature disabled by
default, so you might want to check it first:
<tscreen><verb>
NCR53c7,8xx SCSI support [N/y/m/?] y
always negotiate synchronous transfers [N/y/?] (NEW) n
allow FAST-SCSI [10MHz] [N/y/?] (NEW) y
allow DISCONNECT [N/y/?] (NEW) y
</verb></tscreen>
<sect1>Medium errors
If cdrecord reports medium errors in the form of
"Sense Key: ... Medium Error, Segment ...", then the medium
is not empty. If you use CD-RW, then try to switch from
blank=fast to the more reliable blank=all. If you use CD-R
only, then make sure the CD-R has never seen a CD-writer before
or try out discs from another manufacturer.
<sect1>Newly written CDs are not readable on some players.
<p>
Some people reported problems with playing their self-written CDs. Very
old audio players or car devices can have problems with CD-Rs, although
this is extremly rare. Quite frequent are problems with CD-RWs, because
they don't reflect the laserlight as good as CD-Rs and factory-pressed
"silver" discs.
<!-- Steve Baker
Meantime, I think the CD-writer FAQ should perhaps be amended to include the
advice that for HP and Philips drives, you should try cdwrite if cdrecord
misbehaves.
-->
<sect1>My scanner stopped working after I loaded the ide-scsi module
<p>
By inserting the SCSI-hostadaptor emulation, the naming of SCSI devices
changes. If your scanner was /dev/sg0 before, it might be /dev/sg1 or
/dev/sg2 now. Prominent kernel developers did not think this is completely
braindead and denied solutions like devfs in the past. But that is another
story, the first thing you should try is to set the link /dev/scanner to
point to the actual generic SCSI device. Examples:
<tscreen><verb>
cd /dev
ls -l scanner # shows current setting
ln -sf sg2 scanner
# test the scanner
ln -sf sg1 scanner
# test the scanner
# and so on
</verb></tscreen>
Application developers should carefully think about support for this
dangerous and error prone naming scheme. Please consider at least
to use intermediate solutions like the SCSI coordinates used by
cdrecord.
<!--
"2.2.2.1. Generic SCSI devices
The devicefiles /dev/sd* and /dev/sr* for accessing SCSI harddisks and
SCSI CD-ROM drives are limited to block-oriented data transfer. This
makes them so fast and idealy suited for data storage. Driving the
laser of a CD-writer is a more complicated task and requires more than
block-oriented data transfer. To keep the sd* and sr* devices clean
and fast, a new type of SCSI-devices was introduced, the so called
generic SCSI-devices. As everthing can be done to SCSI-hardware
through the generic devices they are not fixed to a certain purpose -
therefore the name generic."
Your CD-writer is used as a CD-ROM
through the device scd0 and is used as a writer through the device sg0.
-->
<sect>Credits
<p>
Many thanks go to the readers of this HOWTO, who contributed actively to
its contents. As I don't had access to a CD-writer myself for several
years, reports about real live setups and experience have always been of
great value to me.
<descrip>
<tag/Doug Alcorn &lt;doug@lathi.net&gt;/
helped to improve the handling of newer kernels
<tag/Kalle Andersson &lt;kalle@sslug.dk&gt;/
How to write audio CDs directly from MP3.
<tag/Alan Brown &lt;alan@manawatu.net.nz&gt;/
<tag/Rick Cochran &lt;rick@msc.cornell.edu&gt;/
hint about dis-/reconnect disabled by default in
the ncr driver
<tag/Robert Doolittle &lt;bob.doolittle@sun.com&gt;/
good arguments for dropping cdwrite from the HOWTO
<tag/Markus Dickebohm &lt;m.dickebohm@uni-koeln.de&gt;/
<tag/Thomas Duffy &lt;tduffy@sgi.com&gt;/
major cleanup of syntax and spelling
<tag/Dave Forrest &lt;dforrest@virginia.edu&gt;/
fixed adapter spelling problems
<tag/Jos van Geffen &lt;jos@tnj.phys.tue.nl&gt;/
noted the problem in 4.9.
<tag/Bernhard Gubanka &lt;beg@ipp-garching.mpg.de&gt;/
noticed the need of a recent version of mount to
utilize the loopback device
<tag/Stephen Harris &lt;sweh@mpn.com&gt;/
contributed hint about writing audio CDs
<tag/Janne Himanka &lt;shem@oyt.oulu.fi&gt;/
pointer to kernel patch to read Joliet CD-ROMs
<tag/Stephan Noy &lt;stnoy@mi.uni-koeln.de&gt;/
information and experience about writing audio CDs
<tag/Don H. Olive &lt;don@andromeda.campbellsvil.edu&gt;/
URL of the mkhybrid tool
<tag/Jesper Pedersen &lt;jews@imada.ou.dk&gt;/
<tag/Pierre Pfister &lt;pp@uplift.fr&gt;/
helped to develop the recipe on 1:1 copies.
<tag/Daniel A. Quist &lt;dquist@cs.nmt.edu&gt;/
information about IDE CD-R and newer kernel versions
<tag/Martti.Rahkila@hut.fi/
Reported problem with pre-initialized writers when booting via loadlin.
<tag/Dale Scheetz &lt;dwarf@polaris.net&gt;/
<tag/Joerg Schilling &lt;schilling@fokus.gmd.de&gt;/
many informations about cdrecord
<tag/Martin Schulze &lt;joey@Infodrom.North.DE&gt;/
gave information about the cdwrite-mailinglist
<tag/Gerald C Snyder &lt;gcsnyd@loop.com&gt;/
tested writing of an ext2 CD-ROM (see 4.4)
<tag/Art Stone &lt;stone@math.ubc.ca&gt;/
had the idea to put non-ISO-9660 filesystems on a CD
<tag/The Sheepy One &lt;kero@escape.com&gt;/
suggested using defective CD-ROMs as coasters for drinks
<tag/Erwin Zoer &lt;ezoer@wxs.nl&gt;/
</descrip>
Futhermore, I would like to thank the following people for reporting
spelling mistakes: Bartosz Maruszewski
&lt;B.Maruszewski@zsmeie.torun.pl&gt;,
Alessandro Rubini &lt;rubini@prosa.it&gt;,
Ian Stirling &lt;ian@opus131.com&gt;, Brian H. Toby.
End of the Linux CD-Writing HOWTO. (You can stop reading here.)
</article>
<!-- <sect3>cdda2wav-0.95
<p>
cdda2wav reads audio data given by the cdrom drive and dumps it into
a wav sound file. The sampling format can be controlled by options.
<quote>
<url url="ftp://ftp.gwdg.de/pub/linux/misc/cdda2wav/">
</quote>
-->