CD-Writing HOWTO 作者:Winfried Tr□per 译者:黄富强 v2.4.1, 16 December 1997 _________________________________________________________________ 这一份文件处理在 LINUX □写 CDs 的事儿. _________________________________________________________________ 1. 简介 * 1.1 版本声明 ( 这段不译 ) * 1.2 Suggested readings * 1.3 名词解释 ( 这段不译 ) * 1.4 支援的光碟烧录器 * 1.5 支援的特性 * 1.6 通讯论坛 * 1.7 可得性 2. 设定你的 Linux 系统来烧录光碟 * 2.1 设定 Linux 核心 * 2.2 硬体和 devicefiles * 2.3 取得软体来烧录光碟 3. 烧录光碟 * 3.1 烧录光碟片 (纯资料) * 3.2 烧录音乐光碟 * 3.3 混合式光碟 4. 常问问题及答案 * 4.1 "烧录程序有多敏感" * 4.2 "fragmentation 会否影响输出呢?" * 4.3 "是否可以将光碟影像档储存在 UMSDOS 档案系统中呢? " * 4.4 "有无方法可以克服 iso9660 的限制?" * 4.5 "怎样读取及写入音乐光碟?" * 4.6 "启动系统後怎样找寻SCSI-devices?" * 4.7 "可以进行一对一的光碟复制?" * 4.8 "Linux 可不可以读取 Joliet 光碟?" * 4.9 "怎样用可写光碟机读取光碟?" * 4.10 "怎样放多些资料到光碟中?" * 4.11 "How to make bootable CD-ROMs?" * 4.12 "How to make CD-ROMs writable somehow?" * 4.13 "Is it possible to use several writers at once?" * 4.14 "Which media is the best?" 5. 问题解决 * 5.1 在 Linux 下不行 * 5.2 Error-message: No read access for 'dev=2,0'. * 5.3 它不能在 DOS 一使用 * 5.4 烧录过程中有 SCSI 错误 6. 呜谢 (这段不译) _________________________________________________________________ 1. 简介 现在有很多人使用 Linux 来烧录光碟是因为它比较稳定和容易。没有蓝色画面和 没有找出软硬体组合的困难。只要你一旦正确设定好之後就能使用。这份 CD-Writing HOWTO解释了怎样设定,怎样将资料放上光碟上以及介绍一些有趣的 程式。 1.1 版本声明 ( 这段不译 ) Copyright Winfried Tr□per 1996,1997,1998,1999. 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. 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. Short: read and use at your own risk. 1.2 Suggested readings 这网址 [1]CD-R FAQ □有一般的 FAQ 关於空白光碟,光碟烧录器和烧录光碟所 需的软 件。 要令你的光碟能够读取光碟,你起码要看 Linux CD-ROM HOWTO Linux SCSI HOWTO 和 Linux Kernel HOWTO. 1.3 名词解释 ( 这段不译 ) CD-ROM stands for Compact Disc Read Only Memory, a storage medium utilizing an optical laser to sense microscopic pits on a silver shimmering disk. The silver shimmering comes from an aluminized layer which is the carrier. The pits represent the bits of the information (in some way) and are so petite that some billions of them fit on the disc. Thus a CD is a mass-storage medium. The term CD-R is a short form of CD-ROM recordable and refers to a CD that doesn't have those "microscopic pits" on it's surface. Thus it's empty. Instead of the silver aluminium layer a CD-R has a special film (colored) into which "microscopic pits" can be burned in. This is done by giving the laser which normally only senses the pits a little bit more power so he burns the pits. This action can only be taken once on a CD-R, although you can leave out some areas for later writing, creating a so called multi-session CD. The CD-ROM rewritable (short: CD-RW) was developed to come around the limitation of CD-R media. Here the laser can not even burn pits into the media, but it can also melt the media back into it's original state. This is possible, because the laser does not really burn holes into the media - you do not see a puff of smoke while burning and no voice from above tells you "target destroyed". What the laser really does is to trigger a phase change, thus the name "phase change devices" for CD-RW-writers. An example for a very similar technique used in daily life is the cleaning car in an ice-hockey stadion: during the pauses of the game, the car drives over the ice and fills the scratches in the ice (-> bits containing some sort of information about the game... hehehe) with melted splinter. This HOWTO deals with the task of writing CD-Rs and CD-RWs. Welcome on board, captain. 1.4 支援的光碟烧录器 你可以在这□得到一个详尽可用及不可用在各 unix 作业系统的型号列表 [2]http://www.guug.de:8080/cgi-bin/winni/lsc.pl. 以下是一个能够在 cdrecord 下使用的型号撮写列表: Acer: CDRW 6206A BTC: BCE 621E (IDE) Compro: CW-7502, CW-7502B Dysan: CRW-1622 Elite: Elite b444.41 Grundig: CDR 100 IPW Guillemot: Maxi CD-R 4X/8X HP: SureStore 4020i, SureStore 6020i, C4324, C4325 CD-Writer+ 7100, CD-Writer+ 7200i, CD-Writer+ 8100i, CD-Writer+ 8110i, Hi-Val: CDD-3610 JVC: XR-W2001, XR-W2010, XR-W2042, R-2626 Kodak: PCD 200, PCD 225, PCD 260, PCD 600 Matsushita: CW-7502 Memorex: CRW-620, CRW-1622 Microboards: PlayWrite 2000, PlayWrite 4000RW, PlayWrite 4001RW MicroNet: MasterCD Plus 4x4, MasterCD Plus 4x6 Mitsubishi: CDRW-226 Mitsumi: CR-2401-TS, CR-2600 TE, CR-2801 TE, CR-4801 TE Nomai: 680.RW OTI: CDRW 965 Olympus: CDS 615E, CDS 620E Optima: DisKovery 650 CD-R OTI: CDRW 965 Panasonic: CW-7502, CW-7582 Philips: CDD-521/10, CDD-522 CDD-2000, CDD-2600, CDD-3600, CDD-3610 Omniwriter 26, Omniwriter 26A Plasmon: CDR 480, CDR 4220, RF-4100, RF-4102, CDR 4400 Plextor: CDR PX-24 CS, PX-412 C, PX-R412 C PX-R810Ti, PleXwriter 412C Procom: PCDR 4 Ricoh: RO-1420C+, MP 1420C, MP 6200S, MP 6201S Sanyo: CRD-R24S Smart and Friendly: CD-RW226, CD-R1002, CD-R1002/PRO, CD-R1004, CD-R2004, CD-R2006 PLUS, CD-R2006 PRO, CD-R4000, CD-R4006, CD-R4012 Sony: CDU 920S, CDU 924, CDU 926S, CDU-928E, CDU 948S, CDRX 100E Taiyo Yuden: EW-50 TEAC: CD-R50S, CD-R55S, CDR-55S Traxdata: CRW 2260, CDR 4120, CDRW 4260, Turtle Beach: 2040R 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 CRW-2260, CRW-2260t, CRW-4250tx, CRW-4260 t, CRW-4260 tx, CRW-4261, CRW-4416 S Table 1: CD-writers supported under Linux 如果你的硬件不被支援的话,你仍然可以用 Linux 来建立光碟影像档不过你需要 用 DOS 的软件来将这个光碟影像档烧录至 CD-R . 1.5 支援的特性 现在有两类的工具用作烧录 CD-Rs :硬体驱动程式和资料格式化。硬体驱动程式 支援以下的功能: Supported Feature cdwrite-2.1 cdrecord-1.6 ------------------------------------------------ IDE/ATAPI no yes Parallel Port no yes CD-RW no yes Multisession only partial yes Table 2: cdwrite 是一个旧的软件,在这□提出只不过是为了完整而已。请使用 cdrecord 来代替,因为它能支援较多的光碟烧录器和它有较多的功能。资料格式 化的目的是要组织光碟上的资料 ( 放一个档案系统在光碟上 ) Feature mkisofs mkhybrid -------------------------------------------- ISO 9660 yes yes RockRidge yes yes El Torito yes yes HFS no yes Joliet no yes Table 3: ISO 9660 档案系统和 Extended-2 档案系统的最大分别在於,一旦你将资料写入 光碟内就不能作修改。ISO 9660 档案系统的限制有以下几个: * 目录树只能有 8 个子目录 (由光碟的根目录开始算起) (用 RockRidge 就可 以突破这个限制) * 档名最长只能有 32 个字元 * 650 MB 容量 RockRidge 是一个能令 ISO-9660 档案系统支援长档名及较深层目录结构的延伸 。当你在 DOS 或 Windows 底下读取光碟时这些延伸都是不可用的。 El Torito 是一个能够烧录开机光碟的延伸。你的个人电脑 基本输入/输出系统 也必须支援这个特性。粗略地说,光碟唯读记 忆体开始的 1.44 Mbyte 含有由你 供给的软磁片磁盘影像。基本输 入/输出系统会把这个影像当作软磁片般启动它 。 HFS 能让 macintosh 读取光碟内的资料,如果光碟内的资料 是 HFS 档案系统的 话.( 这是 MacOS 的原生档案系统 )。 Joliet 把长档名带到 Windows 的新版本中 (95, 98, NT).据作 者所知,暂时 没有一种工具能够令 DOS 及 Windows 3.11 支援长档 名。 部分 2.8 把提到的软体都一一列出。 1.6 通讯论坛 如果你想参加开发团队 (有一个主动 帮助 他们的心), 电邮至 cdwrite-request@other.debian.org 和在电邮内容写上 subscribe。 1.7 可得性 这份文件的最新版本可经常在这□获得 [3]http://www.guug.de/~winni/linux/. 2. 设定你的 Linux 系统来烧录光碟 如果你成功设定你的硬体和你 Linux 系统的其馀部份, 命令 cdrecord - scanbus 会给你看到一个可写入装置的列表。 这个 章节的目的是要在设定你的 Linux 系统时导引你,因此最後你会看到 如下的讯息: shell> cdrecord -scanbus Cdrecord release 1.7a1 Copyright (C) 1995-1998 J□g Schilling scsibus0: 0) 'Quantum ' 'XP34300 ' 'F76D' Disk 1) 'SEAGATE ' 'ST11200N ' '8334' Disk 2) * 3) 'TOSHIBA ' 'MK537FB/ ' '6258' Disk 4) 'WANGTEK ' '5150ES SCSI-36 ' 'ESB6' Removable Tape 5) 'EXABYTE ' 'EXB-8500-85QUE ' '0428' Removable Tape 6) 'TOSHIBA ' 'XM-3401TASUNSLCD' '3593' Removable CD-ROM 7) * scsibus1: 100) 'Quantum ' 'XP31070W ' 'L912' Disk 101) * 102) * 103) 'TEAC ' 'CD-R55S ' '1.0H' Removable CD-ROM 104) 'MATSHITA' 'CD-R CW-7502 ' '4.02' Removable CD-ROM 105) * 106) 'YAMAHA ' 'CDR400t ' '1.0d' Removable CD-ROM 107) * Listing 1: Detecting devices on your SCSI-bus 这个例子是由 J□g Schilling □供的,你现在会看到一共有四个可烧 录器。虽 然你现在是不能分别那一个光碟机是否为一个可写入光碟 机,不过你可以在产品 的识别号中看出它是一个唯读、可写或是可 重写光碟机。 2.1 设定 Linux 核心 一个 Linux 核心可以包含很多驱动程式和功能。你可以将那些驱动程式 编译进 核心影像中或者你可以将它们编译成模组,然後待有需要的时候 才将它们载入核 心中。而建议的方法是将必不可少的驱动程式编译进核 心。举例,如果你有一个 IDE 的 Harddisk,那你一定将IDE Harddisk 的驱动程式编译进核心中 ( 不要编 译成模组 )。 现存有三类的光碟烧录器:SCSI,IDE/ATAPI 和外置平行埠。表格四展示出 怎样 设定 Linux 的核心来支援这几种光碟烧录器。表格的第一列是设定选单 ,你可 以在这样找到有关的设定。表格的第二列是功能说明。表格的第三列是 模组名称 。 Y 代表是和意味著你应该把这个怪兽放入核心。M 代表模组和意味著你应该把它 编译成模组。 Y/M 代表你可以在两者之间任择其一。空的设定就千万不要改动, 不改动它可以令你能成功编译核心的机会增加。 要检查那些驱动程式在你的核心中 ( 不论是静态或动态载入的 ),你可以看这个 档案 /dev/devices 。要检查那些模组已载入,你可以用 'lsmod'。要检查有那 些 模 可以 载入的话,键入'modprobe -l'。如果你需要的模组不在你的 系统的 话,你就要重新编译核心及安装它。你可以参考 Kernel-HOWTO 来帮助你重 新编 译核心。有关怎样处理核心模组的最新资讯,可以参考 Module-HOWTO。 Sect. Description Module SCSI IDE PP ------------------------------------------------------------ BLOCK Enhanced IDE/MFM/RLL... Y BLOCK IDE/ATAPI CDROM ide-cd M/N/Y BLOCK SCSI hostadaptor emulation 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 Y Y FS Microsoft Joliet cdrom... joliet M M M Table 4: 如困你成功建立或找到所需的模组之後,你可将它们的名称加入 /etc/modules或 由自动工具来载入它们 (kmod,kerneld)。如果你不肯定的话,请参考 Linux 套 件 中的说明档。 "SCSI hostadaptor emulation" 这个功能在之前的版本是叫做 "SCSI emulation" ( 大概是 2.0.36 )。如困你打开这个选项,你就要将IDE/ATAPI 光 碟的驱动程式 编译成模组。要不然你就要将它取消和使用 SCSI 的光碟驱动程式 。因为 2.2 系列 的核心已不能同时使用 IDE 和 SCSI 的驱动程式在同一个硬体 上 ( 如困你是使用 2.0.36 核心的话,请看以下的说明 )。 Loopback device 是一个选择性的功能,它能帮你在烧录影像之前测试一下你的 影像档。 如果你要读取光碟,那你就需要 ISO 9660 档案系统的支援。这个驱动程式已自 动包含RockRidge 延伸。如果你需要MS Joliet 光碟延伸,你便需要编译它为模 组然後载入它。 在任何的情况下你都需要一个低阶的驱动程式。低阶是指那个驱动程式会直接与 硬 体沟通。至於 SCSI 和平行埠,有很多低阶的驱动程式可用,请看以下的说明 。 给 2.2 系统的特别提示 在核心版本 2.2.1 中,不要同时打开CONFIG_SCSI_MULTI_LUN 和ide-scsi support 这两个选项,因为 ide-scsi 有□而至不能这样做。无论如何,都建议 大家都把核心 升级为 2.2.5 。 一些用户报告说已编译好的 cdrecord 和 2.2 核心有冲突。这是 Linux 核心的 问题。解决的方法如下: * 你再次编译 cdrecord 以令它适应在 linux/include/scsi/sg.h □的真正 数值後,问题就可能解决了。 因为 sg 使用者介面是哑的,所以那些数值一 定要和核心中的数值一样才行。 * 这亦可能由於 sg 驱动程式不能取得足够的记忆体来给 DMA。J□g Schillings FTP-site : [4]ftp://ftp.fokus.gmd.de/pub/unix/cdrecord/alpha/ 找取 sg_buffer patch 来解决这个问题。 给 2.0 系列的特别提示 在核心 2.0.31 以前是有很多□引至不能读取光碟中最後一个档案。请升级到核 心 2.0.36。 对於 2.0.36 或以上的版本,你可以选择那种驱动程式(IDE or SCSI) 在那个 ATAPI-device上使用。更精确地说,你可以加入"SCSI emulation" 这个功能到 你的核心中和你可以在核心命令列中给特定的 device 启动模拟 ( 在系统启动 前或启动中 )。举例,如果你的光碟烧录器有这个 devicefile /dev/hdb,这样 加入以下的句子 hdb=ide-scsi。 image=/boot/zImage-2.0.36 label=Linux read-only append="hdb=ide-scsi" Listing 2: Example configuration for lilo (/etc/lilo.conf) linux "Linux 2.0.36" { image=/boot/zImage-2.0.36 cmdline= root=/dev/hda5 readonly hdb=ide-scsi } Listing 3: Example configuration for chos (/etc/chos.conf) 2.2 硬体和 devicefiles 在你安装所有必需的驱动程式以後, 重新这个新核心。它应该有你在往後部份所 需 要的所有功能。 [ 如果你是 devfs 的使用者,你就不需要理会以下手动设定 device files 的步 骤,因为 devfs 会为你办理一切的事情。] 进入 /dev 目录然後检查一下你有没有 loopback devices。 虽然这不是太大问 题如果你没有这些 devices,但是有了它们就会方便一些 (请看 3.5 ). 如果你 有它们的话你会看到 ls 指令显示loop0-loop7: shell> cd /dev shell> ls loop* loop0 loop1 loop2 loop3 loop4 loop5 loop6 loop7 Listing: devicefiles for loopback 如果你没有这些 device-files 的话,你可以用/dev/MAKEDEV-script 来建立它 们: shell> cd /dev/ shell> modprobe loop shell> ./MAKEDEV loop Listing: commands to create loopback devices 如果你有loop 模组编译进核心,最後的指令你才可以成功执行。你在这 □看到 有关怎样处理 loop-devicefiles 的方法你同样可以应用在其他 devicefiles 中(sg*, pg*, hd*, ...) 不过在以後的章节就不会明确说明。 IDE/ATAPI 光碟烧录器 ATAPI 代表 "SCSI 的命令在 IDE-bus 上执行"。换句话说,你的IDE/ATAPI 光碟 烧录器会说 SCSI 协定(不过带有一些限制),那即是它会模拟成好像一个 SCSI光 碟烧录器一样。 在 Linux 底下只要你运用"SCSI (hostadaptor) emulation" 这个核心功能那你 就可以令你的 IDE 光碟烧录器出现如同 SCSI-devices 那样。如果你使 ide-scsi 核心模组活动起来的话,你就会好像拥有一个 SCSI 光碟烧录器那样。 SCSI 光碟烧录器 请确定你的光碟烧录器能够被你电脑的基本输入/输出系统支援。事情就变得□意 思 如果你拥有硬件而电脑又不能支援它。 如困你想将你的 SCSI-drive 连接至你电脑的平行埠上的话,你需要特别的缆线 和特别的核心驱动程式。看这个网址 [5]http://www.torque.net/parport/parscsi.html 以取得更多的资料。 一般 SCSI devices /dev/sd* 和 /dev/sr* 这些 devicefiles 是用来存取 SCSI 硬碟和 SCSI 光碟 驱动器不过 SCSI 光碟驱动器的存取只限於 block-oriented 资料传送。这使 它 们那麽快速和适合於资料存储。不过驱动光碟烧录器的雷射是一件更加复杂的 事 情,而不是block-oriented 资料传送那麽简单。要使 sd* 和 sr* devices 保 持乾净和快速,一种新的装置 — generic SCSI-devices就衍生出来。 因为所有 对 SCSI 硬体的操作都可以透过 generic devices 来达成而它们又没有 特定的 目的所以它们就叫做 generic. 如果你要找这些 device,你可以到 /dev 的目录: shell> cd /dev shell> ls sg* sg0 sg1 sg2 sg3 sg4 sg5 sg6 sg7 如果你没有这些 device-files ,你可以在用下列的 script 来建立它们the /dev/MAKEDEV-script: shell> cd /dev/ shell> ./MAKEDEV sg 平行埠的光碟烧录器 真对不起,我没有这方面的解决方案。 请看 [6]http://www.torque.net/parport/paride.html 或你本区的档 案/usr/src/linux/Documentation/paride.txt. 2.3 取得软体来烧录光碟 你可以在这□找到一系列烧录光碟的软件 [7]http://www.fokus.gmd.de/research/cc/glone/employees/joerg.schilling /private/cdb.html.The CD building project for UNIX 命令列工具 你需要以下程式包之中任择其一来产生光碟原型: [8]ftp://tsx-11.mit.edu/pub/linux/packages/mkisofs/ (mkisofs) [9]ftp://ftp.ge.ucl.ac.uk/pub/mkhfs (mkhybrid) 视你的光碟烧录器型号而定,你需要以下其中之一个程式来将光碟原型写入: [10]ftp://ftp.fokus.gmd.de/pub/unix/cdrecord/ (cdrecord) 千万不要相信mkisofs 旧的说明档,它说你需要 cdwrite 版本 1.5 ,你只需要 cdrecord 就好了。注意:cdrecord 所包括的 mkiosfs 有一些附加的功能. Graphical user interfaces (optional) Front-ends 在 Linux 中真的只是 front-ends。即是你仍然需要安装命令列工具 , 不过你可以用一个较好的介面而已。 X-CD-Roast 是一个在 Linux 下容易烧录光碟的程式集。它结合了 cdrecord 和 mkisofs 在一个美丽的介面以中。 [11]http://www.fh-muenchen.de/home/ze/rz/services/projects/xcdroast /e_overview.html BurnIT 是一个 cdrecord, mksiofs and cdda2wav-0.95 的 JAVA front-end , ,这使它成为一个在 Unix 平台下完整的光碟烧录包装,你可以在这□取得: [12]http://sunsite.auc.dk/BurnIT/ 3. 烧录光碟 "If to smoke you turn I shall not cease to fiddle while you burn." (Roman emperor Nero about burning his own classic-CDs, AD64. He misunderstood it completely.) 在 Linux 下烧录光碟有以下两个步骤: * 将所需的资□ ( 档案,音乐或全部 ) 包装成一些特别格式的档案。 * 用cdrecord 将这些档案写入光碟中。 这一章会详尽讲解烧录资料及音乐光碟的步骤。 3.1 烧录光碟片 (纯资料) 请留意,由於收集软件所需的时间总会比预计中的长,故此有一个需要考虑的 问 题,便是後期才找到的档案不能写入原先烧录过或已完成烧录的光碟。 还要紧记光碟中有一定容量的空间 会用作储存ISO-9660-档案系统的资料,通 常会用上数MB,所以一只650MB的光碟 ,实际上只有约620MB可用。 建立光碟影像档 任何一种储存媒体,不论软片,硬碟,抑或光碟,在使用前都必须先建立 档案系 统,在DOS而言即格式化,使其拥有一个档案系统。这个档案系统 将会用作组织 及合并储存媒体上的档案。 一般用来格式化硬碟机分割区的工具都会先写入一个空的档案系统到硬碟分割区 中, 然後它便会被挂上和在使用者有需的时才抄写档案在其中。不过一只可烧录 光碟只能 写入一次,如果我们写入一个空的档案系统,它就会被格式化 — 不过 它永远都会是 一只空的光碟。可重写的光碟都是一样的,因为你不能改变 arbritary sectors ,不 过你可以消除整只光碟的内容。 所以我们需要一个工具能够一边抄写档案一边建立档案系统在 光碟中.这工具叫 做 mkisofs.以下就是这工具的使用 例子: mkisofs -r -o cd_image private_collection/ `---------' `-----------------' | | 写入至 以这个目录做输入 '-r' 选项设定所有在光碟中的档案为公众可读和开启 Rock Ridge 延伸。 这是 很多人想要的东西不过使用前你必须肯定知道你自己在做什麽。 (提示:没有 '-r' 选项的话那个 mount-point 就会变成 private_collection!)。 mkisofs 会尝试将所有档案的转为 DOS 的8.3格式以确保最高的兼容性。 若遇上 命名冲突 (不同档案有相同的名称),这时就会在档案中使用数字而有关该档 案 的资料就会在 STDERR (通常都是萤幕) 中显示。 不要担心:在 Linux 中你永远 不会看到 8.3 格式的档案因为 Linux 会使用 Rock Ridge 延伸而所有档案的资 料都 会在 Rock Ridge 延伸中 (使用权限,档案名称,等等)。 到现在你可能会问为什麽 mkisofs 的输出不直接写入可写光碟机中。这有 两个 原因: * mkisofs 不晓得怎样驱动可写光碟。 * 你可能需要在烧录前测试一下影像档。 * 在慢的机器中它会可靠些 (看章节 4.). 会在下面讲述怎样烧录一只光碟。 有些人可能会想不如建立一个独立的分割区来写入影像以代替档案。 我并不赞同 这同方法因为如果你写入到错误的分割区(由打字错误所造成)的话 ,你便会遗失 整个 Linux 系统 (我就试过这情况)。再者,这样做会造成磁碟 空间浪费因为光 碟影像是一种暂时性的资料,当它被烧录到光碟後它便可以删 除。不过用硬碟分 割区可以节省你删除一个 650 MB 档案的时间。 (不过如果 你有一个额外的分割 区可以令你节省删除影像档的时间。) 测试光碟影像档 Linux 可以好似磁碟分割区般将档案挂上。这是一个很好用的功能它可以用来 检 查目录配置和档案使用权限是不是你所要求那样。虽然现在的光碟很便宜, 但是 烧录过程依然是很费时的,所以你起码需要做一个快速的测试。 要将 光碟影像档 挂上 /cdrom ,请用以下的指令 mount -t iso9660 -o ro,loop=/dev/loop0 cd_image /cdrom 你现在可以在 /cdrom 底下检查下你的档案 — 现在的位置便是它 们在真正光碟 中的位置。要卸除光碟影像档,你只需要打 umount /cdrom 。(警告:如果你是 使用 Linux 核心 2.0.31 或以前的版本,你就有可能看不见 最後的几个档案。 请使用较新的核心。 The option -pad for cdrecord applies to audio-CDs only and the optional option -pad for mkisofs requires a patch, which is as much work to apply than to upgrade to a bug-free Linux-kernel.) 注意: 比较旧的 mount 是不能处理 loopback-devices。如果你是使用旧的 mount 的话现在是时候更新你的 Linux 了。 有很多人都建议我增加一些关於如何取得最新 mout 工具的资料 在这份 mini-HOWTO 中。但我都一一拒绝。如困你的 Linux 套件 附送了旧版本的 mount:报告这是一个臭□。如果你的 你的 Linux 套件是不能轻易升级,报 告这是一个臭□。 如果我将所有有关怎样更正设计不良 Linux 套件的资料,这份 mini-HOWTO 就会变得很长及很难阅读。 写入光碟影像到光碟中 没有太多的东西要做。如果你未试过这个指令,现在是时候试下试了 cdrecord -scanbus 这个指令会告诉你你的可写光碟机是挂在那个 SCIS-device 中。所有 其他的尝 试方法都已经被删除 (尤其是关於 generic SCSI devices 命 名规则 (naming scheme) 的危险方法)。 不过在介绍最後一个指今前先让我提醒你件事,因为可写入光碟机的缓 冲区是很 少,所以它要求所输入的资料流是连续的。正因如此,在烧录 的过程中是不可中 断的,否则会烧录失败。如果你删除一个很大的档案 就会很容易中断资料流。例 如:你删除一个 650 MB 大小档案的时候, 核心便需要更新硬碟大约 650,000 个 blocks (假设你的档案系统是 1k 一个 block 的话) 这需要很长的时间和很 可能会令资料流延迟几 秒。不过,如果在一部很快的电脑上看电邮,浏览网页或 甚至编译核心 都不会影响烧录程序。 请注意世上是没有一个烧录器可以重置雷射的位置和它不能返回 受干扰的点上再 次进行烧录。所以何任的震动或撞击都能使你正 在烧录的光碟受到破坏。 如果你准备好的话,你可以下以下的指今: shell> SCSI_BUS=0 # taken from listing 1 "scsibus0:" shell> SCSI_ID=6 # taken from listing 1 "TOSHIBA XM-3401" shell> SCSI_LUN=0 shell> cdrecord -v speed=2 dev=$SCSI_BUS,$SCSI_ID,$SCSI_LUN \ -data cd_image # 同上面一样,不过短些: shell> cdrecord -v speed=2 dev=0,6,0 -data cd_image 为了增加可读性,可写入光碟机的资讯都储存在这三个环境变数中: SCSI_BUS, SCSI_ID, SCSI_LUN。而选项 -data 则是用来烧录资料光 碟用的。 如果你是使用 cdrecord 来覆写 CD-RW,你一定要用 "blank= . . ." 来删除所 有旧有内容。请看 man-page 来学习有什麽方法来清除所有 CD-RW 的所有内容。 如果你有一部 400 Mhz 电脑,你可以将 mkisofs 的输出直接输出至 cdrecord 中: shell> IMG_SIZE=`mkisofs -R -q -print-size private_collection/` shell> 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 第一个指令只是用来检查一下光碟影像的内容并没有实质用途 (你需要用 cdrecord-distribution 中的 mkisofs 才可使用这个指令)。你的可写入 光碟可 能不需要知道光碟影像档的大小,这样你便不需要下这个指令。输 出的大小必需 用 tsize-parameter 来传递给 cdrecord。 (这个数字是储 存 IMG_SIZE 这个环 境变数中)。最後的指令是用 pipe 来串连 mkisofs 和 cdrecord 这两个指令。 3.2 烧录音乐光碟 要烧录一只音乐光碟的步骤与烧录资料光碟的步骤都大同小异。 最主要的二个分 别之一是音乐光碟包含音轨,而这些音轨必需组织成 独立的影像。所以如果你想 烧录十条音轨的话,你就要建立十个影像 档。另一个分别是光碟影像的格式不是 ISO-9660 (或者你想要的格或), 不过它是 "16 bit stereo samples in PCM coding at 44100 samples/second (44,1 kHz)". 其中一个软件叫做 sox 它可以将音乐档案转为所需的格式。 它的用法是很简单 直接: shell> sox killing-my-software.wav killing-my-software.cdr 这个指令会将 killing-my-software 这首歌由 WAV 格式转为 CDR 格式。 请看 man-page 来取得更多有关 sox 所确认的格式及延伸档名。因为转变 过程需要耗 用硬碟空间,所以 cdrecord 已内建支援 WAV 和 AU 格式了。 所以如果你的音 乐档案有 .wav 或 .au (and the samplerate "stereo, 16 bit, 44,1 kHz")延 伸的话,你便不需要做人手转换。 如果你有用 -audio 选项,cdrecord 就会将影像档烧录成音轨。而其他的选项 就如同烧录一般资料一样 (除非你有非特别的要求)。以下三个指令都是相同的不 过它们读取不同音乐档案格式: shell> cdrecord -v speed=2 dev=0,6,0 -audio track1.cdr track2.cdr... shell> cdrecord -v speed=2 dev=0,6,0 -audio track1.wav track2.wav... shell> cdrecord -v speed=2 dev=0,6,0 -audio track1.au track2.au... 其中一个特别例子是 MPEG-3 档案,它可以用 "mpg123 -s track1.mp3 > track.cdr" 来转换成所需要的格式。另一个方法是用 "8hz-mp3" 来转换成 WAV 档案格式。 如果你现在烧录音乐光碟的话,你会发现音轨之间会有 2 秒的延迟。 如果你的 可写入光碟机支援 "disc at once" (DAO) 的话,你可以尝试用最新的 cdrecord 来解决此一问题。 3.3 混合式光碟 没有太多要说。只示□了怎样混合使用 -data 和 -audio 选项以达到烧录混合 光碟: cdrecord -v dev=0,6,0 -data cd_image -audio track*.cdr 4. 常问问题及答案 4.1 "烧录程序有多敏感" 答案:这就要看你的烧录器了。通常较新的型号都会有 1MB 或更多,这样它便可 以 支持 1-2 秒没有资料。如果你想得到更多的资料你可以问生产商或看看硬体 手册。 不管那些资料缓冲器的大小如何你都需要保证一个长时间 300 kb/s 或 600 kb/s 的经常 输出。 一些硬碟密集的工作例如更新 locate-资料库。 减低 maxium flow rate 就肯定 会损坏你的光碟;你最好在烧录光碟前用 cron, at 或 anacron 来检查一下你 有否执行这些工作。 另一方面,有些人说他们能一面编译核心一面烧录光碟都没有任何问题。 的确你 要一部很快的机器才能做这个实验。 4.2 "fragmentation 会否影响输出呢?" Fragmentation 通常都不会影响输出。不过你可以很容易制造 pathological cases of fragmentation 来减低你的硬碟输出大约 100 kbyte/second。所以千 万不要这样做。:-) 是的,你的硬碟会 fragmented 经过经年的使用。如果越快fragmented,那档案 系统便越 满。经常保持 10% 或 20% 的空间,这样烧录光碟便没有问题了。 如果你不肯定的话你可以看看启动时的讯息,你就可以看到你的档案系统有几多 磁碟空间 fragmentation 的百份比。你可以用一个非常危险的指令 shell> e2fsck -n /dev/sda5 # '-n' is important! [stuff deleted - ignore any errors] /dev/sda5: 73/12288 files (12.3% non-contiguous) 在这个□例中磁碟空间似乎非常松散 — 不过这□只有 73 个非常小的档案在这 个档案系统中,所以这个只不过是一个很少的值。 现在有一个实验性的工具软件叫做 e2defrag 它可以用来 defragment extended-2 档案系统。不过现在的版本在私人环境中还是不够稳定。如果你真想 defragment 你 的档案系统,请先备份 (最好:两份),尝试 restore 备份,然 後建立一个新的档案系 统 (会破坏旧有的) 最後再 restore 备份。总之这是最 安全的技巧。 4.3 "是否可以将光碟影像档储存在 UMSDOS 档案系统中呢? " 可以。只有一个档案系统是不能可靠和快速来烧录光碟的,这就是 network filesystem (NFS)。 我现在是在一部 (486/66) PC 中使用 UMSDOS 来让Linux 和 DOS/Win 共享磁碟 空间,而这部 486 是专门来烧录光碟用的。 4.4 "有无方法可以克服 iso9660 的限制?" 可以。你可以用任何一个档案系统来烧录光碟。不过你不能在其他的操作系统中 使 用这只光碟。 用这个方法就行了: * 建立一个 650 MB 的空档案。 dd if=/dev/zero of="empty_file" bs=1024k count=650 * 然後建立一个extended-2 档案系统在这个档案之上 bash> /sbin/mke2fs empty_file empty_file is not a block special device. Proceed anyway? (y,n) y * 用loopback-devices 来挂上这个档案 mount -t ext2 -o loop=/dev/loop1 empty_file /mnt * 抄写一些档案到 /mnt 然後卸除。 * 用 cdwrite 或 cdrecord 来看看这个档案 ( 它现在该不是空的 ) 是不是 iso9660-影像。 如困你想在/etc/fstab 加一个出入口给那只光碟的话,你便需要取消对那只光 碟的检查,例如: /dev/cdrom /cdrom ext2 defaults,ro 0 0 第一个零代表 "不要包含在 dumps" ,第二个零代表 "在启动时不要检错误" ( fsck 将不会检查光碟内的错处 ) 。 4.5 "怎样读取及写入音乐光碟?" 现在有多个软件。最新的叫作 "cdpranoia" 它可以在以下地方下载 [13]http://www.mit.edu/afs/sipb/user/xiphmont/cdparanoia/index.html 或者你可以尝试 "cdda2wav" 和 "sox" 的组合,可以在 sunsite 和它的 mirror 中取得 [14]ftp://sunsite.unc.edu/pub/Linux/apps/sound/cdrom/cdda2wav0.71.s rc.tar.gz [15]ftp://sunsite.unc.edu/pub/Linux/apps/sound/convert/sox-11gamma- cb3.tar.gz cdda2wav 令你可以由光碟中抓取到一段特定的(或一整条)音轨然後可以 将它转 为 .wav 档案。 sox 可以将 wav 档案转回音乐光碟的cdda 格式, 然後可以用 cdwrite 将它烧录在光碟上。 如果你是使用最新版本的cdrecord ,你便不需要 使用 sox 因为 cdrecord 已内置支援 .au 和 .wav 档案。 4.6 "启动系统後怎样找寻SCSI-devices?" drivers/scsi/scsi.c 有所需要的资料。 /* * 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 hotplugging 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. */ Please note that this should only be used if your add SCSI-devices at 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 harddisk. 4.7 "可以进行一对一的光碟复制?" 可以。不过你要注意的是如果当读取光碟时有任何的错误发生,都可能令杪写失 败。 第一个情况:你有一个可写光碟机和一个唯读光碟机。你可以用以下的指令 cdwrite -v -D /dev/sgc --pad -b $(isosize /dev/scd0) /dev/scd0 or cdrecord -v dev=3,0 speed=2 -isosize /dev/scd0 你可以从/dev/scd0 读取资料流然後直接经由/dev/sgc 写入光碟中。 第二个情况:你没有另一个唯读光碟。你便需要用可写光碟机来读取光碟: dd if=/dev/scd0 of=cdimage bs=1c count=`isosize /dev/scd0` 这个指令等同於 mkisofs ,所以你可以用第三章所提及的方法继续 馀下的工作 。请注意这个方法是不适用於音乐光碟。 4.8 "Linux 可不可以读取 Joliet 光碟?" 可以。最新的核心 (2.0.36 和以後) 已内置支援 joliet 格式。请记著你要在 /etc/fstab 中使用 iso9660 和 joliet 两个选项。要取得更多资料,你可以看 [16]http://www-plateau.cs.berkeley.edu/people/chaffee/joliet.html. 4.9 "怎样用可写光碟机读取光碟?" 就如同你使用普通唯读光碟机一样。没有任何的特别。注意你要使 用scd-devices (唯读光碟机) 来读取光碟。以下便是在/etc/fstab 中的□例: /dev/scd0 /cdrom iso9660 ro,user,noauto 0 0 4.10 "怎样放多些资料到光碟中?" 用 bzip2 以取代其他的压缩器好像 gzip 或 pkzip。这会节省30%的磁碟空间。 你可以在以下地方下载 [17]http://www.muraroa.demon.co.uk/ 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 gives 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 harddisk? 18 Gbyte are enough for 3000-4000 titles. :-) A software MPEG III-encoder is available from [18]http://www.stud.ifi.uio.no/~larsi/other/8hz-mp3-cheng.tar.gz A MPEG III-player is available from [19]http://homepages.uni-tuebingen.de/student/michael.hipp/mpg123/ For recorded speech, you may want to try to reduce its size using shorten or "GSM lossy speech compression": [20]ftp://svr-ftp.eng.cam.ac.uk/pub/comp.speech/ [21]http://kbs.cs.tu-berlin.de/~jutta/toast.html 4.11 "How to make bootable CD-ROMs?" You must have an 1.44 MB bootable floppy-disk. Create an exact image of this floppy-disk by issuing the command dd if=/dev/fd0 of=boot.img bs=18k 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 harddisks (if you have a network and use samba to put the user-data on a fileserver). However, this is purely theoretical as nobody reported an actual recipe to me. Some details about the bootable RedHat CD-ROM is available from [22]http://www.channel1.com/users/rodsmith/rhjol-technical.html. 4.12 "How to make CD-ROMs writable somehow?" There is an overlay-filesystem 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 [23]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 [24]http://trylinux.com/projects/udf/. 4.13 "Is it possible to use several writers at once?" Yes. However, it has been only tested with two writers yet. And you need a kernel patch for more buffers in the SCSI-generic driver ( [25]ftp://ftp.fokus.gmd.de/pub/unix/cdrecord/alpha). 4.14 "Which media is the best?" The german computer magazine "c't" had a list of tips regarding the blank CD-Rs in their november 1996 issue: * "No-name" discs are generally not of highest quality and should better not be used. * If a recordable CD is defective, this is likely to apply to the whole batch (if you bought more than one at a time); maybe you are lucky and can at least use the first 500MB of such CD-Rs ... * Don't touch the CD-Rs at their shimmering side before writing. 5. 问题解决 Always remember, that you can still use corrupt CD-ROMs as coasters. :-) 5.1 在 Linux 下不行 请先检查你的可写光碟机能不能在其他操作系统中使用 然後检查以下的事情: * 控制器能否确认你的 SCSI device? * 驱动程式能否确认你的可写光碟机? * 可不可以用附送的软件烧录光碟? 如果你的可写不能在其他的操作系统中使用的话,很可能你有硬件冲 突或你买了 一个坏的硬件。 If it works under the other operating system and you use loadlin to boot Linux, then that is your problem. Loadlin makes a warm-boot with most of the hardware already initialized and that confuses the Linux-kernel. 5.2 Error-message: No read access for 'dev=2,0'. 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: [root@Blue /dev]# cdrecord -eject dev=2,0 cdrecord: No such file or directory. No read access for 'dev=2,0'. 5.3 它不能在 DOS 一使用 尝试使用 Linux 。在 DOS 底下安装及设定 SCSI 驱动程式是一件很困难的 工作 。 Linux 也不是很复杂的吗?哈! 5.4 烧录过程中有 SCSI 错误 通常这些错误都是由以下的状况所做成的 * SCSI bus 缺乏dis-/reconnect 功能 * 硬件散熬不足 * 硬件损坏 (应该可以用5.1. 的方法侦查) 在很多情况下 SCSI devices 需要由 SCSI bus 中 dis- and reconnect 自己。 如果缺少这个功能的话,有些可写入光碟机可能在绕录光碟时发生问题。 尤其是NCR 53c7,8xx SCSI 驱动程式会预设消除这个功能,你最好先检查一下: 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 6. 呜谢 (这段不译) Alan Brown Art Stone had the idea to put non-ISO-9660 filesystems on a CD Bartosz Maruszewski reported spelling mistakes Bernhard Gubanka noticed the need of a recent version of mount to utilize the loopback device Robert Doolittle good arguments for dropping cdwrite from the HOWTO Brian H. Toby polished the wording. Martin Schulze gave information about the cdwrite-mailinglist Dale Scheetz helped improving the section about creating the cdimage. Don H. Olive URL of the mkhybrid tool Erwin Zoer Gerald C Snyder tested writing of an ext2 CD-ROM (see 4.4) Janne Himanka pointer to kernel patch to read Joliet CD-ROMs Joerg Schilling information about cdrecord Jos van Geffen noted the problem in 4.9. Markus Dickebohm Jesper Pedersen Pierre Pfister helped to develop the recipe on 1:1 copies. Rick Cochran hint about dis-/reconnect disabled by default in the ncr driver Stephan Noy information and experience about writing audio-CDs Stephen Harris contributed hint about writing audio-CDs The Sheepy One suggested using defective CD-ROMs as coasters for drinks Martti.Rahkila@hut.fi Reported problem with pre-initialized writers when booting via loadlin. End of the Linux CD-Writing HOWTO References 1. http://www.fadden.com/cdrfaq/ 2. http://www.guug.de:8080/cgi-bin/winni/lsc.pl 3. http://www.guug.de/~winni/linux/ 4. ftp://ftp.fokus.gmd.de/pub/unix/cdrecord/alpha/ 5. http://www.torque.net/parport/parscsi.html 6. http://www.torque.net/parport/paride.html 7. http://www.fokus.gmd.de/research/cc/glone/employees/joerg.schilling/private/cdb.html 8. ftp://tsx-11.mit.edu/pub/linux/packages/mkisofs/ 9. ftp://ftp.ge.ucl.ac.uk/pub/mkhfs 10. ftp://ftp.fokus.gmd.de/pub/unix/cdrecord/ 11. http://www.fh-muenchen.de/home/ze/rz/services/projects/xcdroast/e_overview.html 12. http://sunsite.auc.dk/BurnIT/ 13. http://www.mit.edu/afs/sipb/user/xiphmont/cdparanoia/index.html 14. ftp://sunsite.unc.edu/pub/Linux/apps/sound/cdrom/cdda2wav0.71.src.tar.gz 15. ftp://sunsite.unc.edu/pub/Linux/apps/sound/convert/sox-11gamma-cb3.tar.gz 16. http://www-plateau.cs.berkeley.edu/people/chaffee/joliet.html 17. http://www.muraroa.demon.co.uk/ 18. http://www.stud.ifi.uio.no/~larsi/other/8hz-mp3-cheng.tar.gz 19. http://homepages.uni-tuebingen.de/student/michael.hipp/mpg123/ 20. ftp://svr-ftp.eng.cam.ac.uk/pub/comp.speech/ 21. http://kbs.cs.tu-berlin.de/~jutta/toast.html 22. http://www.channel1.com/users/rodsmith/rhjol-technical.html 23. http://home.att.net/~artnaseef/ovlfs/ovlfs.html 24. http://trylinux.com/projects/udf/ 25. ftp://ftp.fokus.gmd.de/pub/unix/cdrecord/alpha