本节通常被称为“常见问题解答”。如果您在伴侣、孩子或狗方面遇到问题,请随时发送,只要它与 CD-R 刻录相关或具有娱乐性即可。
测试一下。使用 -dummy 选项执行 cdrecord 的空运行。像往常一样执行所有操作,并观察刻录过程是否能顺利进行。
如果您直接从 mkisofs 向 cdrecord 提供数据,那么磁盘密集型进程(如更新 locate 数据库)会降低最大流速,并可能损坏 CD。您最好检查一下,在旧机器上刻录 CD-R 时,是否没有通过 cron
、at
或 anacron
启动此类进程。
文件碎片化通常非常低,以至于其影响不被注意到。但是,您可以轻松构建病态的碎片化案例,这会将硬盘的吞吐量降低到每秒 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 文件系统。当前版本的工作可靠性不足以用于甚至私人环境。如果您真的想整理文件系统,请制作备份副本(最好是两个副本),练习恢复数据,然后创建一个新的文件系统(这将销毁旧的)并恢复数据。这种方法目前是最安全的技术。
是的。唯一不可靠且速度不足以从中刻录 CD-ROM 的文件系统是网络文件系统 (NFS)。我曾经自己使用 UMSDOS 在专门用于刻录 CD-ROM 的 PC (486/66) 上共享 Linux 和 DOS/Win 之间的磁盘空间。
是的。您可以将任何您喜欢的文件系统放在 CD 上。但是除 Linux 以外的其他操作系统将无法处理此 CD。以下是方法
dd if=/dev/zero of="empty_file" bs=1024k count=650
shell> /sbin/mke2fs -b 2048 empty_file
empty_file is not a block special device.
Proceed anyway? (y,n) y
mount -t ext2 -o loop=/dev/loop1 empty_file /mnt
cdrecord
,就像它是 ISO-9660 镜像一样。如果您想在 /etc/fstab
中为此类 CD 创建条目,则禁用系统启动时对设备文件的检查。例如
/dev/cdrom /cdrom ext2 defaults,ro 0 0
第一个 0 表示“不包含在转储中”(备份),第二个(=重要)表示“启动时不检查错误”(fsck 将无法检查 CD 是否有错误)。
有几个软件包可用。最新的一个是 “cdpranoia”,可以从以下网址下载
http://www.xiph.org/paranoia/
或者您想尝试 “cdda2wav” 和 “sox” 的组合,可从 sunsite 及其镜像站点获得
ftp://sunsite.unc.edu/pub/Linux/apps/sound/cdrom/cdda2wav0.71.src.tar.gzftp://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 文件的支持。
文件 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 总线,当您尝试上述操作时,您的系统可能会完全冻结。已警告过您。
是的。但是您应该意识到,读取原始 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 上的扇区。
是的。较新的内核(2.0.36 和即将到来的 2.2)内置了对 joliet 格式的支持。请记住,您必须在 /etc/fstab 中同时使用这两个选项:关键字 iso9660 和 joliet(后者实际上是一个扩展)。有关更多详细信息,请参见 http://www-plateau.cs.berkeley.edu/people/chaffee/joliet.html。
就像您对常规 CD-ROM 驱动器所做的那样。没有任何技巧。请注意,即使您有 ATAPI CD-ROM,也必须使用 scd 设备(SCSI CD-ROM)来挂载 CD-ROM 以进行读取(请记住,您已将 ATAPI 设备配置为像 SCSI 一样工作)。/etc/fstab 的示例条目
/dev/scd0 /cdrom iso9660 ro,user,noauto 0 0
使用 bzip2
而不是任何其他压缩器,如 gzip
或 pkzip
。对于较大的(>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
您必须有一个 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。
Linux 有一个可用的覆盖文件系统,它挂载在 CD-ROM 之上并拦截所有写入操作。新的和修改的文件存储在其他地方,但对于用户来说,它看起来像 CD-ROM 已被修改。有关更多信息,请参见 http://home.att.net/~artnaseef/ovlfs/ovlfs.html。
如果这不足以满足您的需求:请等待 Linux 支持 UDF 文件系统,或帮助开发它(参见 http://trylinux.com/projects/udf/。目前,由于 Linux 内核的 CD-ROM 驱动程序中的限制,仅支持读取 CD 介质。
是的。据报告,在配备 233 Mhz 的 PC 和运行内核 2.2.12 的单个 SCSI 总线上,至少 3 个刻录机以全速 (6x) 工作。您需要最新版本的 Linux 内核(2.2.12 或更高版本)。
只有第 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 扩展。
您有两个选择。要么使用 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."
在 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
当覆盖 CD-RW 介质时,请为 cdrecord 指定参数 blank=fast。就这些。有关此参数的详细信息,请参见 cdrecord 的手册页。
首先,多会话 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 文件。
通过电子邮件报告:大多数 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 刻录机时遇到过问题。
即使通过 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 主机传输数据。
您必须使用一次性刻录模式 (DAO) 才能消除噼啪声。
您可以将 setuid 位添加到 cdrecord 可执行文件。但是,这可能存在安全风险。仅设置设备文件上的权限无济于事,因为 cdrecord 通过 SCSI 通用接口发出特权命令。
which cdrecord
chown root.root /usr/bin/cdrecord
chmod 4111 /usr/bin/cdrecord
您可以从 Philips 获得印刷规范,它们很昂贵。
在这里您可以找到用于创建 MPEG 视频和 Video-CD 的实用程序:http://www.mainconcept.de/
http://www.johanni.de/munich-vision/vcd/
政治上正确的人会提到 Berkeley 工具和其他 YUV 策略。它们的使用很复杂,花费大量时间和硬盘空间,并且不为您提供音轨。我建议使用概念上更高级别的应用程序,例如上面提到的那些。
对于在 Linux 下进行 CD 刻录,SCSI CD 刻录机设置起来稍微容易一些。并且据报告它们具有更好的错误恢复能力。较高的价格是否超过这些优点无法概括回答。
超刻 CD-R 没什么特别的。数据是否适合 CD-ROM 由您自己承担风险,但仅此而已。Linux 下的软件没有 650 Mbytes 的限制。
它将完成写入。因此,您可以像 “bru -size=640m -f - | cdrecord dev=0,1,0 speed=2 -” 中那样,只需使用管道将您最喜欢的备份工具与 cdrecord 耦合即可。如果备份跨越多个 CD-R,您必须在备份实用程序中特别注意。
我不知道有任何方法,但欢迎任何人将此功能添加到 Linux 内核源代码中。
好问题。
要使所有系统都能读取的 CD-ROM 只能使用纯 ISO 9660 格式。这意味着来自旧 MS-DOS 的愚蠢的 8+3 文件名,并且没有任何 HFS (Macintosh)、Joliet (Microsoft) 或 RockRidge(较新的 Unix 系统)扩展。没有适用于更长文件名的扩展,可以被所有操作系统读取。
音频 CD 播放器只能处理存储在第一个会话中的音频轨道。换句话说,您不能使用后续会话添加音频轨道。但是,将数据轨道写入第二个会话会有效地将其从音频 CD 播放器中隐藏。这样,您可以防止在混合模式 CD(音频和数据混合)上出现静音轨道。
答案取决于您的愿望。如果您需要购买新电脑的理由,以下是国际计算机制造商协会的回答:无论您计划做什么,您都需要一个 800 Mhz 的处理器。因为它不适合您现有的主板,所以您也需要一个新的主板。最简单的解决方案是直接购买电视广告中看到的典型完整套餐。请忽略本节的其余部分。
现在,如果您只是想要一个合理的答案:我使用 66 Mhz 的 “486” 成功刻录了多个 CD-ROM。尽管 MS 不再认为它们是 PC,而是建议在它们上运行 CE 版本(在 CeBIT 上看到),但 Linux 甚至可以在奔腾处理器的前代产品上良好运行,甚至能够刻录 CD。您可以通过测试来轻松找出硬件的功率是否足以进行 CD-ROM 刻录。执行 cdrecord 时只需添加命令行开关 -dummy,激光器将保持关闭状态。观察刻录过程。