19.4. RAID

19.4.1. 软件 RAID

19.4.1.1. 连接磁盘驱动器配置 (CCD)

Original work by Christopher Shumway.
Revised by Jim Brown.

选择一个大容量存储比较好的解决方案,最重要的因素是产品的速度、 性能和成本。 通常这三者不可能都满足;要获得比较快和可靠的大容量存储设备, 就比较昂贵。但如果将成本降下来,那它的速度或可靠性就会打折扣。

在设计下面描述的系统时, 价格被选为最重要的因素, 接下来是速度和性能。 这个系统的数据传输速度基本上受限于网络。 性能也非常重要, CCD 驱动器上的所有数据都被备份到了 CD-R 盘, 可以很容易地对数据进行恢复。

在选择一个大容量的存储解决方案时,第一步是要设计您自己的需求。 如果您的需求更偏重于速度和性能,那么您的解决方案将就不同于上面的设计。

19.4.1.1.1. 安装硬件

除了 IDE 系统磁盘外,还有三个 Western Digital 30GB、5400 RPM 的 IDE 磁盘构成了大约 90G 的连接磁盘驱动存储空间。 理想情况是每个 IDE 硬盘都独占 IDE 控制器和数据线, 但为了尽可能降低成本, 通常并不会安装更多的控制器, 而是通过配置跳线,使每个 IDE 控制器都管理一个主盘和一个从盘。

重启动后,系统 BIOS 被配置成自动检测硬盘。FreeBSD 检测到它们:

ad0: 19574MB <WDC WD205BA> [39770/16/63] at ata0-master UDMA33 ad1: 29333MB <WDC WD307AA> [59598/16/63] at ata0-slave UDMA33 ad2: 29333MB <WDC WD307AA> [59598/16/63] at ata1-master UDMA33 ad3: 29333MB <WDC WD307AA> [59598/16/63] at ata1-slave UDMA33

注意:

如果 FreeBSD 没有检测到它们,请确定它们的跳线是否设置 正确。大多数 IDE 磁盘有一个 Cable Select 跳线。这个 不是 设置 master/slave 硬盘的跳线。查阅文档 信息来确定正确的跳线设置。

接下来考虑的是,如何创建文件系统。应该好好研究一下 vinum(4) (第 22 章 Vinum 卷管理程序)和 ccd(4) 两种方式,在这里我们选择 ccd(4)

19.4.1.1.2. 安装 CCD

ccd(4) 允许用户将几个相同的的磁盘通过一个逻辑文件系统 连接起来。要使用 ccd(4),您需要在内核中配置 ccd(4) 支持选项。把这行加入到内核配置文件中,然后重建内核:

device ccd

ccd(4) 的支持也可以内核模块的形式载入。

要安装 ccd(4), 首先需要使用 bsdlabel(8) 来编辑硬盘:

bsdlabel -w ad1 auto bsdlabel -w ad2 auto bsdlabel -w ad3 auto

此处将整个硬盘创建为 ad1c, ad2cad3c

下一步是改变 disklable 的类型。也可以使用 bsdlabel(8) 来编辑:

bsdlabel -e ad1 bsdlabel -e ad2 bsdlabel -e ad3

这儿在每个已经设置了 EDITOR 环境变量的磁盘上打开了 disklable,在我我例子中使用的是 vi(1)

可以看到:

8 partitions: # size offset fstype [fsize bsize bps/cpg] c: 60074784 0 unused 0 0 0 # (Cyl. 0 - 59597)

添加一个新的 e 分区给 ccd(4) 用。这可以是 c 分区的一个副本, 但 fstype 必须4.2BSD。做完之后,您会看到一面这些:

8 partitions: # size offset fstype [fsize bsize bps/cpg] c: 60074784 0 unused 0 0 0 # (Cyl. 0 - 59597) e: 60074784 0 4.2BSD 0 0 0 # (Cyl. 0 - 59597)
19.4.1.1.3. 建立文件系统

现在已给每个磁盘都加上了标签,下面需要建立 ccd(4)。要这样做, 需要使用 ccdconfig(8) 工具,同时要提供类似下面的选项:

ccdconfig ccd01 322 03 /dev/ad1e4 /dev/ad2e /dev/ad3e

每个选项的意义和用法如下所示:

1

配置设备的第一个参数,在这是 /dev/ccd0c/dev/ 部分是任选项。

2

下一个参数是文件系统的插入页(interleave)。插入页定义了一个 磁盘块中一个分段或条带(stripe)的大小,通常是 512 个字节。所以一个为 32 的插入页将是 16,384 字节。

3

