光盘驱动器和 Linux
CD-ROM 代表只读光盘存储器,这是一种存储介质,它利用光学激光来读取聚碳酸酯光盘镀铝层上的微小凹坑。音频光盘也使用相同的格式。
CD-ROM 的存储容量约为 650MB,相当于 500 多张高密度 3.5 英寸软盘或大约 25 万页打字稿。
第一代驱动器(称为单速)提供的传输速率约为每秒 150KB(千字节)。双速驱动器很常见,最近又推出了三速和四速驱动器。
大多数 CD-ROM 驱动器使用小型计算机系统接口 (SCSI) 或厂商专有接口(通常在声卡上提供)。它们通常还支持通过外部耳机插孔、线路电平输出或扬声器播放音频 CD。最近也出现了一种基于 IDE 硬盘接口扩展的第三种 CD-ROM 接口。
CD-ROM 通常使用 ISO-9660(以前称为 High Sierra)文件系统格式化。这种格式将文件名限制为 MS-DOS 风格(8+3 字符)。Rock Ridge 扩展使用 ISO-9660 标准中未定义的字段来支持更长的文件名和其他 Unix 风格的信息(例如,文件所有权、设备文件、符号链接等)。
Photo-CD 是柯达公司开发的一种标准,用于将摄影图像作为数字数据存储在 CD-ROM 上。摄影胶卷可以传输到 Photo-CD,使用适当的软件,您可以在计算机上查看图像,执行进一步的图像处理,或将它们发送到打印机。一张 CD 最多可以存储 100 张照片,其图像质量通常比使用扫描仪等其他方法获得的图像质量高得多。
CD 刻录机最近已经上市。它们使用不同的介质和专用设备进行刻录,但生成的光盘可以被任何 CD-ROM 驱动器读取。(这与 Photo-CD 使用的“一次写入”技术相同。)
CD-ROM 相对于其他大容量存储介质的主要优势在于其高存储容量、高可靠性和低成本。
缺点是它是只读的,比硬盘介质慢,而且光盘如果处理不当可能会损坏。
Linux 为 CD-ROM 提供了良好的支持。用于硬盘子系统的动态缓冲区缓存也用于 CD-ROM 访问,从而提高了性能。根据类型,可以支持多个驱动器。(例如,Panasonic 驱动程序最多支持 16 个驱动器。)
Linux 完全支持 ISO-9660 文件系统的 Rock Ridge 扩展,从而可以使用硬盘文件系统的所有功能,包括长文件名、文件权限、链接和设备文件。一些 CD-ROM 驱动程序也支持 PhotoCD。
许多供应商(我知道至少有十家)现在以合理的价格提供包含 Linux 源代码、二进制文件和文档的光盘。其中许多都具有易于使用的菜单驱动的安装程序。一张 CD-ROM 可以容纳完整的 Linux 发行版,以及两个主要的互联网存档站点中的所有文件,并且还有剩余空间。相比之下,最近的 Linux 发行版可以填满多达 50 张 3.5 英寸软盘。
最后,大多数 CD-ROM 驱动器都支持播放音频 CD,因此您可以在等待最新的 Linux 内核编译时听音乐。
Linux 几乎支持所有 SCSI CD-ROM 驱动器,前提是使用了受支持的 SCSI 主机适配器。
许多流行的专有驱动器都受到支持,包括索尼、三美和松下/松下电器生产的型号。
基于增强型 IDE 标准的 CD-ROM 尚未得到 Linux 的官方支持,尽管在撰写本文时,至少有一个驱动程序正在进行 alpha 测试。
当您阅读本文时,可能会有更多设备得到支持,无论是作为标准 Linux 内核的一部分还是作为补丁。有关最新支持硬件的详细列表,请参阅 CD-ROM HOWTO 文档。
设置 Linux 以使用 CD-ROM 涉及四个步骤
安装硬件
配置 Linux 内核
创建必要的设备文件
挂载介质
我将在此处简要介绍它们;更多详细信息请参阅 Linux CD-ROM HOWTO。
第一步,安装,取决于驱动器的类型。请按照制造商提供的说明进行操作,或让您的经销商执行安装。Linux 没有特殊的安装要求。
接下来,必须配置 Linux 内核。在某些情况下,您可以使用具有必要驱动程序的预编译内核,但我建议您自己编译;这对您有好处!对于 SCSI 驱动器,您需要配置 SCSI CD-ROM 支持和正在使用的 SCSI 主机适配器的驱动程序。
对于专有 CD-ROM 接口,请选择适当的驱动程序(例如,Sony CDU31A)。
为了挂载 CD-ROM,您还必须配置对 ISO-9660 文件系统的支持。如果您有声卡,那么现在也是配置内核声音驱动程序的好时机。
第三步是创建适当的设备文件。如果您正在运行标准的 Linux 发行版,您可能已经在系统安装期间完成了此操作。最好验证这些;CD-ROM HOWTO 列出了设备文件类型,它们取决于驱动器。
您现在应该准备好编译并启动新配置的内核。通过查看内核启动消息来验证 CD-ROM 是否被检测到;这是我的系统上的输出
SBPCD version 2.5 Eberhard Moenkeberg <emoenke@gwdg.de> SBPCD: Looking for a SoundBlaster/Matsushita CD-ROM drive SBPCD: Trying to detect a SoundBlaster CD-ROM drive at 0x230. SBPCD: - Drive 0: CR-562-x (0.76) SBPCD: 1 SoundBlaster CD-ROM drive(s) at 0x0230. SBPCD: init done.
要挂载 CD-ROM,请将其插入驱动器并使用 mount 命令(以 root 用户身份)。一个典型的命令行如下:
% mount -t iso9660 -r /dev/cdrom /mnt
上面的例子假设 CD-ROM 设备文件是 /dev/cdrom 并且光盘是 ISO-9660 格式化的(这几乎总是这种情况)。-r 选项表示光盘将以只读方式挂载。如果成功,现在可以在目录 /mnt 下访问 CD。
为了更永久的设置,您可能希望在更具意义的名称(例如 /cdrom)下挂载 CD。通过在 /etc/fstab 文件中添加条目,您可以使 CD-ROM 在 Linux 启动时自动挂载;有关详细信息,请参阅 fstab(5) 手册页。
完成 CD 后,可以使用 umount 命令卸载它(同样,以 root 用户身份运行此命令)
% umount /mnt
如果您想允许非 root 用户挂载和卸载 CD-ROM,您可以使用某些 mount 命令提供的“user”选项。如果您在 /etc/fstab 中创建如下条目
/dev/sbpcd /cdrom iso9660 user,noauto,ro
那么普通用户将被允许使用以下命令挂载和卸载驱动器
% mount /cdrom % umount /cdrom
光盘将被挂载,并带有有助于确保安全性的选项(例如,CD 上的程序无法执行,设备文件将被忽略)。另一种方法是获取或编写一个诸如 usermount 的程序,该程序以 setuid root 身份运行,并允许为非 root 用户限制挂载特定设备(例如,CD-ROM 和软盘)。
PhotoCD 使用 ISO-9660 文件系统以专有格式存储图像文件,并具有多种不同的分辨率。并非所有 CD-ROM 驱动器都支持读取 PhotoCD。如果您的驱动器支持,您可以挂载它并使用诸如 hpcdtoppm 的程序将文件转换为可以使用诸如 xloadimage 或 xv 的图形文件查看器显示的格式。
hpcdtoppm 程序是 PBM(便携式位图)实用程序的一部分,可在许多互联网存档站点上获得(查找 pbm 或 netpbm)。
程序 xpcd 是一个基于 X11 的实用程序,用于处理 PhotoCD 图像。您可以使用鼠标选择图像,在小窗口中预览它们,并以五种可能的分辨率中的任何一种加载图像。您还可以标记图像的一部分并仅加载选定的部分。该程序可以在 ftp.cs.tu-berlin.de 的 /pub/linux/Local/misc/ xpcd-0.2.tar.gz 文件中找到。
有几个程序可用于播放音频 CD,可以通过耳机插孔或连接的声卡播放。workman 是许多 Linux 发行版附带的一个程序。它具有类似于音频 CD 播放器上提供的控件的图形用户界面。也存在简单的命令行 CD 播放器程序。请注意,要播放音频 CD,您不应尝试挂载它。
CD 播放器程序只是将驱动器的模拟输出路由到外部设备。一些 CD-ROM 驱动器还支持读取音频 CD 中包含的数字声音数据。使用诸如 cdda2wav 的程序,您可以将 CD-ROM 中的音轨保存为声音文件(例如,.wav 格式)。
继承文件系统 (IFS) 是一种内核驱动程序,允许在同一点挂载多个文件系统。通过将硬盘目录挂载在 CD-ROM 文件系统之上,您可以有效地获得可写 CD-ROM 文件系统。
在撰写本文时,Werner Almesberger 为 0.99 Linux 内核编写的 IFS 实验版本以内核补丁的形式提供。
如果您想创建自己的 CD-ROM,无论是使用可写 CD 驱动器还是将磁带发送给供应商进行母盘制作,Linux 下都有一些工具可供您使用。
mkisofs 软件包允许在磁盘分区上创建 ISO-9660 文件系统。这可以用于辅助创建和测试 CD-ROM 文件系统,然后再进行光盘母盘制作。
还有一些实用程序可用于验证 ISO-9660 文件系统的格式;这些实用程序对于检查可疑的 CD-ROM 非常有用。
如果您在 Linux 下设置 CD-ROM 支持时遇到问题,请查看以下事项。(有关更多信息,请参阅 CD-ROM HOWTO。)
内核中是否编译了适当的 CD-ROM 驱动程序?尝试命令 cat/proc/devices 以查看安装了哪些驱动程序。
您是否正在运行新配置的内核?使用 uname -a 并检查时间戳以查看。
驱动器在启动时是否被识别?如果启动消息滚动太快而无法阅读,dmesg 命令应该重新显示启动消息。
您是否创建了正确的设备文件并设置了保护?/dev/MAKEDEV 脚本是执行此操作的一种方法。
ISO-9660 文件系统是否已编译到内核中?尝试 cat /proc/filesystems 并查找 iso9660。
驱动器中是否有一个已知的良好 CD-ROM(非音频 CD)?
您是否使用了正确的选项进行挂载?您需要指定 -t iso9660, -r(只读)、CD-ROM 设备文件和一个空目录。您应该以用户 “root” 身份运行此命令。
您可以从驱动器读取数据吗?尝试使用 dd 命令并检查磁盘活动(例如,dd if=/dev/cdrom of=/dev/null bs=2048)。
对于某些驱动器,如果它们位于非标准 I/O 地址,您可能需要编辑相应的内核驱动程序头文件。
以下是一些与 Linux 下 CD-ROM 相关的其他有用信息来源。
Linux CD-ROM、SCSI 和发行版 HOWTO 文档可从主要的 Linux 存档站点免费获得,包括 sunsite.unc.edu 目录中的 /pub/Linux/docs/HOWTO。对于那些无法访问网络的人,Linux HOWTO 的印刷版也由许多供应商出版,或者您可以在本地计算机公告板系统中找到它们。
有关 Panasonic/SoundBlaster CD-ROM 内核驱动程序的最新和最完整的信息可以在 README.sbpcd 文件中找到,通常位于 /usr/src/linux/drivers/block 目录中。
有关诸如 mount 和 umount 命令的其他信息,可以在相应的 Linux 手册页中找到。
对于那些可以访问 Usenet 的人,以下新闻组讨论与 CD-ROM 相关的信息
comp.publish.cdrom.hardware
comp.publish.cdrom.multimedia
comp.publish.cdrom.software
comp.sys.ibm.pc.hardware.cd-rom
alt.cd-rom
alt.cd-rom.reviews
alt.cd-rom 新闻组的常见问题解答 (FAQ) 文档也可用;它被存档在许多互联网站点上,包括 rtfm.mit.edu。
互联网站点 ftp.cdrom.com 拥有大量的 CD-ROM 信息和软件存档;请在 /pub/cdrom 目录中查找。
Linux 文档项目制作了几本关于 Linux 的书籍;对新用户最有用的书是 Linux 安装和入门。这些书可以通过匿名 FTP 从主要的 Linux 存档站点免费获得,也可以购买纸质格式。
Linux 软件地图 (LSM) 是定位 Linux 软件(包括本文中提到的程序)的宝贵参考。LSM 可以在各种匿名 FTP 站点上找到,包括 sunsite.unc.edu:/pub/Linux/docs/LSM.gz。
(Jeff.Tranter@Software.Mitel.com) 是加拿大渥太华一家电信公司的软件设计师。他使用 Linux 已将近两年,并且是 Linux Sound 和 CD-ROM HOWTO 文档的作者。