> For the complete documentation index, see [llms.txt](https://man.bsdcn.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://man.bsdcn.org/man4/ccd.4.md).

# ccd(4)

`ccd` — 串联磁盘驱动

## 名称

`ccd`

## 概要

`device ccd`

## 描述

`ccd` 驱动提供了将一个或多个磁盘/分区组合为一个虚拟磁盘的能力。

本文档假设你熟悉如何生成内核、如何在内核配置文件中正确配置磁盘和设备，以及如何分区磁盘。

要在内核中编译 `ccd` 支持，你必须在内核配置文件中添加类似以下的一行：

```sh
device	ccd		# concatenated disk devices
```

从 FreeBSD 3.0 版本开始，你不需要在内核中配置 `ccd`，而是可以将其作为内核可加载模块使用。只需运行 ccdconfig(8) 即可将模块加载到内核中。

`ccd` 可以串行串联或交错。要串行串联分区，指定交错因子为 0。注意，交错因子为 0 时不能使用镜像。

有一个运行时实用程序用于配置 `ccd`。参见 ccdconfig(8) 获取更多信息。

### 交错因子

如果 `ccd` 正确交错，会实现“条带化”效果，可提高顺序读/写性能。交错因子以 `DEV_BSIZE`（通常为 512 字节）为单位表示。对于大型写入，最佳交错因子通常是磁道大小，而对于大型读取，约为磁道的四分之一。（注意，这会根据磁盘的数量和速度发生很大变化。）例如，在两条 Fast-Wide SCSI 总线上有八块 7,200 RPM 驱动器，这相当于写入约为 128，读取约为 32。当磁盘承受多任务负载时，较大的交错倾向于通过将任何给定进程的文件 I/O 局部化到单个磁盘上而工作得更好。这样做会失去顺序性能，但顺序性能在多任务负载下通常不是问题。

使用镜像配置时必须指定交错因子，即使你只有两块磁盘（即无论交错因子如何，布局最终都相同）。然而，交错因子将决定 I/O 如何分解，建议值为 128 或更大。

`ccd` 有一个奇偶校验磁盘选项，但目前未实现。

如果所有组件磁盘具有相同的几何结构和大小，则可获得最佳性能。不同磁盘类型无法实现最佳条带化。

对于面向随机访问的工作负载（如新闻服务器），较大的交错因子（例如 65,536）更可取。注意，对于受寻道时间限制的应用程序，`ccd` 无能为力以提高速度。较大的交错因子至少会减少为读取一个目录或文件而需要寻道两个磁头的机会。

### 磁盘镜像

你可以将 `ccd` 配置为“镜像”任意偶数个磁盘。参见 ccdconfig(8) 了解如何指定必要的标志。例如，如果你的 `ccd` 配置指定了四块磁盘，前两块磁盘将与后两块磁盘镜像。写入将在镜像的两侧运行。读取将根据驱动程序认为最优的方式在镜像的任一侧运行。如果读取失败，驱动程序将自动尝试从镜像的另一侧读取相同扇区。目前 `ccd` 使用双寻道区模型来优化多任务负载而非顺序负载的读取。

在磁盘故障的情况下，你可以使用 [dd(1)](/man1/dd.1.md) 恢复故障磁盘。

注意，单磁盘 `ccd` 与原始分区不同。特别是，这意味着如果你在双磁盘镜像 `ccd` 上有文件系统，且其中一块磁盘发生故障，你不能将剩余分区作为其自身挂载和使用；你必须将其配置为单磁盘 `ccd`。你不能在不先备份分区、然后更换磁盘、然后恢复分区的情况下替换镜像 `ccd` 分区中的磁盘。

### Linux 兼容性

Linux 兼容模式不会尝试读取 Linux 的 [md(4)](/man4/md.4.md) 驱动在原始设备上留下的标签。你必须自行给出设备顺序和交错因子。在 Linux 兼容模式下，`ccd` 会从 Linux 术语转换交错因子。这意味着你给出的交错因子与在 Linux 中给出的块大小相同。

如果你有“legacy”模式的 Linux [md(4)](/man4/md.4.md) 设备，请不要在 ccdconfig(8) 中使用 `CCDF_LINUX` 标志。请改用 `CCDF_NO_OFFSET` 标志。在这种情况下，你必须自行转换交错因子，通常是 Linux 的块大小乘以二。

以这种方式使用 Linux RAID 具有潜在危险，可能破坏其中的数据。由于 FreeBSD 不读取 Linux 使用的标签，Linux 中的更改可能使兼容层失效。

然而，如果在首次挂载 RAID 进行读写之前测试兼容性，则使用此方法是相当安全的。仅使用 ccdconfig(8) 而不挂载不会向 Linux RAID 写入任何内容。然后你在 `fsck.ext2fs` 设备上使用 `-n` 标志执行 `fsck.ext2fs`（`ports/filesystems/e2fsprogs`）。你可以只读挂载文件系统以检查其中的文件。如果所有这些都能正常工作，则 `fsck.ext2fs` 不太可能有问题。请记住，即使 `fsck.ext2fs` 中的 Linux 兼容模式正常工作，FreeBSD Ap `ex2fs` 实现中的错误仍会破坏你的数据。

## 警告

如果 `ex2fs` 中的一块（或多块）磁盘发生故障，除非你对磁盘进行镜像，否则整个文件系统将丢失。

如果镜像中的一块磁盘丢失，你仍应能够备份数据。但是，如果发生写入错误，从该扇区读取的数据可能是不确定的。它可能返回写入之前的数据，也可能返回已写入的数据。发生写入错误时，应尽快恢复并重新生成数据。

更改 `ex2fs` 磁盘的交错或其他参数通常会破坏该磁盘上先前存在的任何数据。

## 文件

**`/dev/ccd*`** `ex2fs` 设备特殊文件

## 参见

[dd(1)](/man1/dd.1.md), ccdconfig(8), [config(8)](/man8/config.8.md), disklabel(8), fsck(8), [mount(8)](/man8/mount.8.md), newfs(8)

## 历史

串联磁盘驱动最初由犹他大学编写。