插入页为 ccdconfig(8) 附带了标记。如果您要启用驱动器镜像, 需要在这儿指定它。在这个配置中没有做 ccd(4) 的镜像,所以把它 设为 0 (zero)。

4

ccdconfig(8) 的最后配置是设备的排列问题。使用完整的设备 路径名。

运行 ccdconfig(8)ccd(4) 就配置好了。现在要创建文件 系统了,参考 newfs(8) 选项,执行下同的命令:

newfs /dev/ccd0c
19.4.1.1.4. 自动创建

最后,要挂上 ccd(4) ,需要先配置它。把当前的配置文件写入 /etc/ccd.conf 中,使用下面的命令:

ccdconfig -g > /etc/ccd.conf

当重新启动系统时,如果 /etc/ccd.conf 存在, 脚本 /etc/rc 就运行 ccdconfig -C。 这样就能自动配置 ccd(4) 以到它能被挂上。

注意:

如果启动进入了单用户模式,在 mount(8)ccd(4) 之前,需要执行下面的命令来配置队列:

ccdconfig -C

要自动挂接 ccd(4),需要为 ccd(4)/etc/fstab 中配置一个记录,以便在启动时它能被挂上。 如下所示:

/dev/ccd0c /media ufs rw 2 2

19.4.1.2.  Vinum 卷管理

Vinum 卷管理是一个实现虚拟磁盘的块驱动设备工具。它使磁盘从 块设备的接口和数据映射中独立出来。与传统的存储设备相比,增加了 灵活性、性能和可靠性。 vinum(4) 实现了 RAID-0、RAID-1 和 RAID-5 三种模式,它们既可以独立使用,也可组合使用。

参考 第 22 章 Vinum 卷管理程序 得到更多 vinum(4) 的信息。

19.4.2. 硬件 RAID

FreeBSD 支持很多硬件 RAID 控制器。 这些硬件不需要 FreeBSD 指定软件来管理 RAID 系统。

使用 BIOS 支持的硬件,一般情况下这些硬件可以自行操作。 下面是一个简明的描述设置一个 Promise IDE RAID 控制器。 当硬件设备装好且系统重启后,屏幕上显示一个询问信息。接着进入硬件设置屏幕。在这里, 您可以把所有的磁盘联合在一起使用。这样 FreeBSD 将磁盘看作一个驱动器。其它 级别的 RAID 也可以相应的进行设置。

19.4.3. 重建 ATA RAID1 阵列

FreeBSD 允许您热插拔阵列中损坏的磁盘。 在您重新启动系统之前请注意这一点。

您可能会在 /var/log/messages 或者在 dmesg(8) 的输出中看到类似下面这些的内容:

ad6 on monster1 suffered a hard error. ad6: READ command timeout tag=0 serv=0 - resetting ad6: trying fallback to PIO mode ata3: resetting devices .. done ad6: hard error reading fsbn 1116119 of 0-7 (ad6 bn 1116119; cn 1107 tn 4 sn 11)\\ status=59 error=40 ar0: WARNING - mirror lost

使用 atacontrol(8),查看更多的信息:

# atacontrol list ATA channel 0: Master: no device present Slave: acd0 <HL-DT-ST CD-ROM GCR-8520B/1.00> ATA/ATAPI rev 0 ATA channel 1: Master: no device present Slave: no device present ATA channel 2: Master: ad4 <MAXTOR 6L080J4/A93.0500> ATA/ATAPI rev 5 Slave: no device present ATA channel 3: Master: ad6 <MAXTOR 6L080J4/A93.0500> ATA/ATAPI rev 5 Slave: no device present # atacontrol status ar0 ar0: ATA RAID1 subdisks: ad4 ad6 status: DEGRADED
  1. 首先您应将包含故障盘的 ata 通道卸下, 以便安全地将其拆除:

    # atacontrol detach ata3
  2. 换上磁盘

  3. 重新挂接 ata 通道:

    # atacontrol attach ata3 Master: ad6 <MAXTOR 6L080J4/A93.0500> ATA/ATAPI rev 5 Slave: no device present
  4. 将新盘作为热备盘加入阵列:

    # atacontrol addspare ar0 ad6
  5. 重建阵列:

    # atacontrol rebuild ar0
  6. 可以通过下面的命令来查看进度:

    # dmesg | tail -10 [output removed] ad6: removed from configuration ad6: deleted from ar0 disk1 ad6: inserted into ar0 disk1 as spare # atacontrol status ar0 ar0: ATA RAID1 subdisks: ad4 ad6 status: REBUILDING 0% completed
  7. 等待操作完成。

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

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

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