(me@ram.org)
本文档描述了如何设置 SCSI 硬件 RAID,主要侧重于 DPT 的基于主机的适配器,尽管此处应用的原理相当通用。
使用以下信息风险自负。对于您在阅读本 HOWTO 后所做的任何事情,我概不负责。本 HOWTO 的最新版本始终可在 http://www.ram.org/computing/linux/dpt_raid.html 获取。
就本 HOWTO 而言,我假设您仅运行 Linux 系统。另请注意,我仅使用 DPT Smartcache IV PM2144UW 和 PM3334UW 控制器、DPT (SmartRAID tower) 和 Wetex 机箱进行了尝试,并且我没有其他设置的经验。因此,您的设置可能会有所不同。
一种受良好支持的基于主机的硬件 RAID 控制器(即,Linux 下存在驱动程序的控制器)是由 DPT 制造的控制器。但是,还存在其他基于主机和 SCSI 到 SCSI 的控制器,它们可能在 Linux 下工作。这些包括由 Syred、ICP-Vortex 和 BusLogic 制造的控制器。有关更多信息,请参阅 Linux 的 RAID 解决方案页面。
如果将来支持其他控制器,我将尽力将该信息纳入本 HOWTO。请将您认为适合本 HOWTO 的任何此类信息发送给我。
本文档目前以 DPT 为中心。基本上所有 SmartRAID IV 控制器都受支持。
ICP vortex 拥有一整套支持 Linux 的磁盘阵列控制器。自 2.0.31 版本以来,ICP 驱动程序已在 Linux 内核中。所有主要的 Linux 发行商 S.u.S.e.、LST Power Linux、Caldera 和 Red Hat 都支持将 ICP 控制器作为启动/安装控制器。RAID 系统可以使用其 ROMSETUP 轻松配置(您不必启动 MS-DOS 进行配置!)。
使用监控实用程序 GDTMON,可以在操作期间管理完整的 ICP RAID 系统(检查传输速率、设置控制器和硬盘的参数、更换有缺陷的硬盘等)。目前可用的有: 用于 RAID 0 和 RAID 1 的 1 通道和 2 通道宽和超 SCSI 控制器 用于 RAID 0、1、4、5 和 10 的 1、2、3 和 5 通道宽和超 SCSI 控制器 用于 RAID 0 和 RAID 1 的 1 通道和 2 通道宽和 ultra2 LVDS SCSI 控制器 用于 RAID 0、1、4、5 和 10 的 1、2、3 和 5 通道宽和 ultra2 LVDS SCSI 控制器 用于 RAID 0、1、4、5 和 10 的 1 端口和 2 端口光纤通道控制器 很快还将提供 64 位控制器。
ICP 正在将入门级 RS 系列从 Ultra2 SCSI 过渡到 Ultra160 SCSI。驱动程序、固件、功能、特性等保持不变。它们仍然是 32 位卡,i960RS 处理器以 100MHz 的频率工作。唯一的区别是它们将在 Ultra160(数据传输速率为 160MB/秒)而不是 Ultra2(数据传输速率为 80MB/秒)下工作。
即刻生效,GDT7523RN 单元将变为 GDT8523RZ,GDT7623RN 单元将变为 GDT8623RZ。从 PCI 总线上的 33MHz 过渡到 66MHz 代表了巨大的潜在性能提升。新卡将配备新的 Intel 80303 “Zion” 处理器,允许总线主控传输速率高达 528MB/秒,并且将在 PC133 SDRAM Dimms 上占用高达 256MB 的 ECC RAM。
考虑到所有这些选项,如果您正在寻找 RAID 解决方案,则需要仔细考虑您想要什么。根据您想做什么以及您希望使用的 RAID 级别,某些卡可能比其他卡更好。例如,SCSI 到 SCSI 适配器可能不如基于主机的适配器。EATA-DMA 驱动程序的作者 Michael Neuffer (neuffer@uni-mainz.de) 在他的 Linux 高性能 SCSI 和 RAID 页面上对此进行了很好的讨论。
机箱类型会影响驱动器的热插拔能力、警告系统(即,是否会有故障指示,以及您是否会知道哪个驱动器发生故障)以及驱动器接收的处理类型(例如,冗余冷却和电源)。我们使用了 DPT 提供的机箱,它们工作得非常好,但价格昂贵。
请参阅说明手册以安装卡和驱动器。对于 DPT,由于 Linux 的存储管理器尚不存在,因此您需要创建一个 MS-DOS 格式的磁盘,并在其中包含系统(通常使用 MS-DOS 提示符下的命令“format /s”创建)。您还将使用用于 MS-DOS 的 DPT 存储管理器(可从 Adaptec 网站获得),您可能应该复制一份以确保安全。
硬件就位后,使用 DOS 系统盘启动。将 DOS 磁盘替换为存储管理器。并使用以下命令调用存储管理器
a:\ dptmgr
等待一分钟左右,您将获得一个不错的选项菜单。将磁盘集配置为硬件 RAID(单个逻辑阵列)。选择“其他”作为操作系统。
MS-DOS 存储管理器使用鼠标要容易得多,因此您可能希望在您创建的初始系统磁盘上安装鼠标驱动程序。
从技术上讲,应该可以在 Linux 下运行 SCO 存储管理器,但这可能比其价值更麻烦。在 Linux 下运行 MS-DOS 存储管理器可能更容易。
您将需要配置内核以支持 SCSI 和适当的底层驱动程序。有关如何编译内核的信息,请参阅 Kernel HOWTO。一旦您为 SCSI 支持选择“是”,在底层驱动程序部分,选择您选择的驱动程序(对于大多数符合 EATA DMA 标准的 (DPT) 卡,选择 EATA DMA 或 EATA ISA/EISA/PCI,对于 DPT 的非常旧的 PM2001 和 PM2012A,选择 EATA PIO)。大多数驱动程序,包括 EATA DMA 和 EATA ISA/EISA/PCI 驱动程序,都应该在最新的内核版本中可用。
编译内核后,重新启动,如果一切设置正确,您应该会看到驱动程序将 RAID 识别为单个 SCSI 磁盘。如果您使用 RAID-5,您将看到此磁盘的大小为可用实际磁盘空间的 2/3。
如果您使用 EATA DMA 驱动程序,您在启动时看到的消息应该如下所示
EATA (Extended Attachment) driver version: 2.59b
developed in co-operation with DPT
(c) 1993-96 Michael Neuffer, mike@i-Connect.Net
Registered HBAs:
HBA no. Boardtype Revis EATA Bus BaseIO IRQ DMA Ch ID Pr QS S/G IS
scsi0 : PM2144UW v07L.Y 2.0c PCI 0xef90 11 BMST 1 7 N 64 252 Y
scsi0 : EATA (Extended Attachment) HBA driver
scsi : 1 host.
Vendor: DPT Model: RAID-5 Rev: 07LY
Type: Direct-Access ANSI SCSI revision: 02
Detected scsi disk sda at scsi0, channel 0, id 8, lun 0
scsi0: queue depth for target 8 on channel 0 set to 64
scsi : detected 1 SCSI disk total.
SCSI device sda: hdwr sector= 512 bytes. Sectors= 35591040 [17378 MB] [17.4 GB]
(以上显示适用于具有单个 DPT SCSI 控制器的设置,配置为 RAID-5,每个磁盘 9 GB,共三个磁盘。)
如果您使用 EATA ISA/EISA/PCI 驱动程序,您在启动时看到的消息应该如下所示
aic7xxx: <Adaptec AHA-294X SCSI host adapter> at PCI 15
aic7xxx: BIOS enabled, IO Port 0x7000, IO Mem 0x3100000, IRQ 15, Revision B
aic7xxx: Single Channel, SCSI ID 7, 16/16 SCBs, QFull 16, QMask 0x1f
EATA0: address 0x7010 in use, skipping probe.
EATA0: 2.0C, PCI 0x7410, IRQ 11, BMST, SG 252, MB 64, tc:y, lc:y, mq:62.
EATA0: wide SCSI support enabled, max_id 16, max_lun 8.
EATA0: SCSI channel 0 enabled, host target ID 6.
EATA/DMA 2.0x: Copyright (C) 1994-1997 Dario Ballabio.
scsi0 : Adaptec AHA274x/284x/294x (EISA/VLB/PCI-Fast SCSI) 4.1.1/3.2.1
scsi1 : EATA/DMA 2.0x rev. 3.11.00
scsi : 2 hosts.
scsi0: Scanning channel A for devices.
Vendor: IBM OEM Model: DFHSS2F Rev: 1818
Type: Direct-Access ANSI SCSI revision: 02
Detected scsi disk sda at scsi0, channel 0, id 0, lun 0
Vendor: SEAGATE Model: ST41650 TX Rev: DG01
Type: Direct-Access ANSI SCSI revision: 02
Detected scsi disk sdb at scsi1, channel 0, id 0, lun 0
Vendor: TEAC Model: FC-1 GF 00 Rev: RV L
Type: Direct-Access ANSI SCSI revision: 01 CCS
Detected scsi removable disk sdc at scsi1, channel 0, id 3, lun 0
Vendor: SONY Model: CD-ROM CDU-541 Rev: 2.6a
Type: CD-ROM ANSI SCSI revision: 02
Detected scsi CD-ROM sr0 at scsi1, channel 0, id 5, lun 0
EATA0: scsi1, channel 0, id 0, lun 0, cmds/lun 21, sorted, tagged.
EATA0: scsi1, channel 0, id 3, lun 0, cmds/lun 21, sorted.
EATA0: scsi1, channel 0, id 5, lun 0, cmds/lun 21, sorted.
scsi : detected 1 SCSI cdrom 3 SCSI disks total.
SCSI device sda: hdwr sector= 512 bytes. Sectors= 4404489 [2150 MB] [2.2 GB]
SCSI device sdb: hdwr sector= 512 bytes. Sectors= 2779518 [1357 MB] [1.4 GB]
SCSI device sdc: hdwr sector= 256 bytes. Sectors= 4160 [1 MB] [0.0 GB]
(以上显示适用于具有两个 SCSI 控制器的设置,DPT PM3224W 和 Adaptec AHA2940。)
现在您可以开始将 RAID 视为普通磁盘。您需要做的第一件事是对磁盘进行分区(使用 fdisk)。然后您需要设置一个 ext2 文件系统。这可以通过运行以下命令来完成
% mkfs -t ext2 /dev/sdxN
其中 /dev/sdxN 是 SCSI 分区的名称。完成此操作后,您将能够挂载分区并像使用任何其他磁盘一样使用它们(包括在 /etc/fstab 中添加条目)。
我们首先尝试通过移除驱动器并将其放回 DPT 提供的机箱/塔式机箱(您需要额外付费购买)来测试热插拔。在我们能够完成此操作之前,其中一个磁盘发生故障(当我写这篇文章时,蜂鸣声快把我逼疯了)。即使其中一个磁盘发生故障,RAID 驱动器上的所有数据仍然可访问。
我们没有更换驱动器,而是只是进行了热插拔的动作,并将相同的驱动器放回原位。驱动器自行重建,一切都恢复正常。在磁盘发生故障期间以及重建过程中,所有数据均可访问。但应注意的是,如果另一个磁盘发生故障,我们将遇到严重麻烦。
这是 Bonnie 程序的输出,在 2144 UW 上使用 EATA DMA 驱动程序,配置为 9x3=27 GB RAID 5。RAID 位于运行 Linux 2.0.33 的双处理器 Pentium Pro 机器上。为了进行比较,还给出了该机器上 IDE 驱动器的 Bonnie 结果。
-------Sequential Output-------- ---Sequential Input-- --Random--
-Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --Seeks---
MB K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU /sec %CPU
RAID 100 9210 96.8 1613 5.9 717 5.8 3797 36.1 90931 96.8 4648.2 159.2
IDE 100 3277 32.0 6325 23.5 2627 18.3 4818 44.8 59697 88.0 575.9 16.3
有些人对上述计时提出了异议(而且理所当然---我一直无法在我们的机器上尝试,因为它们已完全加载),因为所用文件的大小可能导致其被缓存(导致异常良好的性能报告)。以下是使用 3344 UW 控制器的一些计时
-------Sequential Output-------- ---Sequential Input-- --Random--
-Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --Seeks---
MB K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU /sec %CPU
1000 1714 17.2 1689 6.0 1200 5.7 5263 40.2 7023 12.1 51.3 2.2
以下是 SCSI 到 SCSI RAID 系统上的一些计时
-------Sequential Output-------- ---Sequential Input-- --Random--
-Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --Seeks---
MB K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU /sec %CPU
64 7465 100.0 70287 98.7 37012 97.7 8074 99.2 *****100.3 ***** 196.6
128 7289 99.3 67595 98.5 35294 98.6 7792 97.6 *****100.3 ***** 195.8
256 7222 98.8 44844 69.6 16096 51.8 5787 72.7 ***** 99.8 ***** 85.2
512 7138 98.4 13871 23.2 7888 29.3 7183 89.3 16488 27.2 1585. 11.5
1024 6908 95.8 12270 21.5 7161 25.4 7373 90.4 16527 28.2 123.8 1.8
2047 6081 84.1 12664 22.6 7191 25.6 7289 89.5 16573 28.5 75.0 1.2
***** results exceed column width (> 100 MB/sec, > 10000 seeks/sec)
host: Dual PII 400 MHz, 2 x U2W, 512 MB RAM, no internal disks
RAID: IFT 3102 UA 128 MB Cache, RAID-5, 6 x 9 GB
OS: SuSE Linux 6.0 with Kernel 2.2.3
本节介绍 Linux 下可用于检查 RAID 配置的一些命令。同样,虽然提到了 eata_dma 驱动程序,但这可用于检查任何驱动程序。
要查看驱动程序的配置,请输入
% cat /proc/scsi/eata_dma/N
其中 N 是控制器的主机 ID。您应该看到类似这样的内容
EATA (Extended Attachment) driver version: 2.59b
queued commands: 353969
processed interrupts: 353969
scsi0 : HBA PM2144UW
Firmware revision: v07L.Y
Hardware Configuration:
IRQ: 11, level triggered
DMA: BUSMASTER
CPU: MC68020 20MHz
Base IO : 0xef90
Host Bus: PCI
SCSI Bus: WIDE Speed: 10MB/sec.
SCSI channel expansion Module: not present
SmartRAID hardware: present.
Type: integrated
Max array groups: 7
Max drives per RAID 0 array: 7
Max drives per RAID 3/5 array: 7
Cache Module: present.
Type: 0
Bank0: 16MB without ECC
Bank1: 0MB without ECC
Bank2: 0MB without ECC
Bank3: 0MB without ECC
Timer Mod.: present
NVRAM : present
SmartROM : enabled
Alarm : on
Host<->Disk command statistics:
Reads: Writes:
1k: 0 0
2k: 0 0
4k: 0 0
8k: 0 0
16k: 0 0
32k: 0 0
64k: 0 0
128k: 0 0
256k: 0 0
512k: 0 0
1024k: 0 0
>1024k: 0 0
Sum : 0 0
要获取高级命令统计信息,请输入
% echo "eata_dma latency" > /proc/scsi/eata_dma/N
然后您可以执行
% cat /proc/scsi/eata_dma/N
以获得更详细的统计信息。
要关闭高级命令统计信息,请输入
% echo "eata_dma nolatency" > /proc/scsi/eata_dma/N
这可能是由于多种原因造成的,但很可能是因为内核中未配置相应的驱动程序。检查并确保配置了相应的驱动程序(对于大多数 DPT 卡,为 EATA-DMA 或 EATA ISA/EISA/PCI)。
RAID 未正确配置。如果您使用的是 DPT 存储管理器,则需要将 RAID 磁盘配置为单个逻辑阵列。Michael Neuffer (neuffer@uni-mainz.de) 写道:“当您使用 SM 配置控制器时,请使用参数 /FW0 启动它和/或选择 Solaris 作为操作系统。这将导致阵列设置由控制器内部管理。”
正如 DPT 手册中所述,这显然是不可取的,并且可能需要将磁盘退回制造商,因为 DPT 存储管理器可能无法格式化它。但是,您或许可以使用 DPT 提供的程序对其执行低级格式化,该程序在其实用程序页面中称为 clfmt。解压缩 clfmt.zip 文件后,阅读有关如何使用它的说明(并明智地使用它)。完成低级格式化后,您或许可以将磁盘视为新的磁盘。请谨慎使用此程序!
当您在 SCSI 驱动器上执行 mke2fs
时,您可能会看到如下形式的错误
scsi: aborting command due to timeout : pid xxx, scsi0, channel 0, id
2, lun 0
write (10) xx xx xx xx xx xx xx xx xx
eata_abort called pid xxx target: 2 lun: 0 reason: 3
Returning: SCSI_ABORT_BUSY
这最终可能会导致机器冻结。我(和许多其他人)已经能够通过简单地使用 dd
从 RAID 阵列读取一到两百 MB 来解决此问题,如下所示
% dd if=/dev/sdX of=/dev/null bs=1024k count=128
在格式化期间,会快速涌入对可直接访问的内存块的请求,有时内存管理器无法再按时交付。dd
是一种解决方法,它将简单地按顺序创建请求,而不是像格式化那样一次创建大量请求。
再次阅读 SCSI-HOWTO。检查电缆连接和终端。如果您可以访问其他机器,请尝试使用其他机器。SCSI 设备和驱动程序问题最常见的原因是硬件故障或配置错误。最后,您可以发布到各种新闻组或给我发送电子邮件,我会尽力回复您。
以下文档在您设置 RAID 时可能会对您有所帮助
以下人员对完成本 HOWTO 提供了帮助