17.5. 创建和使用 CD

Contributed by Mike Meyer.

光盘 (CD)和磁盘不同在于光盘可以连续读取,不需要频繁移动磁头。虽然CD介质确实有轨道,但这些轨道是指要连续读取的一部分数据,而不是磁盘的物理属性。ISO 9660 文件系统旨在处理这些差异。

FreeBSD ports 提供了几个程序, 用于刻录和复制音频和数据 CD 。本章演示了几个命令行程序的使用。对于带有图形程序的 CD 刻录软件,请考虑从 ports 或 package 安装 sysutils/xcdroastsysutils/k3b

17.5.1. 支持的设备

Contributed by Marc Fonvieille.

GENERIC 提供了 SCSIUSBATAPI CD 光驱和刻录机的支持。若使用自定义内核,请在内核配置文件中添加相关参数,参数与您使用的设备类型有关。

若需使用 SCSI 接口的刻录机,请确保内核配置文件中包含以下选项:

device scbus	# SCSI bus (required for ATA/SCSI)
device da	# Direct Access (disks)
device pass	# Passthrough device (direct ATA/SCSI access)
device cd	# needed for CD and DVD burners

若需使用 USB 接口的刻录机,请确保内核配置文件中包含以下选项:

device scbus	# SCSI bus (required for ATA/SCSI)
device da	# Direct Access (disks)
device pass	# Passthrough device (direct ATA/SCSI access)
device cd	# needed for CD and DVD burners
device uhci	# provides USB 1.x support
device ohci	# provides USB 1.x support
device ehci	# provides USB 2.0 support
device xhci	# provides USB 3.0 support
device usb	# USB Bus (required)
device umass	# Disks/Mass storage - Requires scbus and da

若需使用 ATAPI 接口的刻录机,请确保内核配置文件中包含以下选项:

device ata	# Legacy ATA/SATA controllers
device scbus	# SCSI bus (required for ATA/SCSI)
device pass	# Passthrough device (direct ATA/SCSI access)
device cd	# needed for CD and DVD burners

注意:

若您使用10.x之前的 FreeBSD 并使用ATAPI 设备,还需在内核配置文件中加入以下选项:

device atapicam

您也可以将此行添加到/boot/loader.conf让系统在启动时加载 ATAPI 驱动:

atapicam_load="YES"

添加完成后需重启系统加载驱动。

要验证 FreeBSD 是否识别该设备, 请运行 dmesg 并查找该设备的条目。在 10.x 之前的系统中, 输出的第一行中的设备名称将是 acd0, 而不是 cd0

% dmesg | grep cd
cd0 at ahcich1 bus 0 scbus1 target 0 lun 0
cd0: <HL-DT-ST DVDRAM GU70N LT20> Removable CD-ROM SCSI-0 device
cd0: Serial Number M3OD3S34152
cd0: 150.000MB/s transfers (SATA 1.x, UDMA6, ATAPI 12bytes, PIO 8192bytes)
cd0: Attempt to query device size failed: NOT READY, Medium not present - tray closed

17.5.2. 刻录CD

在 FreeBSD 中,cdrecord 可用于刻录 CD 。从port 或 package 安装 sysutils/cdrtools 以获取此程序。

虽然cdrecord有很多选项,但基本用法很简单。指定要刻录的ISO文件的名称,如果系统有多个刻录机设备,则指定要使用的设备名称:

# cdrecord dev=device imagefile.iso

使用-scanbus查看刻录机的名字:

# cdrecord -scanbus
ProDVD-ProBD-Clone 3.00 (amd64-unknown-freebsd10.0) Copyright (C) 1995-2010 Jörg Schilling
Using libscg version 'schily-0.9'
scsibus0:
        0,0,0     0) 'SEAGATE ' 'ST39236LW       ' '0004' Disk
        0,1,0     1) 'SEAGATE ' 'ST39173W        ' '5958' Disk
        0,2,0     2) *
        0,3,0     3) 'iomega  ' 'jaz 1GB         ' 'J.86' Removable Disk
        0,4,0     4) 'NEC     ' 'CD-ROM DRIVE:466' '1.26' Removable CD-ROM
        0,5,0     5) *
        0,6,0     6) *
        0,7,0     7) *
scsibus1:
        1,0,0   100) *
        1,1,0   101) *
        1,2,0   102) *
        1,3,0   103) *
        1,4,0   104) *
        1,5,0   105) 'YAMAHA  ' 'CRW4260         ' '1.0q' Removable CD-ROM
        1,6,0   106) 'ARTEC   ' 'AM12S           ' '1.06' Scanner
        1,7,0   107) *

找到CD刻录机的条目,用逗号分隔的三个数字作为dev的值。在本例中,雅马哈刻录机设备是1,5,0,所以指定该设备的适当输入是dev=1,5,0。有关其他指定该值的方法以及写入音轨和控制写入速度的信息,请参阅cdrecord的手册页面。

您也可以使用以下命令获取刻录机的设备地址:

# camcontrol devlist
<MATSHITA CDRW/DVD UJDA740 1.00>   at scbus1 target 0 lun 0 (cd0,pass0)

使用scbustargetlun的数值。在这个例子中,1,0,0,0是要使用的设备名称。

17.5.3. 写入数据到一个ISO文件系统

为了生成一个数据 CD, 在将数据文件刻录到 CD之前, 必须先准备好组成轨道的数据文件。在 FreeBSD 中, sysutils/cdrtools 安装了 misofs, 它可以用来生成 ISO 9660 文件系统,它是一个目录树的映像,在一个 UNIX 文件系统中。最简单的用法是指定要创建的ISO文件的名称和文件的路径,并将其放置到ISO 9660文件系统中:

