下一页 上一页 目录

4. 致亲爱的温弗里德,...

本节通常被称为“常见问题解答”。如果您在伴侣、孩子或狗方面遇到问题,请随时发送,只要它与 CD-R 刻录相关或具有娱乐性即可。

4.1 刻录过程有多敏感?

测试一下。使用 -dummy 选项执行 cdrecord 的空运行。像往常一样执行所有操作,并观察刻录过程是否能顺利进行。

如果您直接从 mkisofs 向 cdrecord 提供数据,那么磁盘密集型进程(如更新 locate 数据库)会降低最大流速,并可能损坏 CD。您最好检查一下,在旧机器上刻录 CD-R 时,是否没有通过 cronatanacron 启动此类进程。

4.2 文件碎片化会对吞吐量产生不良影响吗?

文件碎片化通常非常低,以至于其影响不被注意到。但是,您可以轻松构建病态的碎片化案例,这会将硬盘的吞吐量降低到每秒 100 千字节以下。所以不要那样做。 :-) 是的,硬盘上的文件会随着时间的推移变得碎片化。文件系统越满,碎片化速度越快。始终留出 10% 或 20% 的可用空间,您应该可以顺利地进行 CD-R 刻录。

如果您不确定,请查看启动时打印的消息。在检查文件系统时会报告碎片化的百分比。您可以使用非常危险的命令检查此值

shell> e2fsck -n  /dev/sda5        # '-n' is important!
[stuff deleted -- ignore any errors]
/dev/sda5: 73/12288 files (12.3% non-contiguous)

在这个例子中,碎片化似乎非常高——但文件系统上只有 73 个非常小的文件。因此,该值并不令人担忧。

有一个名为 e2defrag 的实验性实用程序,用于整理 extended-2 文件系统。当前版本的工作可靠性不足以用于甚至私人环境。如果您真的想整理文件系统,请制作备份副本(最好是两个副本),练习恢复数据,然后创建一个新的文件系统(这将销毁旧的)并恢复数据。这种方法目前是最安全的技术。

4.3 是否可以将 CD 镜像存储在 UMSDOS 文件系统上?

是的。唯一不可靠且速度不足以从中刻录 CD-ROM 的文件系统是网络文件系统 (NFS)。我曾经自己使用 UMSDOS 在专门用于刻录 CD-ROM 的 PC (486/66) 上共享 Linux 和 DOS/Win 之间的磁盘空间。

4.4 有没有办法绕过 ISO-9660 的限制?

是的。您可以将任何您喜欢的文件系统放在 CD 上。但是除 Linux 以外的其他操作系统将无法处理此 CD。以下是方法

如果您想在 /etc/fstab 中为此类 CD 创建条目,则禁用系统启动时对设备文件的检查。例如

/dev/cdrom  /cdrom  ext2  defaults,ro  0 0

第一个 0 表示“不包含在转储中”(备份),第二个(=重要)表示“启动时不检查错误”(fsck 将无法检查 CD 是否有错误)。

4.5 如何从音频 CD 读取音轨?

有几个软件包可用。最新的一个是 “cdpranoia”,可以从以下网址下载

http://www.xiph.org/paranoia/

或者您想尝试 “cdda2wav” 和 “sox” 的组合,可从 sunsite 及其镜像站点获得

ftp://sunsite.unc.edu/pub/Linux/apps/sound/cdrom/cdda2wav0.71.src.tar.gz

ftp://sunsite.unc.edu/pub/Linux/apps/sound/convert/sox-11gamma-cb3.tar.gz

cdda2wav 使您能够从音频 CD 中获取特定的时间间隔(或整个音轨),并将其转换为 .wav 文件。sox 将 WAV 文件转换回(音频 CD)cdda 格式,以便可以使用 cdrecord 将其写入 CD-R。如果您使用较新版本的 cdrecord,则不一定需要 sox,因为它内置了对 .au 和 .wav 文件的支持。

4.6 如何在启动后探测 SCSI 设备?

文件 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 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.
 */

请注意,这仅应在您将 SCSI 设备添加到链的末尾时使用。将新的 SCSI 设备插入现有链会扰乱设备(目录 /dev)的命名,并可能破坏硬盘的全部内容。

某些内核版本根本不喜欢重新扫描 SCSI 总线,当您尝试上述操作时,您的系统可能会完全冻结。已警告过您。

4.7 是否可以制作数据 CD 的 1:1 副本?

是的。但是您应该意识到,读取原始 CD 时发生的任何错误(由于灰尘或划痕)都会导致副本有缺陷。请注意,这两种方法都将在音频 CD 上失败!您必须在音频 CD 上使用 cdrdao 或 cdda2wav。

