选择一个大容量存储比较好的解决方案,最重要的因素是产品的速度、 性能和成本。通常这三者不可能都满足;要获得比较快和可靠的大容量存储 设备,就比较昂贵。但如果将成本降下来,那它的速度或可靠性就会打折扣。
在设计下面描述的系统时,价格被选为最重要的因素,接下来是速度 和性能。这人系统的数据传输速度及大的取决于网络。性能也非常重要, CCD驱动器上的所有数据都被备份到了CD-R盘,可以很容易的对数据进行恢复。
在选择一个大容量的存储解决方案时,第一步是要设计你自己的需求。 如果你的需求更偏重于速度和性能,那么你的解决方案将就不同于上面的设计。
除了IDE系统磁盘外,还有三个 Western Digital 30GB, 5400 RPM 的IDE磁盘构成了大约90G的连接磁盘驱动存储空间。最好是每个IDE硬盘 都使用一个自己的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(8) (µÚ 17 章)和 ccd(4) 两种方式,在这里我们选择 ccd(4)
ccd(4) 允许用户将几个相同的的磁盘通过一个逻辑文件系统 连接起来。要使用 ccd(4),你需要在内核中配置 ccd(4) 支持选项。把这行加入到内核配置文件中,然后重建内核:
pseudo-device ccd 4
在 5.X和以后的版本中,你必须使用下面的行来代替:
device ccd
注: 在 FreeBSD 5.X里,不必指定一系统的 ccd(4) 设备, ccd(4) 设备将自动按需要创建新的 -- 设备。
ccd(4) 在FreeBSD 3.0 或以后的版本中也可以作为一个内核模块 来加载
要安装 ccd(4), 首先需要使用 disklabel(8) 来编辑硬盘:
disklabel -r -w ad1 auto disklabel -r -w ad2 auto disklabel -r -w ad3 auto
这儿把整个硬盘创建成 ad1c, ad2c 和 ad3c 。
注: 从 FreeBSD 5.1-RELEASE 开始, bsdlabel(8) 程序代替 了老版本的 disklabel(8) 程序。bsdlabel(8) 中大量过时的选项 和参数也被取消; 在上面的例子中,选项 -r 应该被删掉。 更的信息可以参考 bsdlabel(8) 手册。
下一步是改变disklable的类型。也可以使用 disklabel(8) 来编辑:
disklabel -e ad1 disklabel -e ad2 disklabel -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)
ccd0c 的设备节点可能不存在,所以要 创建它,执行下面的命令:
cd /dev sh MAKEDEV ccd0
注: 在 FreeBSD 5.0, devfs(5) 将自动管理在 /dev, 里的设备结点,所以没有必要使用 MAKEDEV 命令。
现在已给每个磁盘都加上了标签,下面需要建立 ccd(4)。要这样做, 需要使用 ccdconfig(8)工具,同时要提供类似下面的选项:
ccdconfig ccd032
0
/dev/ad1e
/dev/ad2e /dev/ad3e
每个选项的意义和用法如下所示:
运行 ccdconfig(8) 后 ccd(4) 就配置好了。现在要创建文件 系统了,参考 newfs(8) 选项,执行下同的命令:
newfs /dev/ccd0c
最后,要挂上 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
Vinum 卷管理是一个实现虚拟磁盘的块驱动设备工具。它使磁盘从 块设备的接口和数据映射中独立出来。与传统的存储设备相比,增加了 灵活性、性能和可靠性。 vinum(8) 实现了 RAID-0, RAID-1 和 RAID-5 三种模式,它们即可以独立使用,也可组合使用。
参考 µÚ 17 章 得到更多 vinum(8) 的信息。
FreeBSD 支持很多硬件 RAID 控制器。 这些硬件不需要FreeBSD指定软件来管理 RAID 系统。
使用 BIOS 支持的硬件,一般情况下这些硬件可以自行操作。 下面是一个简明的描述设置一个 Promise IDE RAID 控制器。 当硬件设备装好且系统重启后,屏幕上显示一个询问信息。接着进入硬件设置屏幕。在这里, 你可以把所有的磁盘联合在一起使用。这样 FreeBSD 将磁盘看作一个驱动器。其它 级别的 RAID 也可以相应的进行设置。
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
你首先需要将磁盘从阵列中移除以便你可以 安全的拆除它:
# atacontrol detach 3
换上磁盘
把磁盘作为备用磁盘安装:
# atacontrol attach 3 Master: ad6 <MAXTOR 6L080J4/A93.0500> ATA/ATAPI rev 5 Slave: no device present
重建阵列:
# atacontrol rebuild ar0
rebuild 命令挂起直到完成。然而,可以打开另一个终端 (使用 Alt+Fn) 通过下面的命令来检查进程:
# 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
等待操作完成。