Linux DPT 硬件 RAID HOWTO

Ram Samudrala (me@ram.org)

v1.62, 2004年8月4日


如何在 Linux 下设置硬件 RAID。本 HOWTO 现在仅限于对 1.6 版本进行小的修改。

1. 简介

2. 支持的控制器

3. 应该使用什么硬件?

4. 安装

5. 用法

6. EATA DMA 驱动程序中的功能

7. 故障排除

8. 参考资料

9. 致谢


1. 简介

本文档描述了如何设置 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 机箱进行了尝试,并且我没有其他设置的经验。因此,您的设置可能会有所不同。


2. 支持的控制器

一种受良好支持的基于主机的硬件 RAID 控制器(即,Linux 下存在驱动程序的控制器)是由 DPT 制造的控制器。但是,还存在其他基于主机和 SCSI 到 SCSI 的控制器,它们可能在 Linux 下工作。这些包括由 SyredICP-VortexBusLogic 制造的控制器。有关更多信息,请参阅 Linux 的 RAID 解决方案页面

如果将来支持其他控制器,我将尽力将该信息纳入本 HOWTO。请将您认为适合本 HOWTO 的任何此类信息发送给我。

2.1 DPT 控制器

本文档目前以 DPT 为中心。基本上所有 SmartRAID IV 控制器都受支持。

2.2 ICP vortex 控制器

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。


3. 应该使用什么硬件?

3.1 控制器类型

考虑到所有这些选项,如果您正在寻找 RAID 解决方案,则需要仔细考虑您想要什么。根据您想做什么以及您希望使用的 RAID 级别,某些卡可能比其他卡更好。例如,SCSI 到 SCSI 适配器可能不如基于主机的适配器。EATA-DMA 驱动程序的作者 Michael Neuffer (neuffer@uni-mainz.de) 在他的 Linux 高性能 SCSI 和 RAID 页面上对此进行了很好的讨论。

3.2 机箱类型

机箱类型会影响驱动器的热插拔能力、警告系统(即,是否会有故障指示,以及您是否会知道哪个驱动器发生故障)以及驱动器接收的处理类型(例如,冗余冷却和电源)。我们使用了 DPT 提供的机箱,它们工作得非常好,但价格昂贵。


4. 安装

4.1 安装和配置硬件

请参阅说明手册以安装卡和驱动器。对于 DPT,由于 Linux 的存储管理器尚不存在,因此您需要创建一个 MS-DOS 格式的磁盘,并在其中包含系统(通常使用 MS-DOS 提示符下的命令“format /s”创建)。您还将使用用于 MS-DOS 的 DPT 存储管理器(可从 Adaptec 网站获得),您可能应该复制一份以确保安全。

硬件就位后,使用 DOS 系统盘启动。将 DOS 磁盘替换为存储管理器。并使用以下命令调用存储管理器

a:\ dptmgr

等待一分钟左右,您将获得一个不错的选项菜单。将磁盘集配置为硬件 RAID(单个逻辑阵列)。选择“其他”作为操作系统。

MS-DOS 存储管理器使用鼠标要容易得多,因此您可能希望在您创建的初始系统磁盘上安装鼠标驱动程序。

从技术上讲,应该可以在 Linux 下运行 SCO 存储管理器,但这可能比其价值更麻烦。在 Linux 下运行 MS-DOS 存储管理器可能更容易。

4.2 配置内核

您将需要配置内核以支持 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。

4.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。)


5. 用法

5.1 fdisk, mke2fs, mount 等

现在您可以开始将 RAID 视为普通磁盘。您需要做的第一件事是对磁盘进行分区(使用 fdisk)。然后您需要设置一个 ext2 文件系统。这可以通过运行以下命令来完成

% mkfs -t ext2 /dev/sdxN

其中 /dev/sdxN 是 SCSI 分区的名称。完成此操作后,您将能够挂载分区并像使用任何其他磁盘一样使用它们(包括在 /etc/fstab 中添加条目)。

5.2 热插拔

我们首先尝试通过移除驱动器并将其放回 DPT 提供的机箱/塔式机箱(您需要额外付费购买)来测试热插拔。在我们能够完成此操作之前,其中一个磁盘发生故障(当我写这篇文章时,蜂鸣声快把我逼疯了)。即使其中一个磁盘发生故障,RAID 驱动器上的所有数据仍然可访问。

我们没有更换驱动器,而是只是进行了热插拔的动作,并将相同的驱动器放回原位。驱动器自行重建,一切都恢复正常。在磁盘发生故障期间以及重建过程中,所有数据均可访问。但应注意的是,如果另一个磁盘发生故障,我们将遇到严重麻烦。

5.3 性能

这是 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

6. EATA DMA 驱动程序中的功能

本节介绍 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

7. 故障排除

7.1 启动时,未检测到 SCSI 主机

这可能是由于多种原因造成的,但很可能是因为内核中未配置相应的驱动程序。检查并确保配置了相应的驱动程序(对于大多数 DPT 卡,为 EATA-DMA 或 EATA ISA/EISA/PCI)。

7.2 RAID 配置显示为 N 个不同的磁盘

RAID 未正确配置。如果您使用的是 DPT 存储管理器,则需要将 RAID 磁盘配置为单个逻辑阵列。Michael Neuffer (neuffer@uni-mainz.de) 写道:“当您使用 SM 配置控制器时,请使用参数 /FW0 启动它和/或选择 Solaris 作为操作系统。这将导致阵列设置由控制器内部管理。”

7.3 机器/控制器在格式化过程中关闭

正如 DPT 手册中所述,这显然是不可取的,并且可能需要将磁盘退回制造商,因为 DPT 存储管理器可能无法格式化它。但是,您或许可以使用 DPT 提供的程序对其执行低级格式化,该程序在其实用程序页面中称为 clfmt。解压缩 clfmt.zip 文件后,阅读有关如何使用它的说明(并明智地使用它)。完成低级格式化后,您或许可以将磁盘视为新的磁盘。请谨慎使用此程序!

7.4 在初始文件系统格式化期间产生 SCSI_ABORT_BUSY 错误

当您在 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 是一种解决方法,它将简单地按顺序创建请求,而不是像格式化那样一次创建大量请求。

7.5 如果一切都失败了...

再次阅读 SCSI-HOWTO。检查电缆连接和终端。如果您可以访问其他机器,请尝试使用其他机器。SCSI 设备和驱动程序问题最常见的原因是硬件故障或配置错误。最后,您可以发布到各种新闻组或给我发送电子邮件,我会尽力回复您。


8. 参考资料

以下文档在您设置 RAID 时可能会对您有所帮助


9. 致谢

以下人员对完成本 HOWTO 提供了帮助