第一种情况:您有一个 CD 刻录机和一个单独的 CD-ROM 驱动器。通过发出命令

cdrecord -v dev=0,6,0 speed=2 -isosize /dev/scd0

您可以从连接为 /dev/scd0 的 CD-ROM 驱动器读取数据流,并将其直接写入 CD 刻录机。

第二种情况:您没有单独的 CD-ROM 驱动器。在这种情况下,您必须首先使用 CD 刻录机读出 CD-ROM

dd if=/dev/scd0 of=cdimage

此命令从设备 /dev/scd0 读取 CD-ROM 的内容,并将其写入文件 “cdimage”。此文件的内容等同于 mkisofs 生成的内容,因此您可以按照本文档前面描述的方式继续操作(即将文件 cdimage 作为 cdrecord 的输入)。如果您想查看进度条和其他花哨的东西,那么您也可以使用 Jörg Schilling 的 sdd

如果您遇到错误,请安装最新版本的 cdrecord,其中附带了一个名为 “readcd” 的工具(在 misc/ 下找到)。它给您与 dd 相同的结果,但在发生错误时会多次读取 CD-ROM 上的扇区。

4.8 Linux 可以读取 Joliet CD-ROM 吗?(过时的答案)

是的。较新的内核(2.0.36 和即将到来的 2.2)内置了对 joliet 格式的支持。请记住,您必须在 /etc/fstab 中同时使用这两个选项:关键字 iso9660 和 joliet(后者实际上是一个扩展)。有关更多详细信息,请参见 http://www-plateau.cs.berkeley.edu/people/chaffee/joliet.html

4.9 我如何使用 CD 刻录机读取/挂载 CD-ROM?

就像您对常规 CD-ROM 驱动器所做的那样。没有任何技巧。请注意,即使您有 ATAPI CD-ROM,也必须使用 scd 设备(SCSI CD-ROM)来挂载 CD-ROM 以进行读取(请记住,您已将 ATAPI 设备配置为像 SCSI 一样工作)。/etc/fstab 的示例条目

/dev/scd0  /cdrom  iso9660  ro,user,noauto  0  0

4.10 如何在 CD-R 上放置更多数据?

使用 bzip2 而不是任何其他压缩器,如 gzippkzip。对于较大的(>100kb)文件,它将为您节省高达 30% 的磁盘空间。您可以从以下网址下载它

http://www.muraroa.demon.co.uk/

您可以选择不写入真正的音频 CD,而是将 WAV 音频文件转换为 MP3 音频文件,并将它们作为常规文件存储在 ISO-9660 文件系统上。通常,MPEG III 给您的压缩比为 1:10。当然,大多数 CD 播放器无法读取文件......这是缺点。另一方面,为什么不从硬盘驱动器上为您的下一个聚会播放音乐呢?18 Gbytes 足以容纳 3000-4000 首曲目。 :-)

一个软件 MPEG III 编码器可从以下网址获得

http://www.sulaco.org/mp3/

一个 MPEG III 播放器可从以下网址获得

http://www.mpg123.org/

对于录制的语音,您可能希望尝试使用 shorten 或 “GSM 有损语音压缩” 来减小其大小

ftp://svr-ftp.eng.cam.ac.uk/pub/comp.speech/

http://kbs.cs.tu-berlin.de/~jutta/toast.html

4.11 如何制作可引导的 CD-ROM?

您必须有一个 1.44 MB 的可引导软盘。通过发出命令创建此软盘的精确镜像

dd if=/dev/fd0 of=boot.img bs=18k

将此软盘镜像放在保存文件集合的目录中(或其子目录中,随您喜欢)。使用选项 '-b' 告知 mkisofs 此文件,并同时使用 '-c'。有关详细信息,请阅读 mkisofs 发行版中的文件 README.eltorito。

自定义可引导 CD 的一个有趣应用是作为病毒安全的 DOS 或 Windows 系统。如果您有网络并使用 samba 将用户数据放在文件服务器上,它可以为您节省购买硬盘的费用。德国计算机杂志 c't 在 11/99 期第 206 页(http://www.heise.de/)中有一篇关于此问题的文章。

有关可引导 RedHat CD-ROM 的一些详细信息,请参见 http://members.bellatlantic.net/~smithrod/rhjol-technical.html

4.12 如何使 CD-ROM 像硬盘一样可写?

Linux 有一个可用的覆盖文件系统,它挂载在 CD-ROM 之上并拦截所有写入操作。新的和修改的文件存储在其他地方,但对于用户来说,它看起来像 CD-ROM 已被修改。有关更多信息,请参见 http://home.att.net/~artnaseef/ovlfs/ovlfs.html

