# 20.6.创建和使用 DVD

与 CD 相比，DVD 是下一代光学媒体存储技术。DVD 可以存储比任何 CD 更多的数据，并且是视频出版的标准。

可记录 DVD 有五种物理格式：

* **DVD-R**：这是第一个可记录 DVD 格式。DVD-R 标准由 [DVD Forum](http://www.dvdforum.org/forum.shtml) 定义。该格式是一次性可写的。
* **DVD-RW**：这是 DVD-R 标准的可重写版本。DVD-RW 可以重写约 1000 次。
* **DVD-RAM**：这是一个可重写格式，可以视为可移动硬盘。然而，这种介质与大多数 DVD-ROM 驱动器和 DVD-Video 播放器不兼容，因为只有少数 DVD 写入器支持 DVD-RAM 格式。有关 DVD-RAM 使用的更多信息，请参阅 [使用 DVD-RAM](https://docs.freebsd.org/en/books/handbook/disks/#creating-dvd-ram)。
* **DVD+RW**：这是由 [DVD+RW Alliance](https://en.wikipedia.org/wiki/DVD%2BRW_Alliance) 定义的可重写格式。DVD+RW 可以重写约 1000 次。
* **DVD+R**：这是 DVD+RW 格式的单次写入变种。

单层可记录 DVD 可以存储最多 4,700,000,000 字节，实际上是 4.38 GB 或 4485 MB，因为 1 千字节等于 1024 字节。

> **注意**
>
> 必须区分物理介质与应用程序。例如，DVD-Video 是一种特定的文件布局，可以写入任何可记录的 DVD 物理介质，如 DVD-R、DVD+R 或 DVD-RW。在选择介质类型之前，请确保刻录机和 DVD-Video 播放器与所考虑的介质兼容。

## 20.6.1. 配置

要执行 DVD 刻录，请使用 [growisofs(1)](https://man.freebsd.org/cgi/man.cgi?query=growisofs\&sektion=1\&format=html)。此命令是 [sysutils/dvd+rw-tools](https://cgit.freebsd.org/ports/tree/sysutils/dvd+rw-tools/) 工具的一部分，支持所有 DVD 媒体类型。

这些工具使用 SCSI 子系统访问设备，因此必须加载或静态编译 [ATAPI/CAM 支持](https://docs.freebsd.org/en/books/handbook/disks/#atapicam) 到内核中。如果刻录机使用 USB 接口，则无需此支持。有关 USB 设备配置的更多详细信息，请参阅 [USB 存储设备](https://docs.freebsd.org/en/books/handbook/disks/#usb-disks)。

ATAPI 设备还必须启用 DMA 访问，方法是在 **/boot/loader.conf** 中添加以下行：

```ini
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/)，它提供了一个用户友好的界面，支持 [growisofs(1)](https://man.freebsd.org/cgi/man.cgi?query=growisofs\&sektion=1\&format=html) 和许多其他刻录工具。

## 20.6.2. 刻录数据 DVD

由于 [growisofs(1)](https://man.freebsd.org/cgi/man.cgi?query=growisofs\&sektion=1\&format=html) 是 [mkisofs](https://docs.freebsd.org/en/books/handbook/disks/#mkisofs) 的前端，它将调用 [mkisofs(8)](https://man.freebsd.org/cgi/man.cgi?query=mkisofs\&sektion=8\&format=html) 来创建文件系统布局并执行 DVD 刻录过程。这意味着在刻录之前不需要创建数据的镜像。

要将 **/path/to/data** 中的数据刻录到 DVD+R 或 DVD-R，请使用以下命令：

```sh
# growisofs -dvd-compat -Z /dev/cd0 -J -R /path/to/data
```

在此示例中，`-J -R` 被传递给 [mkisofs(8)](https://man.freebsd.org/cgi/man.cgi?query=mkisofs\&sektion=8\&format=html)，以创建带有 Joliet 和 Rock Ridge 扩展的 ISO 9660 文件系统。有关更多详细信息，请参阅 [mkisofs(8)](https://man.freebsd.org/cgi/man.cgi?query=mkisofs\&sektion=8\&format=html)。

对于初始会话录制，`-Z` 可用于单次和多次会话。将 *​/dev/cd0*​ 替换为 DVD 设备的名称。使用 `-dvd-compat` 表示磁盘将被关闭，并且录制将不可追加。这还应提供更好的与 DVD-ROM 驱动器的兼容性。

要刻录预制的镜像文件，如 *imagefile.iso*，请使用：

```sh
# growisofs -dvd-compat -Z /dev/cd0=imagefile.iso
```

写入速度应根据所使用的介质和驱动器自动检测并设置。要强制设置写入速度，请使用 `-speed=`。有关示例用法，请参阅 [growisofs(1)](https://man.freebsd.org/cgi/man.cgi?query=growisofs\&sektion=1\&format=html)。

> **注意**
>
> 为了支持大于 4.38GB 的工作文件，必须通过将 `-udf -iso-level 3` 传递给 [mkisofs(8)](https://man.freebsd.org/cgi/man.cgi?query=mkisofs\&sektion=8\&format=html) 和所有相关程序（如 [growisofs(1)](https://man.freebsd.org/cgi/man.cgi?query=growisofs\&sektion=1\&format=html)）来创建 UDF/ISO-9660 混合文件系统。仅在创建 ISO 镜像文件或直接将文件写入磁盘时需要此操作。由于以这种方式创建的磁盘必须作为 UDF 文件系统挂载，并使用 [mount\_udf(8)](https://man.freebsd.org/cgi/man.cgi?query=mount_udf\&sektion=8\&format=html)，因此它只能在支持 UDF 的操作系统上使用。否则，它看起来就像包含损坏文件的磁盘。
>
> 要创建这种类型的 ISO 文件，请使用：
>
> ```sh
> % mkisofs -R -J -udf -iso-level 3 -o imagefile.iso /path/to/data
> ```
>
> 要将文件直接写入磁盘，请使用：
>
> ```sh
> # growisofs -dvd-compat -udf -iso-level 3 -Z /dev/cd0 -J -R /path/to/data
> ```
>
> 当 ISO 镜像中已包含大文件时，[growisofs(1)](https://man.freebsd.org/cgi/man.cgi?query=growisofs\&sektion=1\&format=html) 刻录该镜像时不需要额外选项。
>
> 务必使用最新版本的 [sysutils/cdrtools](https://cgit.freebsd.org/ports/tree/sysutils/cdrtools/)，因为旧版本可能不支持大文件。如果最新版本无法使用，请安装 [sysutils/cdrtools-devel](https://cgit.freebsd.org/ports/tree/sysutils/cdrtools-devel/) 并阅读其 [mkisofs(8)](https://man.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/)，来创建 DVD。

如果已经存在 DVD-Video 文件系统的镜像，可以像其他镜像一样进行刻录。如果使用 `dvdauthor` 制作了 DVD 并且结果存放在 **/path/to/video**，则可以使用以下命令来刻录 DVD-Video：

```sh
# growisofs -Z /dev/cd0 -dvd-video /path/to/video
```

`-dvd-video` 选项传递给 [mkisofs(8)](https://man.freebsd.org/cgi/man.cgi?query=mkisofs\&sektion=8\&format=html)，指示其创建 DVD-Video 文件系统布局。此选项意味着使用了 `-dvd-compat` [growisofs(1)](https://man.freebsd.org/cgi/man.cgi?query=growisofs\&sektion=1\&format=html) 选项。

## 20.6.4. 使用 DVD+RW

与 CD-RW 不同，初次使用的 DVD+RW 需要先格式化。*推荐*在适当的情况下让 [growisofs(1)](https://man.freebsd.org/cgi/man.cgi?query=growisofs\&sektion=1\&format=html) 自动处理此事。然而，也可以使用 `dvd+rw-format` 来格式化 DVD+RW：

```sh
# dvd+rw-format /dev/cd0
```

此操作只需要执行一次，并且只需要格式化未使用过的 DVD+RW 媒体。格式化后，DVD+RW 可以像往常一样进行刻录。

若要刻录一个全新的文件系统而不仅仅是向 DVD+RW 添加一些数据，无需首先清空介质。可以像下面这样覆盖之前的录制内容：

```sh
# growisofs -Z /dev/cd0 -J -R /path/to/newdata
```

DVD+RW 格式支持向先前的录制内容追加数据。此操作将新的会话与现有的会话合并，它不被视为多会话写入。 [growisofs(1)](https://man.freebsd.org/cgi/man.cgi?query=growisofs\&sektion=1\&format=html) 将*扩展*媒体上现有的 ISO 9660 文件系统。

例如，要将数据追加到 DVD+RW，请使用以下命令：

```sh
# growisofs -M /dev/cd0 -J -R /path/to/nextdata
```

在后续写入时，应该使用与初始会话相同的 [mkisofs(8)](https://man.freebsd.org/cgi/man.cgi?query=mkisofs\&sektion=8\&format=html) 选项。

> **注意**
>
> 使用 `-dvd-compat` 以提高与 DVD-ROM 驱动器的兼容性。当使用 DVD+RW 时，该选项不会阻止数据的添加。

要清空介质，请使用：

```sh
# growisofs -Z /dev/cd0=/dev/zero
```

## 20.6.5. 使用 DVD-RW

DVD-RW 接受两种磁盘格式：增量顺序格式和受限覆盖格式。默认情况下，DVD-RW 磁盘使用顺序格式。

一个全新的 DVD-RW 可以直接写入，而无需格式化。然而，若是非全新的 DVD-RW 且使用顺序格式，则需要在写入新初始会话之前先将其清空。

要清空顺序模式下的 DVD-RW，请使用：

```sh
# dvd+rw-format -blank=full /dev/cd0
```

> **注意**
>
> 使用 `-blank=full` 进行完全清空将花费大约一个小时（1x 媒体）。如果 DVD-RW 将以 Disk-At-Once (DAO) 模式进行刻录，可以使用 `-blank` 进行快速清空。要以 DAO 模式刻录 DVD-RW，请使用以下命令：
>
> ```
> # growisofs -use-the-force-luke=dao -Z /dev/cd0=imagefile.iso
> ```
>
> 由于 [growisofs(1)](https://man.freebsd.org/cgi/man.cgi?query=growisofs\&sektion=1\&format=html) 会自动尝试检测快速清空的介质并启动 DAO 写入，因此不需要使用 `-use-the-force-luke=dao`。建议使用受限覆盖模式，因为这种格式比默认的增量顺序格式更加灵活。

要在顺序 DVD-RW 上写入数据，请使用与其他 DVD 格式相同的指令：

```sh
# growisofs -Z /dev/cd0 -J -R /path/to/data
```

要将一些数据追加到先前的录制内容中，请使用 `-M` 和 [growisofs(1)](https://man.freebsd.org/cgi/man.cgi?query=growisofs\&sektion=1\&format=html)。然而，如果数据是追加到顺序模式下的 DVD-RW 上，新会话将会创建，结果是一个多会话磁盘。

在受限覆盖格式的 DVD-RW 上，无需清空介质即可进行新初始会话。只需使用 `-Z` 覆盖磁盘即可。也可以使用 `-M` 扩展已写入磁盘的现有 ISO 9660 文件系统，结果将是一个单会话 DVD。

要将 DVD-RW 转换为受限覆盖格式，必须使用以下命令：

```sh
# dvd+rw-format /dev/cd0
```

要恢复为顺序格式，请使用：

```sh
# 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 上初始非关闭会话后，将向磁盘添加一个新会话：

```sh
# 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 <device>`。

有关 dvd+rw-tools 的更多信息，请参阅 [growisofs(1)](https://man.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-mediainfo` 的输出。

## 20.6.8. 使用 DVD-RAM

DVD-RAM 写入器可以使用 SCSI 或 ATAPI 接口。对于 ATAPI 设备，必须通过将以下行添加到 **/boot/loader.conf** 来启用 DMA 访问：

```sh
hw.ata.atapi_dma="1"
```

DVD-RAM 可以被看作是一个可移动硬盘。像其他硬盘一样，在使用之前必须对 DVD-RAM 进行格式化。以下是格式化整个磁盘空间并使用标准 UFS2 文件系统的示例：

```sh
# dd if=/dev/zero of=/dev/acd0 bs=2k count=1
# bsdlabel -Bw acd0
# newfs /dev/acd0
```

DVD 设备 **acd0** 必须根据实际配置进行更改。

待 DVD-RAM 格式化完成，它就可以像普通硬盘一样挂载：

```sh
# mount /dev/acd0 /mnt
```

挂载后，DVD-RAM 将可以读写。
