刻录CD-R:cdrecord 和cdparanoia之Linux基本的应用程序(上)
特别声明:
复制任何版权保护的介质是非法行为。不要在任何非法场合下使用以下指令。
介绍
刻录光盘以前的确很麻烦,但是最近我只要使用以下命令(root用户,在X终端上):
xcdroast&
如果你可以运行这个程序,那么我也可以。你就不需要读更多了。
也许xcdroast在你的系统上不能正常工作,那么以下这些我以前经常使用的步骤可能对你有用。要特别注意的是,xcdroast只是以下描述的这些命令的图形用户界面前端工具,如果这些命令在你的系统上不能正常工作,那么xcdroast也不能正常工作。我的所有抱怨是,我那个号称“12x8x32x”CDRW,没有商标的便宜货可以以最高12x的速度写CDR盘片,但是对于CDRW只能以2x的速度读写(而不是号称的8x),而刻录音乐CD的时候居然只能达到1x的速度,不管我怎么配置都白费力气。
设置
所有的设置必须要使用root帐号。最新发行的版本(比如RedHat8.0)可能根本不需要设置。
检查一下你的boot文件,看看是否你的ide-scsi驱动器的这个参数已经传递给内核程序“hdb=ide-scsi”。需要的话,在以下文件里:
/etc/lilo.conf 或者 /boot/grub/grub.conf (取决于你使用哪一个启动程序)
加入可选项“hdb-ide-scsi”,这样,文件中对应的行看起来如下:
append="hdb=ide-scsi"
(对于/etc/lilo.conf,在linuxd的image那一个部分)
kernel /boot/vmlinuz-2.4.7-10 ro root=/dev/hda6 hdb=ide-scsi
(对应于/boot/grub/grub.conf)
如果你的CD刻录机不在“hdb”(第一个IDE接口的第二个驱动器),你可能需要自己做一些调整。它让你的IDE-ATAPI CD刻录机在Linux系统里看起来象是一个scsi设备(它其实不是真的scsi设备,视频监控系统 而是IDE设备,只不过假装成scsi设备)。当/etc/lilo.conf修改完成后,运行一遍lilo。对于grub,不需要重新运行。
追加loop设备如果这个设备文件不在你的/dev目录下,这不是硬性规定,但是如果你要刻录数据CD,这个功能很不错。loop设备可以直接挂载一个CD映像文件(看起来好像已经是文件系统的一部分)来检查CD的内容。当我完成RedHat的安装后,loop设备并不在我的系统上。所以我使用以下办法来自己追加它:
cd /dev/
./MAKEDEV loop
确认需要的程序模块都已经被加载到系统内核里
lsmod
如果有必要,把以下这两行内容加入到文件 /etc/rc.d/rc.local,这样所以要求的内核模块在计算机启动的时候都会被自动加载。
/sbin/insmod ide-scsi
/sbin/insmod loop
这两个内核模块对于IDE驱动器模拟SCSI设备,以及loop设备的支持是必须的。
检查,创建和修改设备文件 /dev/cdrom,确保它指向正确的设备,大概如下:
ls -l /dev/cdrom
ln -s /dev/scd0 /dev/cdrom (如果有必要)
为什么要这样做的原因是,/dev/cdrom可能指到其他的IDE设备上去了(比如,很有可能是/dev/hdb),既然你的CD刻录机已经在scsi设备的模拟模式下,这个修改是必须的。
你可能想把/dev/cdwriter也指到/dev/cdrom上,如下所示。但是如果只有一个CD驱动器就没有必要。
ln -s /dev/cdwriter /dev/cdrom
为了使/etc/lilo.conf的修改开始有效,重新启动计算机。检查一下CD刻录机是否能够正常读取数据。
检查cdrecord程序是否已经被安装,举例:
cdrecord –scanbus
如果没有安装,可以从你经常使用的Linux下载网站(比如http://www.linuxberg.com/)下载cdrecord程序。接着安装源代码,编译,安装程序,然后创建一个连接指到可执行程序上,这样启动程序的时候就简便多了。如果你可以找到一个*.rpm格式的文件,安装起来就更简单了。
cd /usr/local
tar -xvzf /the_path_to_which_you_downloaded/cdrecord-1.6.1.tar.gz
ls
cd cdrecord-1.6.1
make
make install
ls /opt/schily/bin/
ln -s /opt/schily/bin/* /usr/local/
cdrecord是一个用于刻录CD最实际好用的命令行工具。目前是有不少图形用户界面的CD刻录程序,但是如果最底层的cdrecord不能正常工作,这些工具都没有实际用处。我的建议是,在适当时候使用命令行――这会让你更好理解它是如何工作的,而且更加稳定和灵活。如果你需要制造CD的封面,安装和使用基于通信用户界面的前端程序当然更好一些,也使原来学习Windows的用户更方便上手。
看看你的CD刻录机是否已经被系统识别,如果是,白癜风 应该在输入以下命令后显示出来:
cdrecord –scanbus
制作数据CD
先创建一个CD映像文件包含你要刻录的数据:
mkisofs -r -o cd_image input_data_directory
以上命令将产生一个ISO-9660格式的(ISO标准的9660类型文件系统)文件,该文件包含所有在input_data_directory目录下的所有文件,这时,这个文件只是在硬盘上的一个普通文件。这个文件就是我制作CD要用到的一个映像文件。可选项-o指示接下来的一个参数是输出文件的文件名。参赛-f激活ISO协议的“Rock Ridge”扩展,这样,文件的属性能够被存储下来,而且所有的文件设置成可读(所有用户可读,不仅仅是文件的拥有者)。文件名被缩减成8.3 DOS文件名(8个字符文件名,3个字符扩展名)格式(尽管Linux支持的ISO-9660“Rock Ridge”扩展,它也可以保留所有的文件的权限和全文件名),这是让这个文件系统可以跨平台(DOS, Windows, Linux, Unix等等)使用的办法,对用户来说也更方便一些。
输入数据目录input_data_directory下的文件可以从系统中的不同目录产生一个标志链接,然后再合并起来(因为不需要复制数据,可以节约硬盘空间)。如果你决定这样做,你必须使用参赛 –f 告诉命令mkisofs允许使用标志链接,
mkisofs -r -f -o cd_image input_data_directory_containing_symlinks
你可能想要通过把CD映像文件挂载到loop设备上来检查CD的内容,使用以下命令:
mount -t iso9660 /dev/loop0 cd_image /mnt/cdrom
[ 现在文件的内容应该出现再目录/mnt/cdrom下面 ]
cd /mnt/cdrom
[ 通过loop设备检查文件的内容 ]
如果以上一切正常,你可以开始刻录你的数据CD了
cdrecord –v speed=8 dev=0,0,0 –data cd_image
“dev=”的第一个数字表示scsi的总线号(第一条总线0,第二条总线1, 依此类推),第二个数字表示在该scsi总线上的设备号(从0到7),第三个数字表示scsi设备的lun号码(一般是0)。你必须知道确切的号码,前面两个数字可以通过运行“cdrecord -scanbus”来获得,第三个数字总是“0”。确认你使用了正确的数字,否则你可能写到错误的设备上毁坏你的数据。
在刻录CD-R的时候,尽量避免运行一些CPU资源消耗很大的任务(比如在硬盘上删除或者创建一个很大的文件),否则可能会中途出错。象我那老版本的RedHat6.2,在我刻录CD的时候,不允许我运行任何任务。
类似的做法,我也可以把因特网上下载下来的CD ISO映像文件刻录到CD上。比如:(Debian的FAQ里)刻录一个映像文件“binary-i386-1.iso”的推荐做法是:
nice --18 cdrecord -eject -v speed=2 dev=0,6,0 -data -pad binary-i386-1.iso
这个命令指定以优先级别18(很高的任务级别)的运行CD刻录程序,可以减少发生错误的可能性。
制作音乐CD
在刻录CD之前,必须确认音轨文件是以下文件格式之一:*.cdr(我猜可能就是*.cdda.raw的格式), *.wav(音频文件)和*.au。
sox应用程序可以在不同的声音文件进行互相转换(sox可以识别很多不同的声音文件格式)。举例,我可以把“*.wav”文件转换成“ *.cdr”文件:
sox my_file.wav my_file.cdr
你不需要手工做文件格式转换 – cdrecord直接支持 *.wav 和 *.au 格式(它会自动把*.wav 文件和 *.au 文件转换成 *.cdr 文件)。这个非常方便,因为音频文件一般来说比较大。
音乐CD不包含任何文件系统,按“原始数据”格式存储。北京网站制作公司 这意味着你不能挂载一个音乐CD。还有,每个音轨都是单独存储的,看起来更像是CD上的不同分区。
如果你要把音乐CD上的内容写到硬盘上的对应文件里(典型的文件格式比如*.raw或者*.wav),你需要一个“CD刮写工具”。一个常见的程序是“cdparanoia”。
如果cdparanoia没有安装,你可以自己下载安装:
cd /usr/local
tar -xvzf /the_path_to_which_you_downloaded/cdparanoia-III-alpha9.6.src.tgz
ls
cd cdparanoia-III-alpha9.6
./configure
make
make install
从音乐CD上“刮写”第一个音轨,我可以使用:
cdparanoia 1
该命令将在当前目录下生成一个叫做“cdda.wav”的音频文件。
如果要“刮写”第一和第二个音轨存为“原始数据”格式,使用命令:
cdparanoia -B -p "1-2"
可选项 -B 指示使用批处理模式(batch mode),这样每个音轨都会存放在不同的文件里(这可能是你真正想要的,否则所有音轨都被放到同一个输出文件里)。可选项 -p 指示输出使用“原始数据”格式。对应的文件名是:track1.cdda.raw, track2.cdda.raw。
=============================================================================
以下命令按4x的速度“刮写”所有的音轨,每个音轨存为不同的*.wav文件:
cdparanoia -S 4 -B "1-"
注意你有足够的硬盘空间。如果你设置双系统启动,你也可以使用DOS上的分区。
如果要写音频文件到CD-R(W)上,我可以使用:
cdrecord -v speed=8 dev=0,0,0 -pad -dao -audio track*
有些音乐CD在各个音轨之间没有间隔。要复制这种类型的CD,最好使用工具“cdrdao”。
cdrdao read-cd --device 0,0,0 --buffers 64 --driver generic-mmc-raw --read-raw toc-file.toc
把以上刚生成的文件刻录到CD上,可以使用:
cdrdao write --device 0,0,0 --buffers 64 --driver generic-mmc --speed 12 toc-file.toc
还要注意的是CDRW(支持多次读写)盘片。有些家用音响不能播放CDRW的盘片。比如我家里的JVC播放机就不能播放用CDRW刻录的音乐。CDRW比较适合于存放数据而不适合存放音乐(除非我只想在我的计算机上播放这些盘片)。
创建混合模式的CD
创建混合模式的CD(通常指的是同时包括据数据和音乐的CD,比较常见的是游戏CD)不是什么很难的事情,举例如下:
mount -t iso9660 /dev/cdrom /mnt/cdrom
(挂载混合模式CD的数据部分)
mkisofs -r -o cd_image /mnt/cdrom
(把CD上数据做成是ISO系统文件)
umount /mnt/cdrom
(卸载CD)
cdparanoia -B "2-"
(从音乐CD上“刮写”除了第一道音轨之外的所有音轨,因为第一个音轨要用来存放数据)
cdrecord -v speed=2 dev=0,0,0 -data cd_image -audio track*
(把数据和音乐一个接一个的写到光盘上)
CD复制
绝大部分的CD都可以使用以上方法把数据或者音乐复制到硬盘上。北京网站制作公司 但是有些CD却不行。
举个例子,以下这些CD必须用特殊的办法来处理:可自启动的CD(比如Linux的安装光盘),要求标签的CD,有数据错误的CD盘片等。对于数据CD,我一般使用以下命令做一个备份:
dd if=/dev/cdrom f=cd_image
cdrecord -v speed=2 dev=1,0,0 -data cd_image
第一条命令: dd复制所有输入文件(在这个例子里是/dev/cdrom)到硬盘上的一个输出文件上(在这个例子里, 文件存放在当前的目录下,文件名是cd_image)。
第二条命令: cdrecord复制文件上面产生的文件“cd_image”到一张空白的CD上。
对于有数据错误的CD,你可以尝试使用:
dd conv=noerror,notrunc if=/dev/cdrom f=cd_image
cdrecord -v speed=2 dev=1,0,0 -data cd_image
可选项“conv=noerror,notrunc”指定潜在的读盘错误将被忽略,出错的文件不要截断。对于音乐CD,我使用以下命令:
cdparanoia -B "1-"
(把音乐CD所有音轨刮写到当前目录下,对应的音频文件的名称是track01.cdda.wav, track02.cdda.wav…)
cdrecord -v speed=2 dev=1,0,0 -audio track*
(把所有的音频文件刻录到CD上,每个音轨之间的时间间隔是2秒)
如果要以最准确的方法复制CD, cdrecord手册的建议如下:
cdda2wav -v255 -D2,0 -B –Owav
cdrecord -v dev=2,0 -dao -useinfo *.wav
如果要复制一张混合模式的CD,使用:
dd if=/dev/cdrom f=cd_image
(当数据部分结束,音轨部分开始的时候,dd命令会有一个错误信息,这个错误是意料之中,不会造成什么没有问题)
cdparanoia -B "2-"
(“刮写”音乐CD上除了第一道音轨以外的所有音轨,因为第一道上面存放的数据内容)
cdrecord -v speed=2 dev=1,0,0 -data cd_image -audio track*
(再把所有的数据和音频文件一个接一个的写道CD上)
可多次复写的CD(CDRW,Re-writable CDs)
CDRW的处理和普通的CDR(write-once CD,只能写一次)没有什么很大的区别。但是在你使用之前,必须把它变成“清洗”成空白的盘片:
cdrecord -v speed=2 dev=1,0,0 blank=fast
关于如何“清洗”CDRW盘片,使用命令:
cdrecord blank=help
举个例子,以下“清洗盘片”的命令在我的计算机上大概要运行半小时,北京做网站价格 但是如果没有什么敏感数据在上面,也不是非要这样做不可。
cdrecord dev=0,0,0 blank=disk
还有,要记得一些老的音响设备不能播放CD-R刻录的音乐。
简化一些冗长的命令
要简化在使用cdrecord(或者cdrdao)冗长的命令,我可以使用把以下一行内容加入道文件 /etc/bashrc里:
alias cdrecord="cdrecord -v speed=2 dev=1,0,0"
重新登录后使得/etc/bashrc开始有效。然后,我就可以使用以下短得多的命令 (不需要老是指定CD刻录机的速度和设备的名字):
cdrecord -audio track*
本文资料来源于http://www.websupport.cn/