如果这不足以满足您的需求:请等待 Linux 支持 UDF 文件系统,或帮助开发它(参见 http://trylinux.com/projects/udf/。目前,由于 Linux 内核的 CD-ROM 驱动程序中的限制,仅支持读取 CD 介质。

4.13 是否可以一次使用多个刻录机?

是的。据报告,在配备 233 Mhz 的 PC 和运行内核 2.2.12 的单个 SCSI 总线上,至少 3 个刻录机以全速 (6x) 工作。您需要最新版本的 Linux 内核(2.2.12 或更高版本)。

4.14 Solaris、*BSD、AIX、HP-UX 等呢?是否支持我的 Unix 变体?

只有第 2 章是 Linux 特有的。即使您运行的操作系统系列不是 Linux,您也可以应用第 3 章和第 4 章。请参见 cdrecord 发行版中的文件 README.NetBSD、README.aix、README.hpux、README.next、README.solaris、README.sunos、README.vms 或 README.xxxBSD。

可能可以。为您的平台编译 cdrecord 并发出命令 “cdrecord -scanbus”。阅读随 cdrecord 源代码一起分发的 README.* 文件以了解您的 Unix 版本。但是,并非所有 Unix 变体都可以读取您新刻录的 CD-R 上的 RockRidge、Joliet 或 HFS 扩展。

4.15 在哪里永久存储本地配置?

您有两个选择。要么使用 cdrecord 的内置配置文件,要么使用如下所示的 shell 包装器。此 shell 脚本读取一个配置文件,该文件逐行列出 cdrecord 的选项和参数。名称与命令行上的名称完全相同,但没有前导破折号。允许注释。例子

# be verbose
v
# set the speed of the writer
speed=2
# the device-coordinates in the form BUS,ID,LUN
dev=0,6,0

包装器的配置文件属于 /etc/cdrecord/,并且必须在命令行上引用。示例:如果您想引用配置 /etc/cdrecord/mywriter.cfg,则可以发出命令 “cdrecord.sh mywriter.cfg -audio track1...”。mywrite.cfg 之后的所有内容都将传递给 cdrecord。

#! /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."

4.16 如何检索 CD 信息?

在 CD 前 32 k 的某个位置,有一个包含 CD 信息的块。您可以使用以下 shell 脚本提取信息

#! /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

4.17 关于重写

当覆盖 CD-RW 介质时,请为 cdrecord 指定参数 blank=fast。就这些。有关此参数的详细信息,请参见 cdrecord 的手册页。

4.18 如何创建多会话 CD?

首先,多会话 CD 的镜像必须使用带有 RockRidge 扩展的 ISO-9660 文件系统格式化。并且只要您想添加更多会话,就必须为 cdrecord 使用 -multi 选项。因此,至少对于第一个会话,您必须指定 -multi 选项。

某些 CD 刻录机不支持 CD-ROM XA 模式 2 或会话一次性 (SAO),因此您需要在命令行上为 cdrecord 指定开关 -data。

第二个和后续会话的镜像生成起来有点复杂。Mkisofs 必须知道 CD-R 上的可用空间从哪里开始。该信息可以通过在 cdrecord 上使用 -msinfo 选项来收集(请参见下面的示例)。

shell> NEXT_TRACK=`cdrecord -msinfo dev=0,6,0`
shell> echo $NEXT_TRACK
shell> mkisofs -R -o cd_image2 -C $NEXT_TRACK -M /dev/scd5
         private_collection/ \

有关更多信息,请阅读随 cdrecord 分发的 README.multi 文件。

4.19 我应该使用刻录机附带的 SCSI 适配器吗?

通过电子邮件报告:大多数 CD 刻录机文档都说,如果从 CD-ROM 到 CD 刻录机,则应使用单独的 SCSI 总线,并且我在以下场景中亲眼目睹了这一点

Adaptec 2940UW SCSI 卡、一个 24x SCSI CD-ROM 和一个 4x4 SCSI CD 刻录机。当我获得 CD 刻录机时,它配备了自己的 ISA SCSI 卡,该卡只能处理一个设备。我认为我会扔掉这个并使用我更好的 adaptec 卡来处理所有东西。我注意到在以 4x 速度刻录时,它非常容易发生缓冲区欠载,但是当我尝试连接 ISA SCSI 卡时,它没有任何问题。我知道另外 2 个人(都使用 adaptec 2940 卡),他们也遇到过完全相同的症状,通常是从 CD-ROM 刻录到 CD 刻录机时。尽管我从未在同一总线上从硬盘驱动器到 CD 刻录机时遇到过问题。

4.20 如何通过网络刻录?

即使通过 10 Mbit 以太网,通常 FTP 文件传输也足够快,可以以四倍速 (4x) 速度为 CD 刻录机提供数据。您可以将 ftp 客户端和 cdrecord 通过 fifo 耦合。首先创建一个名为 cdimage 的 fifo

mkfifo cdimage
ftp other.host.org
get cdimg cdimage

然后将 cdimage 视为常规文件,即发出以下命令

cdrecord dev=0,1,0 speed=2 cdimage

当 cdrecord 想要从文件读取数据时,您的 ftp 客户端会注意到,并将开始从 ftp 主机传输数据。

4.21 我在每个音轨的末尾都听到噼啪声或咔哒声。

您必须使用一次性刻录模式 (DAO) 才能消除噼啪声。

4.22 如何设置,以便用户可以刻录 CD 而不是始终是 root 用户?

您可以将 setuid 位添加到 cdrecord 可执行文件。但是,这可能存在安全风险。仅设置设备文件上的权限无济于事,因为 cdrecord 通过 SCSI 通用接口发出特权命令。

which cdrecord
chown root.root /usr/bin/cdrecord
chmod 4111 /usr/bin/cdrecord

4.23 我在哪里可以获得 “黄皮书” 和 “橙皮书” 标准?

您可以从 Philips 获得印刷规范,它们很昂贵。

4.24 我一直在搜索有关在 Linux 下刻录 Video-CD 的信息。

在这里您可以找到用于创建 MPEG 视频和 Video-CD 的实用程序:http://www.mainconcept.de/

http://www.johanni.de/munich-vision/vcd/

政治上正确的人会提到 Berkeley 工具和其他 YUV 策略。它们的使用很复杂,花费大量时间和硬盘空间,并且不为您提供音轨。我建议使用概念上更高级别的应用程序,例如上面提到的那些。

4.25 IDE 或 SCSI 哪个更容易设置?

对于在 Linux 下进行 CD 刻录,SCSI CD 刻录机设置起来稍微容易一些。并且据报告它们具有更好的错误恢复能力。较高的价格是否超过这些优点无法概括回答。

4.26 如何使用 {cdrecord,cdrdao} 超刻 CD?

超刻 CD-R 没什么特别的。数据是否适合 CD-ROM 由您自己承担风险,但仅此而已。Linux 下的软件没有 650 Mbytes 的限制。

4.27 当 cdrecord 停止从管道获取输入时会做什么?

它将完成写入。因此,您可以像 “bru -size=640m -f - | cdrecord dev=0,1,0 speed=2 -” 中那样,只需使用管道将您最喜欢的备份工具与 cdrecord 耦合即可。如果备份跨越多个 CD-R,您必须在备份实用程序中特别注意。

4.28 ide-scsi 模拟是否有类似于 ignore=hdX 的等效项?

我不知道有任何方法,但欢迎任何人将此功能添加到 Linux 内核源代码中。

4.29 CD-RW 在出现故障之前可以重复使用多少次?

好问题。

4.30 为平台独立的 CD-ROM 选择哪种格式?

要使所有系统都能读取的 CD-ROM 只能使用纯 ISO 9660 格式。这意味着来自旧 MS-DOS 的愚蠢的 8+3 文件名,并且没有任何 HFS (Macintosh)、Joliet (Microsoft) 或 RockRidge(较新的 Unix 系统)扩展。没有适用于更长文件名的扩展,可以被所有操作系统读取。

4.31 音频轨道是否可以进行多会话?

音频 CD 播放器只能处理存储在第一个会话中的音频轨道。换句话说,您不能使用后续会话添加音频轨道。但是,将数据轨道写入第二个会话会有效地将其从音频 CD 播放器中隐藏。这样,您可以防止在混合模式 CD(音频和数据混合)上出现静音轨道。

4.32 我需要哪些硬件资源?旧奔腾处理器够用吗?

答案取决于您的愿望。如果您需要购买新电脑的理由,以下是国际计算机制造商协会的回答:无论您计划做什么,您都需要一个 800 Mhz 的处理器。因为它不适合您现有的主板,所以您也需要一个新的主板。最简单的解决方案是直接购买电视广告中看到的典型完整套餐。请忽略本节的其余部分。

现在,如果您只是想要一个合理的答案:我使用 66 Mhz 的 “486” 成功刻录了多个 CD-ROM。尽管 MS 不再认为它们是 PC,而是建议在它们上运行 CE 版本(在 CeBIT 上看到),但 Linux 甚至可以在奔腾处理器的前代产品上良好运行,甚至能够刻录 CD。您可以通过测试来轻松找出硬件的功率是否足以进行 CD-ROM 刻录。执行 cdrecord 时只需添加命令行开关 -dummy,激光器将保持关闭状态。观察刻录过程。


下一页 上一页 目录