20.6.创建和使用 DVD =================== 与 CD 相比,DVD 是下一代的光学媒体存储技术。相比于 CD,DVD 可以容纳更多的数据,是视频出版的标准。 可记录式 DVD 有五种物理格式: - DVD-R:这是第一个可用的 DVD 可记录格式。DVD-R 标准是由 `DVD 论坛 <http://www.dvdforum.org/forum.shtml>`__\ 定义的。这种格式仅支持一次性写入。 - DVD-RW: 这是 DVD-R 标准的可重写版本。一张 DVD-RW 可以被重写 1000 次左右。 - DVD-RAM: 这是一种可重写的格式,可以被看作是一种可移动的硬盘设备。然而,这种光盘与大多数 DVD-ROM 光驱和 DVD 视频播放器不兼容,只有少数 DVD 刻录机支持 DVD-RAM 格式。请参考 `使用 DVD-RAM <https://docs.freebsd.org/en/books/handbook/disks/#creating-dvd-ram>`__\ ,了解更多关于 DVD-RAM 的使用信息。 - DVD+RW: 这是一种由 `DVD+RW 联盟 <https://en.wikipedia.org/wiki/DVD%2BRW_Alliance>`__\ 定义的可重写格式。一张 DVD+RW 可以被重写大约 1000 次。 - DVD+R: 这种格式是 DVD+RW 格式的一次性写入变体。 一张单层可刻录的 DVD 可以容纳 4,700,000,000 byte,实际上是 4.38 GB 或 4485 MB,因为 1 kb 是 1024 byte。 **注意** 必须对物理光盘和应用程序进行区分。例如,DVD-Video 是一种特定的文件系统,可以被刻录到任何 DVD 物理光盘上,如 DVD-R、DVD+R 或 DVD-RW。在选择光盘类型之前,要确保刻录机和 DVD 视频播放器都能与要选择的光盘兼容。 20.6.1.配置 ----------- 要执行 DVD 刻录,请使用 `growisofs(1) <https://www.freebsd.org/cgi/man.cgi?query=growisofs&sektion=1&format=html>`__\ 。这个命令支持所有 DVD 光盘类型,它来自 `sysutils/dvd+rw-tool <https://cgit.freebsd.org/ports/tree/sysutils/dvd+rw-tools/pkg-descr>`__ 工具。 这些工具使用 SCSI 子系统来访问设备,因此必须加载或静态编译 `ATAPI/CAM <https://docs.freebsd.org/en/books/handbook/disks/#atapicam>`__ 到内核。如果刻录机使用 USB 接口,则不需要这种操作。关于 USB 设备配置的更多细节,请参考 `USB 存储设备 <https://docs.freebsd.org/en/books/handbook/book/#usb-disks>`__\ 。 还必须为 ATAPI 设备启用 DMA 访问,在 **/boot/loader.conf** 中添加以下一行: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session hw.ata.atapi_dma="1" 在尝试使用 ``dvd+rw-tools`` 之前,请查阅\ `硬件兼容性说明 <http://fy.chalmers.se/~appro/linux/DVD+RW/hcn.html>`__\ 。 **注意** 对于图形用户界面,可以考虑使用 `sysutils/k3b <https://cgit.freebsd.org/ports/tree/sysutils/k3b/pkg-descr>`__\ ,它为 `growisofs(1) <https://www.freebsd.org/cgi/man.cgi?query=growisofs&sektion=1&format=html>`__ 和许多其他刻录工具提供了一个用户友好的界面。 20.6.2.刻录数据 DVD ------------------- 由于 `growisofs(1) <https://www.freebsd.org/cgi/man.cgi?query=growisofs&sektion=1&format=html>`__ 是 `mkisofs <https://docs.freebsd.org/en/books/handbook/disks/#mkisofs>`__ 的前端,它将调用 `mkisofs(8) <https://www.freebsd.org/cgi/man.cgi?query=mkisofs&sektion=8&format=html>`__ 来创建文件系统并在 DVD 上执行写入。这意味着在刻录过程中不需要创建数据的镜像。 要将 **/path/to/data** 中的数据刻录到 DVD+R 或 DVD-R 上,请使用以下命令: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # growisofs -dvd-compat -Z /dev/cd0 -J -R /path/to/data 在这个例子中,\ ``-J -R`` 被传递给 `mkisofs(8) <https://www.freebsd.org/cgi/man.cgi?query=mkisofs&sektion=8&format=html>`__ 来创建一个带有 Joliet 和 Rock Ridge 扩展支持的 ISO 9660 文件系统。更多细节请参考 `mkisofs(8) <https://www.freebsd.org/cgi/man.cgi?query=mkisofs&sektion=8&format=html>`__\ 。 对于初始刻录,\ ``-Z`` 用于单次和多次会话。用 DVD 设备的名称替换 */dev/cd0*\ 。使用 ``-dvd-compat`` 表示磁盘将被关闭,录制的内容将无法追加。这也应该提供与 DVD-ROM 驱动器更好的设备兼容性。 要刻录成一个预制的镜像,如 ``imagefile.iso``\ ,使用: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # growisofs -dvd-compat -Z /dev/cd0=imagefile.iso 刻录速度根据设备和正在使用的驱动器自动设置。要强制设置刻录速度,请使用 ``-speed=``\ 。请参考 `growisofs(1) <19.6.-chuang-jian-he-shi-yong-dvd.md>`__ 中例子的用法。 **注意** 为了支持大于 4.38GB 的工作文件,必须通过向 `mkisofs(8) <https://www.freebsd.org/cgi/man.cgi?query=mkisofs&sektion=8&format=html>`__ 和所有相关程序,如 `growisofs(1) <https://www.freebsd.org/cgi/man.cgi?query=growisofs&sektion=1&format=html>`__ 传递 ``-udf -iso-level 3`` 来创建一个 UDF/ISO-9660 混合文件系统。只有在创建 ISO 镜像文件或直接向磁盘写入文件时才需要这样做。由于以这种方式创建的磁盘必须用 `mount_udf(8) <https://www.freebsd.org/cgi/man.cgi?query=mount_udf&sektion=8&format=html>`__ 挂载为 UDF 文件系统,所以它只能在支持 UDF 的操作系统上使用。否则,它看起来就像含有损坏的文件。 要创建这种类型的 ISO 文件: .. code:: shell-session % mkisofs -R -J -udf -iso-level 3 -o imagefile.iso /path/to/data 将文件直接刻录到磁盘上: .. code:: shell-session # growisofs -dvd-compat -udf -iso-level 3 -Z /dev/cd0 -J -R /path/to/data 当一个 ISO 映像已经包含大文件时,\ `growisofs(1) <https://www.freebsd.org/cgi/man.cgi?query=growisofs&sektion=1&format=html>`__ 不需要额外的选项就可以将该镜像刻录到磁盘上。请确保使用包含 `mkisofs(8) <https://www.freebsd.org/cgi/man.cgi?query=mkisofs&sektion=8&format=html>`__ 的最新版本的 `sysutils/cdrtools <https://cgit.freebsd.org/ports/tree/sysutils/cdrtools/pkg-descr>`__\ ,因为旧版本可能不包含对大文件的支持。如果最新版本不能工作,请安装 `sysutils/cdrtools-devel <https://cgit.freebsd.org/ports/tree/sysutils/cdrtools-devel/pkg-descr>`__\ ,并阅读其 `mkisofs(8) <https://www.freebsd.org/cgi/man.cgi?query=mkisofs&sektion=8&format=html>`__\ 。 20.6.3.刻录 DVD-Video --------------------- DVD-Video 是一种基于 ISO 9660 和 micro-UDF(M-UDF)规范的特定文件系统。由于 DVD-Video 提出了一个特定的数据结构层次,因此需要一个特定的程序,如 `multimedia/dvdauthor <https://cgit.freebsd.org/ports/tree/multimedia/dvdauthor/pkg-descr>`__ 来编写 DVD。 如果 DVD-Video 文件系统的镜像已经存在,可以用与其他镜像相同的方式进行刻录。如果使用 ``dvdauthor`` 制作 DVD,并且目录在 **/path/to/video** 中,应该使用下面的命令来刻录 DVD-Video: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # growisofs -Z /dev/cd0 -dvd-video /path/to/video ``-dvd-video`` 被传递给 `mkisofs(8) <https://www.freebsd.org/cgi/man.cgi?query=mkisofs&sektion=8&format=html>`__\ ,让它创建一个 DVD-Video 文件系统。这个选项意味着 `growisofs(1) <https://www.freebsd.org/cgi/man.cgi?query=growisofs&sektion=1&format=html>`__ 的 ``-dvd-compat`` 选项。 20.6.4.使用 DVD+RW ------------------ 与 CD-RW 不同,需要在第一次使用前格式化空白的 DVD+RW。\ *建议* 让 `growisofs(1) <https://www.freebsd.org/cgi/man.cgi?query=growisofs&sektion=1&format=html>`__ 自动处理这个问题。也可以使用 ``dvd+rw-format`` 来格式化 DVD+RW : .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # dvd+rw-format /dev/cd0 只需执行一次此操作,只有空白的 DVD+RW 需要被格式化。格式化之后,就可以像往常一样刻录 DVD+RW。 要刻录一个全新的文件系统,而不仅仅是在 DVD+RW 上追加一些数据,不需要先清空光盘。而是要这样清空数据: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # growisofs -Z /dev/cd0 -J -R /path/to/newdata DVD+RW 格式支持将数据追加到以前的记录中。这个操作包括将一个新的片段合并到现有的片段上,因为它不被认为是多片段写入。\ `growisofs(1) <https://www.freebsd.org/cgi/man.cgi?query=growisofs&sektion=1&format=html>`__ 将 *扩展* 媒体上存在的 ISO 9660 文件系统。 例如,要向 DVD+RW 追加数据,请使用以下方法: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # growisofs -M /dev/cd0 -J -R /path/to/nextdata 在以后的写入过程中,应该使用与初次刻录时使用的相同的 `mkisofs(8) <https://www.freebsd.org/cgi/man.cgi?query=mkisofs&sektion=8&format=html>`__ 选项。 **注意** 使用 ``-dvd-compat`` 以获得与 DVD-ROM 驱动器更好的设备兼容性。当使用 DVD+RW 时,这个选项不会导致数据无法添加。 要清空光盘,请使用: .. code:: shell-session # growisofs -Z /dev/cd0=/dev/zero 20.6.5.使用 DVD-RW ------------------ DVD-RW 接受两种光盘格式。递增顺序写入和受限覆写。默认情况下,DVD-RW 光盘使用递增顺序写入格式。 可以直接写入空白的 DVD-RW,不需要进行格式化。然而,在写入新的数据之前,需要以递增顺序写入格式处理非空白 DVD-RW。 要清空递增顺序写入 DVD-RW 请使用: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # dvd+rw-format -blank=full /dev/cd0 .. **注意** 在 1x 光盘上使用 ``-blank=full`` 进行完全清空,大约需要一个小时。如果 DVD-RW 将以整盘一次写入(DAO)模式刻录,可以使用 ``-blank`` 进行快速清空。要在 DAO 模式下刻录 DVD-RW,请使用以下命令: .. code:: shell-session # growisofs -use-the-force-luke=dao -Z /dev/cd0=imagefile.iso 由于 `growisofs(1) <https://www.freebsd.org/cgi/man.cgi?query=growisofs&sektion=1&format=html>`__ 会自动尝试检测快速的空白光盘并进行 DAO 写入,所以无需使用\ ``-use-the-force-luke=dao``\ 。 任何 DVD-RW 都应该使用受限覆写,因为这种格式比默认的递增顺序写入更灵活。 要在递增顺序写入格式的 DVD-RW 上写入数据,使用与其他 DVD 格式相同的指令: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # growisofs -Z /dev/cd0 -J -R /path/to/data 要将一些数据追加到以前的记录中,请使用 `growisofs(1) <https://www.freebsd.org/cgi/man.cgi?query=growisofs&sektion=1&format=html>`__ 的 ``-M`` 选项。然而,如果在 DVD-RW 上以递增顺序写入模式追加数据,将在光盘上创建一个新的会话,结果将是一个多会话光盘。 在一个新的初始会话之前,不需要清空受限覆写格式的 DVD-RW。可以用 ``-Z`` 覆盖光盘。也可以用 ``-M`` 来扩展现有刻在光盘上的 ISO 9660 文件系统。最后会是一个单会话 DVD。 要使 DVD-RW 成为受限覆写格式,必须使用以下命令: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # dvd+rw-format /dev/cd0 要改回递增顺序写入格式,请使用: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # dvd+rw-format -blank=full /dev/cd0 20.6.6.多会话光盘 ----------------- 很少有 DVD-ROM 光驱支持多会话的 DVD,大多数时候只能读取第一个会话。DVD+R、DVD-R 和 DVD-RW 的递增顺序写入格式可以接受多个会话。对于 DVD+RW 和 DVD-RW 受限覆写格式,不存在多会话的概念。 在递增顺序写入格式的 DVD+R、DVD-R 或 DVD-RW 上的初始非封闭会话后,使用以下命令将在光盘上添加一个新的会话: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # growisofs -M /dev/cd0 -J -R /path/to/nextdata 在受限覆写模式下对 DVD+RW 或 DVD-RW 使用这个命令,会在将新的会话合并到现有会话的同时追加数据。其结果将是一张单节光盘。使用这种方法可以在这些类型的光盘上进行初始写入后添加数据。 **注意** 由于光盘上的一些空间在每个会话之间被用来标记会话的结束和开始,所以应该尽量使用大数据会话,减少会话数量以优化光盘空间。对于 DVD+R 来说,会话的数量被限制在 154 个,对于 DVD-R 来说大约是 2000 个,对于双层 DVD+R 来说是 127 个。 20.6.7.更多的信息 ----------------- 要获得关于 DVD 的更多信息,使用 ``dvd+rw-mediainfo`` */dev/cd0*\ ,即指定驱动器中的光盘。 关于 ``dvd+rw-tools`` 的更多信息可以在 `growisofs(1) <https://www.freebsd.org/cgi/man.cgi?query=growisofs&sektion=1&format=html>`__ 、\ `dvd+rw-tools 网站 <http://fy.chalmers.se/~appro/linux/DVD+RW/>`__\ 以及 `cdwrite 邮件列表 <http://lists.debian.org/cdwrite/>`__ 存档中找到。 **注意** 当创建一个与 ``dvd+rw-tools`` 有关的问题报告时,请包括 ``dvd+rw-mediainf``\ o 的输出。 20.6.8.使用 DVD-RAM ------------------- DVD-RAM 刻录机使用 SCSI 或 ATAPI 接口。对于 ATAPI 设备,必须通过在 **/boot/loader.conf** 中添加以下一行来启用 DMA 访问: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session hw.ata.atapi_dma="1" DVD-RAM 可以被看作是一个可移动的硬盘设备。像其他硬盘一样,在使用前必须被格式化 DVD-RAM。在这个例子中,整个磁盘空间将被格式化为标准的 UFS2 文件系统: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # dd if=/dev/zero of=/dev/acd0 bs=2k count=1 # bsdlabel -Bw acd0 # newfs /dev/acd0 必须根据配置改变 DVD 设备 **acd0** 的位置。 DVD-RAM 被格式化以后,它就可以像普通硬盘一样被挂载: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # mount /dev/acd0 /mnt 挂载后,DVD-RAM 将可读可写。