# 21.4.RAID3——带有专用奇偶校验的字节级条带

RAID3 是一种将多个磁盘驱动器组合成一个单一卷并使用专用奇偶校验磁盘的方式。在 RAID3 系统中，数据被拆分成多个字节，这些字节会写入除一个磁盘外的所有磁盘，而该磁盘作为专用奇偶校验磁盘。也就是说，从 RAID3 实现中读取数据时，会访问所有磁盘。通过使用多个磁盘控制器，可以提高性能。RAID3 阵列提供了对 1 个磁盘的容错能力，同时提供的容量为总磁盘容量的 1 - 1/n，其中 n 是阵列中的硬盘数量。这样的配置非常适合存储较大尺寸的数据，例如多媒体文件。

构建 RAID3 阵列至少需要 3 个物理硬盘。每个磁盘的大小必须相同，因为 I/O 请求是交替进行的，读取或写入数据时会并行地访问多个磁盘。此外，由于 RAID3 的特性，硬盘数量必须是 3、5、9、17 等，或 2^n + 1。

本节将展示如何在 FreeBSD 系统上创建软件 RAID3。

> **注意**
>
> 虽然理论上可以从 RAID3 阵列启动 FreeBSD，但这种配置不常见亦不推荐使用。

## 21.4.1. 创建专用 RAID3 阵列

在 FreeBSD 中，RAID3 的支持是通过 [graid3(8)](https://man.freebsd.org/cgi/man.cgi?query=graid3\&sektion=8\&format=html) GEOM 类实现的。要在 FreeBSD 上创建一个专用的 RAID3 阵列，需要按照以下步骤操作。

1. 首先，通过以下命令加载 **geom\_raid3.ko** 内核模块：

   ```sh
   # graid3 load
   ```

   或者：

   ```sh
   # kldload geom_raid3
   ```
2. 确保存在合适的挂载点。以下命令创建一个新目录，用作挂载点：

   ```sh
   # mkdir /multimedia
   ```
3. 确定将添加到阵列中的磁盘的设备名称，并创建新的 RAID3 设备。最后列出的磁盘将作为专用奇偶校验磁盘。在此示例中，使用了三块未分区的 ATA 磁盘：**ada1** 和 **ada2** 用于数据，**ada3** 用于奇偶校验。

   ```sh
   # graid3 label -v gr0 /dev/ada1 /dev/ada2 /dev/ada3
   Metadata value stored on /dev/ada1.
   Metadata value stored on /dev/ada2.
   Metadata value stored on /dev/ada3.
   Done.
   ```
4. 为新创建的 **gr0** 设备分区并在其上创建 UFS 文件系统：

   ```sh
   # gpart create -s GPT /dev/raid3/gr0
   # gpart add -t freebsd-ufs /dev/raid3/gr0
   # newfs -j /dev/raid3/gr0p1
   ```

   屏幕上将出现许多数字，经过一段时间后，过程将完成。卷已经创建，并准备好挂载：

   ```sh
   # mount /dev/raid3/gr0p1 /multimedia/
   ```

   现在 RAID3 阵列已准备好使用。

需要额外的配置来确保在系统重启后保持此设置。

1. 必须在系统初始化时加载 **geom\_raid3.ko** 模块。为了在系统启动时自动加载内核模块，请将以下行添加到 **/boot/loader.conf** 文件中：

   ```sh
   geom_raid3_load="YES"
   ```
2. 必须将以下卷信息添加到 **/etc/fstab** 文件中，以便在系统启动时自动挂载阵列的文件系统：

   ```sh
   /dev/raid3/gr0p1	/multimedia	ufs	rw	2	2
   ```