# mkisofs -o imagefile.iso /path/to/tree

该命令将指定路径中的文件名映射到符合标准ISO 9660文件系统的限制的文件名,并将排除不符合ISO文件系统标准的文件。

有许多选项可用于克服标准施加的限制。特别是,-R 使UNIX®系统支持常用的Rock Ridge扩展,-J 支持Microsoft®系统使用的 Joliet 扩展。

对于只在 FreeBSD 系统上使用的 CD-U 可以用来禁用所有的文件名限制。当与 -R 一起使用时, 它会生成一个与指定的 FreeBSD 树完全相同的文件系统映像, 即使它违反了 ISO 9660 标准。

最后一个常用的选项是 -b。 它用来指定启动映像的位置, 用以生成 El Torito 启动 CD。 这个选项使用一个参数, 用以指定将写入 CD 的目录的根。默认情况下, mkisofs(8) 会以常说的 软盘模拟 方式来创建 ISO, 因此它希望引导映像文件的尺寸恰好是 1200, 1440 或 2880 KB。 某些引导加载器, 例如 FreeBSD 发行版磁盘, 并不使用模拟模式; 这种情况下, 需要使用 -no-emul-boot 选项。 因此, 如果 /tmp/myboot 是一个包含了启动映像文件 /tmp/myboot/boot/cdboot 的可引导的 FreeBSD 系统, 您就可以使用下面的命令生成 ISO 9660 文件系统映像 /tmp/bootable.iso

# mkisofs -R -no-emul-boot -b boot/cdboot -o /tmp/bootable.iso /tmp/myboot

使用以下命令将ISO装载到内存盘中:

# mdconfig -a -t vnode -f /tmp/bootable.iso -u 0
# mount -t cd9660 /dev/md0 /mnt

现在可以检查/mnt/tmp/myboot,它们应该是一样的。

mkisofs还有许多可用参数。详情请参阅 misofs(8)

注意:

可以将数据CD复制到一个与使用mkisofs创建的图像文件功能相当的镜像文件。要做到这一点,请使用dd,将设备名称作为输入文件,并将要创建的ISO的名称作为输出文件:

# dd if=/dev/cd0 of=file.iso bs=2048

可以按照第 17.5.2 节 “刻录CD的介绍将镜像文件写入CD

17.5.4. 使用数据CD

ISO被刻录到CD后,就可以通过指定文件系统类型、包含CD的设备名称和现有的挂载点来挂载它:

# mount -t cd9660 /dev/cd0 /mnt

由于mount假定文件系统的类型为ufs,因此,如果在挂载数据CD时,不包含-t cd9660,则会出现Incorrect super block错误。

虽然所有数据CD都能以这种方式挂载,但带有某些ISO 9660扩展的磁盘可能会出现异常。例如,Joliet 磁盘将所有的文件名存储为两个字节的Unicode字符。如果一些非英文字符显示为问号,请用-C指定本地字符集。有关详细信息,请参阅 mount_cd9660(8)

注意:

为了在以下的帮助下进行此字符转换-C,内核需要加载cd9660_iconv.ko模块。这可以通过将此行添加到loader.conf来实现:

cd9660_iconv_load="YES"

重启系统。也可以使用kldload加载该模块。

当尝试挂载数据CD时,偶尔会显示 Device not configured。这通常意味着CD驱动器没有检测到托盘中的 CD,或者在总线上看不到该驱动器。CD驱动器检测到介质可能需要几秒钟的时间,所以请耐心等待。

有时,SCSI CD驱动器可能会因为没有足够的时间响应总线重置而无法链接。要解决这个问题,可以创建一个自定义内核,增加默认的SCSI延迟。将以下选项添加到自定义内核配置文件中,并按照第 8.5 节 “编译与安装自定义核心”中的方法重编译内核:

options SCSI_DELAY=15000

这将让SCSI总现在启动时停止 15 秒,让 CD 驱动器有尽可能多的机会来响应总线重置。

注意:

可以直接将文件刻录到CD,无需创建ISO 9660文件系统。这就是所谓的刻录原始数据CD,有些人这样做是出于备份的目的。

这种类型的磁盘不能作为普通数据CD安装。为了检索刻录到这种CD的数据,必须从原始设备节点读取数据。例如,此命令将提取位于第二个 CD设备上的压缩的 tar 文件到当前工作目录中:

# tar xzvf /dev/cd1

数据使用mkisofs写入已挂载的CD

17.5.5. 复制音乐CD

要复制音频CD,请将音频数据从CD中提取到文件,然后将这些文件写入空白的CD中。

过程 17.1, “复制音频 CD 描述了如何复制和刻录音频 CD 。如果 FreeBSD 版本小于10.0 且设备接口为 ATAPI ,则必须按照 第 17.5.1 节 “支持的设备” 中的说明加载 atapicam 模块。

过程 17.1. 复制音频 CD
  1. cdda2wav 包含在 sysutils/cdrtools 中,可以用 package 或 port 安装。此程序可用于提取所有音轨,可将多个音轨分别提取到当前目录下的 WAV文件中:

    % cdda2wav -vall -B -Owav

    如果系统上只有一个CD设备,则不需要指定设备名称。请参阅 cdda2wav手册页面,了解如何指定设备的说明,并了解此命令的其他可用选项。

  2. 使用cdrecord写入.wav文件:

    % cdrecord -v dev=2,0 -dao -useinfo  *.wav

    确保2,0正确配置,就像第 17.5.2 节 “刻录CD中描述的那样。

本文档和其它文档可从这里下载: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题,请先阅读 文档,如不能解决再联系 <questions@FreeBSD.org>.

关于本文档的问题请发信联系 <doc@FreeBSD.org>.