创建 CD
现在,似乎每个人都拥有 CD 刻录机 (CD-R)。它们是非常棒的硬件,而且价格一直在下降。CD 非常适合保存静态数据。您最喜欢的下载内容,曾经存放在成堆的软盘上,现在可以转移到一张 CD 上,降低数据丢失的风险。有了自己的 CD 刻录机,您可以制作自定义的 Linux 发行版 CD,根据您的需求量身定制。您还可以将您最喜欢的 FTP 站点的 CD 存档传递给朋友,以避免带宽问题。
如果您目前正在寻找 CD-R,请选择 SCSI。SCSI CD-R 的出现时间远早于 ATAPI (IDE) CD-R,因此,得到了更好的支持。但是,如果您确实拥有 ATAPI CD-R,或者只是买不起 SCSI,也不用担心——您仍然可以制作 CD。
为了使用 SCSI CD-R 进行刻录,您必须在内核中编译“SCSI 支持”、“SCSI CD-ROM 支持”和“SCSI 通用支持”。还要确保您拥有“ISO9660 cdrom 文件系统”支持。在内核中编译“环回设备支持”是个好主意,但不是必需的。对于本文,我将假设您知道如何构建自己的内核;如果不知道,请参阅 Kernel-HOWTO(请参阅“资源”部分)。
ATAPI CD-R 需要更多努力。您必须至少拥有 2.0.35 或更高版本的内核;低于此版本需要补丁。重新编译您的内核,禁用“IDE/ATAPI CD-ROM 支持”,并启用“SCSI 仿真支持”。除了这些选项之外,您还必须启用上面提到的那些选项(是的,甚至包括 SCSI 支持)。结果是您的 CD-R 将看起来像 SCSI 设备并像 SCSI 设备一样工作,即使它是 ATAPI。您的 CD 刻录软件也需要支持 ATAPI 刻录;我稍后会讨论这一点。请注意,当您使用 SCSI 仿真时,所有 IDE CD-ROM 都会更改为 SCSI 前缀,因此您的第一个 CD-ROM 将是 /dev/scd0。
在 Linux 中刻录 CD 需要两个实用程序:mkisofs 和 cdrecord。第一个实用程序 mkisofs 用于制作您要刻录的文件的映像。大多数主要发行版都附带此实用程序,但在任何情况下,获取最新版本都是明智的。最新版本可以在 ftp://tsx-11.mit.edu/pub/linux/packages/mkisofs/ 找到。第二个实用程序 cdrecord 是用于将使用 mkisofs 制作的映像刻录到空白 CD 的软件。您可以在 metalab.unc.edu/pub/Linux/utils/disk-management 找到 cdrecord,同样,我强烈建议获取最新版本(在撰写本文时为 1.6.1)。另一个用于刻录 CD 的实用程序是 cdwrite,也可以在该 URL 找到。
除了这些之外,还有一些免费和商业的 GUI 程序可用于制作 CD。X-CD-Roast(请参阅 Thomas Niederreiter 的“X-CD-Roast:CD 刻录软件”,LJ,1998 年 1 月)可能是最著名的,并且是免费提供的;但是,它基于 cdwrite 实用程序。还有一些 X 应用程序充当 shell,并调用适当的实用程序来完成工作。
安装了适当的实用程序后,您就可以开始刻录自己的 CD 了。在开始之前,将要刻录的文件收集到一个目录下。在本文中,我将使用下载和刻录 Linux 发行版作为示例。首先,假设您以匿名方式登录到 ftp.some_server.com 并切换到目录 /pub/linux。这个假设的目录包含三个不同的发行版;ls 的列表输出如列表 1 所示。
假设 distribution_b 是您想要的发行版,请继续通过在 ftp 提示符下键入 get distribution_b.tar 来下载整个发行版。当然,此目录包含您需要的一切,没有其他内容。毕竟,您不会想下载几种不同架构的发行版。因此,当您下载整个发行版时,请确保深入到目录中,只获取您需要的内容。例如,如果您想在 ftp.cdrom.com 上下载 i386 架构的整个 Red Hat 发行版,您将下载 /pub/linux/redhat/redhat-6.0/i386 目录及其下的所有内容。
下载完成后,创建一个目录来存储文件。在本例中,我将创建一个名为 cdimage 的目录,然后通过执行以下命令将 distribution_b.tar 的内容放入该目录中
mkdir cdimage tar vxf distribution_b.tar -C cdimage
由于请求了 verbose (v) 选项,distribution_b.tar 的内容将在您的屏幕上飞速掠过,其内容将位于 cdimage 中。如果一切顺利,您现在可以删除 distribution_b.tar 以节省空间。
如果您想刻录 Linux 发行版以外的其他文件集合,只需将它们放在 cdimage 目录中即可。
请记住,在创建 CD 时,CD 的根目录相对于创建的目录;在本例中,为 cdimage。将文件放入此目录后,您就可以使用 mkisofs 命令创建 iso9660 映像了。要创建基本映像,请使用以下命令
mkisofs -r -o cdimage.iso cdimage
-r 选项确保映像包含额外的文件描述数据,通过 Rock Ridge 协议,保留原始文件名并为 CD-ROM 优化设置权限,使读取/执行权限变为全局权限,清除写入权限,并清除特殊模式位,因为它们不适用于 CD-ROM。-o 选项指定输出文件 (cdimage.iso)。最后一个值是文件所在的目录。
许多商业制造的 Linux CD,例如 Red Hat,都是可启动的。使用“El Torito”标准可以轻松实现这一点。如今,大多数较新的 BIOS 都支持可启动 CD 功能,而大多数用于 PC 的可启动 CD 都基于 El Torito。El Torito 使您的 CD 看起来像软盘,因此您的 BIOS 可以启动它。
如果您想要可启动的 CD,您将需要一个 1.44MB 的启动映像,用于启动软盘。在我们的发行版示例中,我们可以使用用于安装的启动映像。对于 distribution_b,启动映像的名称为 boot.img。我们制作可启动 CD 的过程发生在 iso9660 映像的创建过程中(用于光盘只读存储器的国际标准化组织规范)。因此,在我们创建映像之前,我们需要在 cdimage 内创建一个目录来保存启动映像;名为 boot 的目录就可以。因此,我们将映像 boot.img 放入 cdimage/boot 中,并通过执行以下命令创建 iso9660 映像
mkisofs -r -b boot/boot.img -c boot/boot.cat -o\ cdimage.iso cdimage
这里我们有两个新选项,这两个选项都用于使 CD 可启动。-b 选项后跟要启动的启动映像的名称。请注意,该文件相对于 CD 的根目录。-c 选项后跟 El Torito 所需的启动目录的名称;此文件由 mkisofs 自动创建。只有较新版本的 mkisofs 才允许自动创建启动目录;旧版本需要您自己创建。
在实际刻录 CD 之前,通过挂载映像来查看映像布局。这是使用环回设备完成的,因此内核中必须支持环回设备。以下命令将挂载您的映像
mount -r -t iso9660 -o loop cdimage.iso /mnt
创建映像后,无论是否可启动,您都可以进行最后的刻录过程,使用 cdrecord 或 cdwrite 将其刻录到 CD 上。在开始之前,请考虑以下事项
确保计算机没有经历过度的振动。
确保映像位于本地硬盘驱动器上。
确保系统负载不太高。
牢记这三件事将有助于防止写入过程中的错误。CD 刻录机可以进行测试过程,该过程实际上不会写入,但会模拟整个过程。这是通过为 cdrecord 添加 -dummy 选项,为 cdwrite 添加 -y 选项来完成的。现在剩下的就是插入空白 CD 并执行与您选择的刻录机匹配的命令。
cdrecord -eject -v -isosize speed=2 dev=0,0\ cdimage.iso cdwrite -ev --device /dev/??? -s 2 cdimage.iso这两个实用程序的前两个选项都是 eject 和 verbose。因此,CD 将在刻录过程完成后弹出,并且程序将在 verbose 模式下运行。cdrecord 的选项 -isosize 将 CD 的大小限制为 iso9660 映像的大小。选项 speed=2 和 -s 2 指示写入 CD 的速度;在本例中,2 表示 2 倍速。最后,选项 --device, dev=0,0 和 /dev/??? 设置目标设备,其中 /dev/??? 应该是您的 CD-R(即,/dev/scd0),而 0,0 代表 SCSI ID 和总线,顺序如此。
如果一切顺利,恭喜您。您现在拥有一个功能齐全的 iso9660 CD。您也可以同样好地制作其他格式的 CD。mkhybrid 实用程序包含在 mkisofs 中,可以制作 Joliet 和 HFS 格式的映像。也可以制作具有 EXT2 文件系统格式的 CD。祝您刻录愉快!
Alex Withers 自 1.1.59 版本以来一直在使用 Linux。他目前在冈萨加大学学习计算机科学,可以通过 awithers@gonzaga.edu 联系到他。