F.3. 使用 mdadm 来配置基于 RAID 的多路径贮存

和其他在 raidtools 程序包中的工具一样,可以使用 mdadm 命令来执行所有与管理多设备相关的功能。这一章会解释如何使用 mdadm

F.3.1. 使用 mdadm 来创建 RAID 设备

创建 RAID 设备:编辑 /etc/mdadm.conf,设置适当的 DEVICEARRAY 的值:

DEVICE /dev/sd[abcd]1
ARRAY /dev/md0 devices=/dev/sda1,/dev/sdb1,/dev/sdc1,/dev/sdd1

在这个例子中,DEVICE 行使用传统的全局文件名(详细信息参看 glob (7)文档)来定义以下的 SCSI 设备:

ARRAY 行定义了一个 RAID 设备(/dev/md0),它是由被 DEVICE 行定义的 SCSI 设备组成的。

在建立或使用任何 RAID 设备以前,/proc/mdstat 文件不包括任何激活的 RAID 设备。

Personalities :
read_ahead not set
Event: 0
unused devices: <none>

接下来,使用以上的设置和 mdadm 命令来建立一个 RAID 0 阵列。

mdadm -C /dev/md0 --level=raid0 --raid-devices=4 /dev/sda1 /dev/sdb1 /dev/sdc1 \
/dev/sdd1
Continue creating array? yes
mdadm: array /dev/md0 started.

一旦它被建立,RAID 设备的状态信息可以在任何时候被查询到。以下的例子显示了 mdadm --detail /dev/md0 命令的输出结果:

/dev/md0:
Version : 00.90.00
Creation Time : Mon Mar  1 13:49:10 2004
Raid Level : raid0
Array Size : 15621632 (14.90 GiB 15.100 GB)
Raid Devices : 4
Total Devices : 4
Preferred Minor : 0
Persistence : Superblock is persistent

Update Time : Mon Mar  1 13:49:10 2004
State : dirty, no-errors
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0

Chunk Size : 64K

      Number   Major   Minor   RaidDevice State
         0       8        1        0      active sync   /dev/sda1
         1       8       17        1      active sync   /dev/sdb1
         2       8       33        2      active sync   /dev/sdc1
         3       8       49        3      active sync   /dev/sdd1
           UUID : 25c0f2a1:e882dfc0:c0fe135e:6940d932
         Events : 0.1

F.3.2. 使用 mdadm 来创建多路径设备

除去建立 RAID 阵列,mdadm 还可以用来实现硬件支持的多 I/O 路径指向单 SCSI LUNs (磁盘驱动器) 的功能。多路径存储是为了实现当有硬件损坏或是单 SCSI LUNs (磁盘驱动器) 饱和时,仍然可以对数据进行访问。由于这个设置中包括了多路径(每个路径做为一个独立的虚拟控制器) 对一个公用的 SCSI LUN (磁盘驱动器) 的访问,Linux 内核会通过每个路径检测到每个共享的驱动器。换句话说,根据相关的配置,名为 /dev/sda 的 SCSI LUN (磁盘驱动器) 可以被做为 /dev/sdb, /dev/sdc 或其它名字来访问。

一个设备需要在一个 I/O 路径出现故障的时候仍然可以被访问到。mdadm 提供了一个––level 选项的参数来实现这个功能。如果一个 I/O 路径出现故障,这个参数— multipath —会指示 Linux 内核的 md 层去选择新的访问路径。

为建立一个多路径设备,你需要根据你的硬件配置来设置 /etc/mdadm.conf 文件中的 DEVICEARRAY 两行的设置。

注记注记
 

在以前的 RAID 例子中,在 /etc/mdadm.conf 指定的每一个设备必须代表不同的物理磁盘驱动器。和这些以前的例子不同,现在每个在这个文件中指定的设备都指向相同的公用磁盘驱动器。

用于建立多路径设备的命令和建立 RAID 设备的命令很相似。你所要做的只是用 multipath 的参数去替换 RAID 层的参数。

mdadm -C /dev/md0 --level=multipath --raid-devices=4 /dev/sda1 /dev/sdb1  
 /dev/sdc1 /dev/sdd1
Continue creating array? yes
mdadm: array /dev/md0 started.

由于 mdadm 的命令行比较长,它被分为了两行

在这个例子中,硬件中包括了一个由 SCSI LUN 来代表的 4 个独立的 SCSI 设备,每个设备都使用自己不同的路径来访问同一个存储设备。当多路径设备 /dev/md0 建立好后,所有指向 /dev/md0 的 I/O 操作都会被指向 /dev/sda1/dev/sdb1/dev/sdc1,或 /dev/sdd1 (取决于当前哪个路径是可以正常运行并且是被激活的)

你可以用 mdadm --detail /dev/md0 命令检查 /dev/md0 的配置,来验证现在是一个多路径设备。

/dev/md0:
Version : 00.90.00
Creation Time : Tue Mar  2 10:56:37 2004
Raid Level : multipath
Array Size : 3905408 (3.72 GiB 3.100 GB)
Raid Devices : 1
Total Devices : 4
Preferred Minor : 0
Persistence : Superblock is persistent

Update Time : Tue Mar  2 10:56:37 2004
State : dirty, no-errors
Active Devices : 1
Working Devices : 4
Failed Devices : 0
Spare Devices : 3

    Number   Major   Minor   RaidDevice State
       0       8       49        0      active sync   /dev/sdd1
       1       8       17        1      spare   /dev/sdb1
       2       8       33        2      spare   /dev/sdc1
       3       8        1        3      spare   /dev/sda1
           UUID : 4b564608:fa01c716:550bd8ff:735d92dc
         Events : 0.1

mdadm 的另一个功能是从操作配置中强制删除一个设备 (这个设备是 RAID 阵列中的一部分或是多路径设置中的一部分)。在下面的例子中,/dev/sda1 被标识为故障,然后被删除掉,最后又被再次添加到配置中。对于一个多路径的配置,这些行动不会影响到当前正在进行的 I/O 操作。

# mdadm /dev/md0 -f /dev/sda1
mdadm: set /dev/sda1 faulty in /dev/md0
# mdadm /dev/md0 -r /dev/sda1
mdadm: hot removed /dev/sda1
# mdadm /dev/md0 -a /dev/sda1
mdadm: hot added /dev/sda1
#