Linux下光盘刻录全攻略
摘要:
本文讲述了怎样在Linux环境下刻录光盘。
--------------------------------------------------------------------------------
可能你已经读过Katja在我们过去刊物上发表的A whole new world这篇文章,现在我们继续Linux旅程。假如现在你有大量的声音和图像资料,你想把它们带回家,想象一下你该怎么来处理这件事情。把这所有的这 些东西刻录到光盘上就是一个好主意,本文将告诉你怎么来刻录光盘。
你需要什么?
硬件配置:
当然Linux必须已经安装好了并且在你的计算机上跑着,还要有一个光盘刻录机来完成工作。
如果你有一个SCSI刻录机的机会,那就非常棒了,你的刻录机可以被Linux核心可以直接识别出。你仅是检查你的SCSI卡是否被Linux支持就行了(参见 Linux支持的硬件库 )。所有的SCSI光盘刻录机都可以在Linux下工作。
如果是ATAPI/IDE接口的刻录机,你就不得不配置SCSI接口模拟了,使你的刻录机看上去象SCSI 设备,尽管硬件上的物理连接是通过IDE总线。xcdroast里面的README.atapi文件中作为例子描述了如何配置,我们也推 荐你阅读 linuxdoc.org 里面的CD Writing HOWTO章节。
对于USB刻录机请参考 mobilix.org/linux_usb_cd.html 里面的USB-CD Writer HOWTO章节。
由于我们都仅有使用SCSI接口刻录机的经验,因此本文所讲述的有关你容只能在SCSI刻录机上重现 。
光盘刻录软件:
如果要刻录光盘你需要以下程序:
cdrecord: 这个程序实际上与刻录机通讯。
mkisofs: 制作数据光盘是需要这个程序。用于生成一个叫ISO映像的光盘文件系统映像。
cdda2wav: 从音乐光盘中读取数字音乐数据需要它。
上面这三个软件都包含在cdrtools这个包里面,你可以从www.xcdroast.org 或者ftp.fokus.gmd/pub/unix/cdrecord/下载。
有了这些工具你就已经可以采用命令行来刻录光盘了。如果你想要一个更加漂亮友好的图形界面 的话,此外你还需要一个前台软件。虽然有很多前台软件可供利用,不过这篇文章中只讨论xcdroast( http://www.xcdroast.org )和koncd( http://www.koncd.org/ )。xcdroast似乎是用得最多的前台了,我们喜欢用koncd 是因为它确实简单易用。
安装
在大多数情况下xcdroast已经安装在你的计算机上了,至少Redhat发布版本已经采用pam-library库编译了,这就意味着如果你想要刻录 光盘它就总向你要root密码,你或许不希望把root密码给每一个想刻录光盘的用户吧。第二个缺点是不允许通过网络启动这个程序。因此,最好从http://www.xcdroast.org下载最新版本。这里有预编译好的包供大多公开发行版本直接利用。
koncd可以从www.koncd.org下载。最近版本的koncd依赖于QT/KDE的新特点。如果你不想在升级QT和KDE库上花费时间你可以用旧一点版本的koncd。在这篇文章中采用的是koncd-0.7.5运行在redhat7.1下。
普通用户(非root用户)刻录光盘
要刻录光盘你首先要有用于硬件通讯的/dev/sg*下这些设备文件的写权力。但是cdrecord也使用了一些要求root权限的实时扩展以避免在刻录 过程中缓冲区欠载。最好的解决办法是在cdrecord和cdda2wav上使用SUID。啊哈?SUID?不用担心。如果你想准确了解SUID是什么, 你可以阅读Guido写的 文件权限 这篇文章,现在你只要输入下面两条命令然后又忘记它就足够了,呵呵。:-)
chmod 4111 /usr/bin/cdrecord
chmod 4111 /usr/bin/cdda2wav
大家都知道使用SUID具有一定潜在的安全风险,不过跟把root口令告诉每一个想要刻录光盘的用户来说它的安全风险绝对的少。
如果你的光盘刻录机已经被正确地识别出来了,现在你就可以测试一下。只要运行:
cdrecord -scanbus
如果一切正常的话你应该看到类似于下面的输出:
0,6,0 6) 'PLEXTOR ' 'CD-ROM PX-W8220T ' '1.03' Removable CD-ROM
上面那些数字和描述可能随着你的硬件安装不同而不同。
你也可以在xcdroast或者koncd两者之一的SETUP按钮上单击以下,它们会检测你的刻录机是否被正确识别。
现在让我们最后开始刻录光盘了。
刻录光盘的一般注意事项
刻录光盘的四个必要步骤:
必须选择你要刻录到光盘上的数据/音乐。
必须给将要被刻录的光盘设置一些选项。例如如果你想刻录一张音乐光盘你就应该在TAO和DAO模式之间选择,如果刻录一张数据光盘,你就要设置一些文件系统的选项。
你必须创建一个用于将要被刻录到光盘上的文件的映像目录。如果你仅想把一张光盘完全复制到另外一张光盘你用"write on the fly"就够了,否则你必须先在硬盘上创建一个映像。
映像目录是将要写入光盘的数据临时存储的地方。对于音乐光盘来说它们是索引文件和饱含音乐的WAV文件,对于数据光盘来说是一个叫ISO映像的大文件。
正式开始刻录光盘拉。
光盘一般需要是一次性地写入,并且在写的过程中数据流不能被干扰。由于实时扩展缓冲区欠载导致刻坏光盘这仅是视窗用户的一个问题。在Linux环境下你不 用真的需要防止缓存欠载(BURN proof)。在光盘刻录机里面有一种叫做先进先出(FIFO)的特殊缓冲区用来补偿小的干扰,在linux下这就通常足以避免刻录失败。尽管如此,你仍 要小心谨慎,不要干那些占用CPU资源太多的工作。你可以浏览网页、编译软件...........但删除大的文件就可能出现问题,也许它足够干扰刻录写 的过程,从而导致刻坏光盘。
如果你担心缓冲欠载的话你可以在真正刻录光盘之前采用模拟写入(假写入)选项在刻录光盘之前首先测试光盘写入是否工作。刻录过程被采用真实数据测试,但是刻录机里面的激光头是关闭的。首先运行一次测试总比刻坏一张光盘以后重新来过好得多的。
实际上你通常必须一次性地刻录,这就意味着如果你拉了某些东西,即使是一个很小的文件的话你都得重新刻录一次。当然也有你能过后再添加一些东西的多段刻录 的可能性,不过我们在这里不讨论这种方法,因为多段刻录在很多光盘刻录机上不能读盘,有时候这也未必是真的,如果一张光盘的价钱低到我们绝对没有理由不用 这种方法的程度。
设置
当你启动koncd或者xcdroast的时候你就会看到它们都有一个setup的按钮。在这里你可以发现你的刻录机是否被正确识别出来以及设置一些普通选项。
现在让我们来看看xcdroas和koncd的设置过程:
xcdroast:
第一次运行的时候会跳出一个窗口说首先要用root用户运行并配置它(图1),这样就不用每个用户运行的时候都要这么完全重设置一次。
Device Scan: 这里你可以看到所有连接到SCSI总线的设备。
这里你可以选择你的刻录机以及数据/音乐从哪个设备读取。
对于"CD writer mode"你应该给定正确的驱动,不过通常采用"autodetect"就ok了。CD Writer FIFO Buffer size:这个参数取决于你的硬件。你必须翻看一下你的刻录机手册察找这个值的大小,通常这个值是4MB或者8MB。
因为一张光盘必须在没有数据流中断的情况下被写入(取决于光盘刻录机的设计),光盘刻录机上有一个用来避免仅由于小的干扰就导致刻录失败的先进先出的缓冲区(FIFO Buffer)。
在这里你必须指定一个用于ISO映像的临时存储目录。要求大于800M可用磁盘空间(你可以用df -k /临时目录 这个shell命令或者文件管理器来检查)。
Miscellaneous:
Audio: 用xcdroast来播放音乐,对刻录过程没有任何影响。DSP支持数字信号处理器,同时通过扬声器播放声音也是它的一部分。
Network: 如果是很多光盘的话,它们的标题信息可以从Internet上的一个数据库取得。如果你愿意的话可以在刻录光盘的时候请求这些信息,这样做可以节省很多输入的工作。
Logging: 生成一个日志文件。
Internationalization: 这里你可以选择你的语言,这样所有的都会用你选择的语言。
Options: 这里你可以例如设置了,当你鼠标光标移过选项按钮的时候你就可以看到一个提示栏。特别是你对这个软件不太了解的情况下,我们推荐你采用这些提示。
Users: 采用root用户登陆这个面板才会出来。这里你可以定义那些普通用户允许进行操作。
koncd:
在一个选择框里面你可以看到那些koncd自动检测出来的设备(图2)。你可以告诉软件那个写入设备在刻录的时候会写入(这应该是你的刻录机)以及它会从那个设备读入光盘。这可以是从你CD ROM读取,如果你只有一个光盘刻录机它可以用作读取或者写入光盘。
如果你的刻录机支持的话,你也可以选择防止缓冲欠载(“burn proof”)选项。当FIFO缓冲区几乎是空(看上去)的时候防止缓冲欠载(BURN proof)会降低写入速度。
(单纯的)音乐(音频)光盘
这里你应该先考虑一点格式上的问题。如果要歌曲是从另外一张音乐光盘上来的就没有问题了,你可以仅继续拷贝这张光盘就行了。但是另外你得注意到 cdrecord可以识别AU和WAV文件格式并且自动把它们转换到CD播放器可以播放的正确的格式,但是对于其它格式你就要先把它们转换到WAV格式 了,不然刻录好后听到的只有噪音了。转换MP3格式到WAV格式你可以采用下面的命令行:
mpg123 -w /tmp/song.wav song.mp3
这就可以让你用MP3音乐制作普通音乐光盘了。这样做虽然会占用更多的磁盘空间,不过这样做出来的CD几乎可以在任何一个CD播放器上播放。
在最后刻录光盘的时候你可以选择是否你希望拷贝是TAO或者DAO模式。在TAO模式中,你将在每首歌之间有2秒的停顿,而在DAO模式中不会有这样的间 隔停顿,这使DAO模式是现场音乐记录的模式选择。TAO(=Track at Once)轨道刻录,DAO(=Disk at Once)整盘刻录。
你可以完整地拷贝一张光盘,或者混合从不同光盘来的歌曲,也可以是其它声音文件例如从互联网上下载来的。
让我们先来看看如何完整拷贝一张光盘来:(图3)
xcdroast:
选择“Duplicate CD”。
从左边的菜单你可以看到:
CD/Image Info, Read Tracks, Verify CD, Play Audio-Tracks:
我们不明白上面这些菜单项有什么用处。如果你仅仅是要复制一张光盘,上面这些菜单项没有什么意义。至少我们这篇文章采用这个版本(xcdroast- 0.98alpha9)的xcdroast只允许做一个"write on the fly",这个你仅需要"Write CD"菜单就可以了(图4)。
Write CD:
在顶端你又要指定从哪个设备读取数据以及速率。下一步就是选择光盘刻录机和它的速率。读取数据的速率应该稍稍高于写入速率(避免缓冲区欠载)。
在左边你可以看到"CD to write":
这只是给你看的信息。除了"write on the fly"之外你没有其它选择。
右边你可以看到"write parameters":
CD R/RW type:在这里你必须指定将要刻录的音乐光盘适合于多少分钟的,然后在TAO和DAO模式之间选择(参见上文)。
你可以决定是否做模拟写入(参见上文)以及是否要刻录完成后光盘自动*出。"Pad tracks"在复制光盘的时候不重要。
用"Blank CD-RW"可以删除可改写光盘,最后用"WRITE CD"可以刻录光盘。
koncd:
选择"Copy CD"。
在顶部你可以删除一张可改写光盘上的你容以及设置刻录速率。下面的"options"你不需要选择任何东西。按下"START"就开始刻录了。
现在让我们来看看如果你想从不同地方来的音乐刻录成一张音乐唱片你该做些什么:
xcdroast
现在你要选择"Create CD"了。
让我们来看看这个菜单:
CD/Image info:
在左边你看到读取来的光盘你容;如果你的映像目录里面有东西的话,在右边你看到的是映像目录的你容。在这里你不要做什么,直接去"Read Tracks"就行了。
Read Tracks:
在顶部你要选择从哪些设备读取音乐数据以及映像目录。现在在这种情况下,光盘轨道以单独的WAV文件的形式写入,而不是作为单个大的映像文件写入。对于音 乐光盘来说,不要采用太高的速率,因为CD唱片指定只采用"1X"(1倍速)读取,太高的速率会增加产生位错误的可能性,从而降低CD质量。不管怎样采 用"4X"或者"8X"的速率就OK了。
选择你想要拷贝的音轨然后按下READ SELECTED TRACKS就读取你所要得音轨道映像目录了。
Verify CD:
如果你按下了VERIFY按钮,读取音轨就会进行无位错误校验。
Play Audio-Tracks:
用这个你可以播放在映像目录里面的歌曲。选择好你要播放的歌曲双击就行了。
Master tracks:
这个仅用于数据光盘,这会先忽略它。
Delete Tracks:
这里你可以看到有多少空间你已经用完了,还有多少剩余的,并且你可以随意从映像目录中删除全部或者部分轨道。
Write Tracks:
这里你必须先去第二个面板"Layout Tracks"。在右边你将看到映像目录的你容。选择轨道按下"add"来拷贝它们到左边用于刻录轨道的面板。回到"write tracks"面板。在这里你可以找到同样的选项已经在"Duplicate CD"下面被说明了。但是现在你必须选择"PAD tracks"选项。这将确保上面的所有.WAV文件适当地中止在扇区边界。CD唱片(Audio CD)格式要求所有的WAV文件是2352字节长度的整数倍。"PAD tracks"添加一些零字节来确保正确的长度。按下"WRITE CD"开始刻录光盘。
koncd:
选择"audio CD"。本文中所用的这个版本(0.7.5)的koncd还不支持从另外一张CD唱片读取单独的音轨进来,但是你可以从硬盘上选择许多WAV文件并且把它 们当作音轨写入光盘。单击"Add track",添加几个WAV文件到被选择的轨道列表。下面的"options"选择"Use padding",然后单击"start"开始刻录你的光盘。
(纯粹的)数据光盘
对于数据光盘来说需要一个文件系统,也就是我们经常说到光盘必须格式化。你必须选择你要的文件系统,这取决于你想要刻录出的光盘在什么操作系统上读。例如 描述光盘文件系统的ISO-9660标准就不允许长文件名,因此针对这个标准就制定出了一些扩展标准。Linux和Unix系统可以使用 RockRidge扩展标准,微软采用Joliet扩展标准。采用RockRidge格式你也可以有如同你从系统知道的那样具有权限等等。
推荐的方案是在同一张光盘上采用RockRidge和Joliet扩展标准。
如果你仅想从另外一张已经存在的光盘拷贝到一张光盘上就不用担心这么多了,因为那张光盘已经有了一个文件系统,这个也可以被拷贝的。
xcdroast:
选择"Duplicate CD"。
然后如同前面所说的什么都不用做了,只要按下"WRITE CD"。
koncd:
选择"Copy CD"(参见前文)图5。
如果你想从你的硬盘里面拷贝数据:
xcdroast:
选择"Create CD"然后是菜单左边的"Master Tracks"。
在"Master source"下面选择你要写进光盘的目录。你也可以选择已经在光盘上的的路径和名字(用左边的"redirect"按钮做这个)。
ISO 9660 options:
你可以选择一个预定义好的映像类型:
如果你希望光盘可以在Linux和Windows的计算机上都可以读的话只用选择RockRidge+Joliet就可以了。
在boot选项下你可以生成可启动光盘,不过这超过了本文的讨论范围。如果你想要可启动光盘的话,我们推荐你采用一个预先建立好的ISO映像文件(查阅文章末尾的参考文献)。
Create session/image:
这是一个非常重要的面板。在这里现在你可以生成一个在第一个面板选择好的文件的ISO映像。按下"master image to file"来做这个。
总是选择"fixation"(或者更好的是不要选择"Do not fixate after write"),除非你想做多段刻录,否则不选择fixation就不会生成你容表TOC(=Table of Contents),这样你的光盘在很多光驱上就不容易读。
现在开始"Write Tracks":
这里用到你在"Master tracks"面板下创建的映像。到"Layout tracks"面板,选择你的映像文件,按下"add"按钮。然后回到"Write tracks"面板,按下在底部的"write tracks"按钮。现在你的光盘就刻录了。 (图6)
注意:如果你要直接刻录硬盘上的iso文件,你只需要在setup->HDsetting中添加iso文件所在目录。然后在Write Tracks->Image Directory中选择这个目录。这时在下面的Layout Tracks的右栏ImageInformation就可以看见你要刻录的iso文件了。
koncd:
拷贝所有你想要写进光盘的文件到一个目录里面(用shell命令cp或者文件管理器)。
打开koncd,选择"Master CD"。
在"data"下面给出你拷贝好的文件的目录作为源目录。现在你有制作光盘的几种可能。我们建议首先生成一个ISO映像,然后把映像写到你的光盘去。在 Data->"image file"下输入将要生成的映像文件的名字。本文所用的这个koncd版本要求这个文件已经存在,因此先用shell命令"touch image"生成一个叫"image"的空文件。
到"options"选项,单击"Create CD image",按下右边的"calculate size",然后"start"。
一旦映像文件生成好,单击"Write CD"选项,不要选择"Create CD-image"。现在光盘刻录机开始为你刻录光盘了。
备份你的home目录
基本上你可以用"纯数据光盘"下讲述的方法备份所有东西。如果你的home目录下的数据量太大以至一张光盘不能装下的话你就应该采用选择单个子目录把它们写进不同的光盘。
提示和窍门
在最后刻录光盘前检查ISO映像是否完好是非常有用的,可以装上ISO映像当作一个真实的光盘来做这个:
转换到root用户:su -
创建一个空目录(作为装载点): mkdir /tmp/mycd
装上ISO映像(连接ISO映像到目录): mount -o loop -t iso9660 Image.iso /tmp/mycd
现在你可以用"ls"命令检查光盘映像了: ls /tmp/mycd
如果看上去没问题的话就可以卸载它了: umount/tmp/mycd
...........然后刻录映像到你的光盘去啦。
命令行工具
前面我们已经讨论了用来刻录光盘的两个图形前台软件,你也能仅采用命令行来刻录光盘。如果你察看cdrecord的帮助的话你可以看到好数百条选项,啊 噢......不用害怕啦。做起来比起初看上去要简单的多。下载cdrecordeasy和mkisofseasy这两个perl脚本。
它们包含在easycdscripts这个包里面 (easycdscripts下载页面)
用下面的命令解开包:
tar zxvf easycdscripts-0.1.tar.gz
现在运行命令cdrecord -scanbus。找到刻录机所在的行,记住这行开始的数字,这些数字看上去类似于0,4,0或者0,6,0......
编辑cdrecordeasy文件,在文件开始那块找到$dev=......这行,在$dev=......后面输入前面看到的数字。
现在我们的两个小脚本文件的安装就算完成了。创建一个数据光盘现在非常容易了:
拷贝所有你想刻进光盘的文件到一个目录下(例如 ~/cdrom)。今天来说硬盘非常大而且便宜,拷下几百M应该没有问题的拉。
运行命令: mkisofseasy ~/image.iso ~/cdrom
这就把~/cdrom下的所有文件生成到一个ISO映像里面去了。
运行如下命令来刻录光盘: cdrecordeasy ~/image.iso
就这样了,是不是比刚开始看到的容易得多拉?:-)