Red Hat Training

A Red Hat training course is available for RHEL 8

配置设备映射器多路径

Red Hat Enterprise Linux 8

使用设备映射器多路径功能

摘要

这个文档提供如何在 Red Hat Enterprise Linux 8 中配置和管理设备映射器多路径(DM-Multipath)功能的步骤。

使开源包含更多

红帽承诺替换我们的代码、文档和网页属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。详情请查看 CTO Chris Wright 的信息

对红帽文档提供反馈

我们感谢您对我们文档的反馈。让我们了解如何改进它。

根据具体内容提交评论

  1. 查看 Multi-page HTML 格式的文档,并确保在页面完全加载后可看到右上角的 Feedback 按钮。
  2. 使用光标突出显示您要评论的文本部分。
  3. 点击在高亮文本旁的 Add Feedback 按钮。
  4. 添加您的反馈并点击 Submit

通过 Bugzilla(需要帐户)提交反馈

  1. 登录到 Bugzilla 网站。
  2. Version 菜单中选择正确的版本。
  3. Summary 字段中输入描述性标题。
  4. Description 字段中输入您的改进建议。包括文档相关部分的链接。
  5. Submit Bug

第 1 章 设备映射器多路径概述

使用设备映射器多路径(DM Multipath),您可以将服务器节点和存储阵列间的多个 I/O 路径配置为单一设备。这些 I/O 路径是可包含独立电缆、交换机和控制器的物理 SAN 连接。多路径聚合了 I/O 路径并生成由聚合路径组成的新设备。

DM 多路径提供:

冗余
DM 多路径可在主动/被动(active/passive)配置中提供故障切换。在主动/被动配置中,对于 I/O,任何时候都只会使用一半的路径。如果 I/O 路径的任何元素(如电缆、交换机或控制器)出现故障,DM 多路径会切换到备用路径。
改进的性能
可将 DM 多路径配置为主动/主动模式,其中将 I/O 以轮循(round-robin)方式分布到所有路径中。在某些配置中,DM-Multipath 可以检测 I/O 路径上的加载,并动态重新平衡负载。

1.1. 带一个 RAID 设备的主动/被动多路径配置

在此配置中,服务器上有两个主机总线适配器(HBA),两个 SAN 交换机和两个 RAID 控制器。以下是在这个配置中可能出现的故障:

  • HBA 故障
  • 光纤通道电缆失败
  • SAN 交换机故障
  • 阵列控制器端口故障

配置 DM 多路径后,任何这些点会导致 DM 多路径切换到备用 I/O 路径。以下镜像描述了服务器到 RAID 设备的两个 I/O 路径的配置。在这里,有一个 I/O 路径通过 hba1SAN1cntrlr1,第二个 I/O 路径则经过 hba2SAN2cntrlr2

图 1.1. 带一个 RAID 设备的主动/被动多路径配置

带一个 RAID 设备的主动/被动多路径配置

1.2. 带两个 RAID 设备的主动/被动多路径配置

在此配置中,服务器中存在两个 HBA,两个 SAN 交换机,每个有两个 RAID 控制器。配置 DM 多路径后,在任意 RAID 设备的 I/O 路径点会导致 DM 多路径切换到该设备的备用 I/O 路径。下图展示了一个配置,每个 RAID 设备有两个 I/O 路径。在这里,每个 RAID 设备有两个 I/O 路径。

图 1.2. 带两个 RAID 设备的主动/被动多路径配置

带两个 RAID 设备的主动/被动多路径配置

1.3. 带一个 RAID 设备的主动/主动多路径配置

在此配置中,服务器中有两个 HBA、两个 SAN 交换机和两个 RAID 控制器。以下镜像描述了从服务器到存储设备的两个 I/O 路径的配置。在这里,可将 I/O 分布到这两个路径中。

图 1.3. 带一个 RAID 设备的主动/主动多路径配置

带一个 RAID 设备的主动/主动多路径配置

1.4. DM 多路径组件

下表描述了 DM 多路径组件。

表 1.1. DM 多路径的组件

组件

描述

dm_multipath 内核模块

为路径和路径组群重新路由 I/O 并支持故障切换。

mpathconf 工具

配置并启用设备映射器多路径。

multipath 命令

列出并配置多路径设备。每当添加块设备时,它也由 udev 执行,以确定该设备是否是多路径设备的一部分。

multipathd 守护进程

自动创建和删除多路径设备并监控路径;作为路径失败,可以更新多路径设备。允许对多路径设备进行交互式的修改。如果 /etc/multipath.conf 文件有任何更改,请重新加载该服务。

kpartx 命令

为设备中的分区创建设备映射器设备。当创建了多路径设备以便在其之上创建分区设备时,该命令将由 udev 自动执行。kpartx 命令在其自己的软件包中提供,但 device-mapper-multipath 软件包依赖于它。

mpathpersist

在多路径设备中设置 SCSI-3 持久预留。这个命令的工作方式与 sg_persist 对于 SCSI 设备的工作方式相似,它们不是多路径的,但它会处理在多路径设备的所有路径中设置持久性保留的方法。它与 multipathd 协调,以确保在稍后添加的路径上正确设置保留。要使用此功能,必须在 /etc/multipath.conf 文件中定义 reservation_key 属性。否则 multipathd 守护进程将不会检查新发现的路径或恢复的路径。

1.5. multipath 命令

multipath 命令用于检测和组合到设备的多个路径。它提供不同的选项来管理您的多路径设备。

下表描述了您可能会用到的 multipath 命令的一些选项。

表 1.2. 有用的 multipathd 命令选项

选项描述

-l

显示来自 sysfs 和设备映射器的当前多路径配置。

-ll

显示来自 sysfs、设备映射器以及系统中所有其他可用组件的当前多路径配置。

-f device

删除命名的多路径设备。

-F

删除所有未使用的多路径设备。

-w device

wwids 文件中删除指定设备的 wwid

-W

重置 wwids 文件,使其只包含当前的多路径设备。

1.6. multipath 命令输出

当您创建、修改或者列出多路径设备时,您会看到当前设备设置的显示。格式如下。

  • 对于每个多路径设备:
action_if_any: alias (wwid_if_different_from_alias) dm_device_name_if_known vendor,product size=size features='features' hwhandler='hardware_handler' wp=write_permission_if_known
  • 对于每个路径组:
-+- policy='scheduling_policy' prio=prio_if_known status=path_group_status_if_known
  • 对于每个路径:
 `- host:channel:id:lun devnode major:minor dm_status_if_known path_status online_status

例如: multipath 命令的输出结果可能如下:

3600d0230000000000e13955cc3757800 dm-1 WINSYS,SF2372
size=269G features='0' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=1 status=active
| `- 6:0:0:0 sdb 8:16  active ready  running
`-+- policy='round-robin 0' prio=1 status=enabled
  `- 7:0:0:0 sdf 8:80  active ready  running

如果路径已启动并准备好进行 I/O,则路径的状态为 readyghost。如果路径停机,其状态为 faultyshakymultipathd 守护进程会根据 /etc/multipath.conf 文件中定义的轮询间隔定期对路径状态进行更新。

其他可能的路径状态值如下。

  • i/o pending :检查程序正在主动检查这个路径,状态将很快更新。
  • i/o timeout :这与 faulty 相同。它让用户知道检查程序在超时时间前没有返回成功或失败。
  • removed :路径已经从系统中删除,并将很快从多路径设备中删除。它被认为与 faulty 相同。
  • wild :因为内部错误或配置问题,multipathd 无法运行路径检查程序。这与 faulty 大致相同,但多路径会跳过路径上的多个操作。
  • unchecked :路径检查程序没有在此路径上运行,因为它才被发现,还没有分配路径检查器,或者路径检查程序遇到了错误。这与 wild 相同。
  • delayed :路径检查程序返回路径的启动,但多路径会延迟路径的重新状态,因为路径最近多次失败,多路径已被配置为延迟路径。

对于内核而言,dm 状态与路径状态类似。active dm 状态涵盖了 readyghost 路径状态。pending 路径状态没有对等的 dm 状态。所有其他路径状态都会映射到 failed dm 状态。dm 状态将保持其当前状态,直到路径检查程序完成为止。

online_status 的可能值为 runningofflineoffline 状态表示这个 SCSI 设备已被禁用。

注意

当您创建或修改多路径设备时,多路径会输出该设备配置。但是,某些功能(例如,写入权限和其他功能信息)可能未知。输出和您在创建或修改过程中选择的功能之间可能会有区别。这是正常的行为。创建后列出设备以查看正确的状态。

1.7. 显示多路径配置

您可以使用 -lmultipath 命令来显示当前的多路径配置。-l 选项显示从 sysfs 和设备映射器中的信息收集的多路径拓扑。-ll 选项会显示 -l 选项显示的信息,以及系统所有其他可用组件。

在显示多路径配置时,您可以使用 multipath 命令的 -v 选项指定详细程度。指定 -v0 时不产生任何输出。指定 -v1 仅输出创建或更新的多路径名称,然后您可以将这些信息传递给其他工具,如 kpartx。指定 -v2 会输出所有检测到的路径、多路径和设备映射。如需更多详细的信息,还可以指定 -v3, -v4, 或 -v5

以下示例显示了 multipath -l 命令的输出。

# multipath -l
3600d0230000000000e13955cc3757800 dm-1 WINSYS,SF2372
size=269G features='0' hwhandler='0' wp=rw
|-- policy='round-robin 0' prio=1 status=active
| `- 6:0:0:0 sdb 8:16  active ready  running
`-- policy='round-robin 0' prio=1 status=enabled
  `- 7:0:0:0 sdf 8:80  active ready  running

以下示例显示了 multipath -ll 命令的输出。

# multipath -ll
3600d0230000000000e13955cc3757801 dm-10 WINSYS,SF2372
size=269G features='0' hwhandler='0' wp=rw
|-- policy='round-robin 0' prio=1 status=enabled
| `- 19:0:0:1 sdc 8:32  active ready  running
`-- policy='round-robin 0' prio=1 status=enabled
  `- 18:0:0:1 sdh 8:112 active ready  running
3600d0230000000000e13955cc3757803 dm-2 WINSYS,SF2372
size=125G features='0' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=1 status=active
  |- 19:0:0:3 sde 8:64  active ready  running
  `- 18:0:0:3 sdj 8:144 active ready  running

1.8. 其他资源

  • multipath(8)multipathd(8) man page
  • /etc/multipath.conf 文件

第 2 章 多路径设备

DM 多路径提供了一种逻辑地整理 I/O 路径的方法,方法是在基础设备上创建单一多路径设备。如果没有 DM 多路径,系统会将服务器节点中的每个路径都把一个存储控制器视为单独的设备,即使 I/O 路径将相同的服务器节点连接到同一存储控制器。

2.1. 多路径设备识别符

当新设备受 DM 多路径控制时,这些设备会在 /dev/mapper//dev/ 目录中创建。

注意

任何格式为 /dev/dm-X 的设备都仅供内部使用,且不应该被管理员直接使用。

下面描述了多路径设备名称:

  • user_friendly_names 配置选项设置为 no 时,多路径设备的名称被设置为 World Wide Identifier(WWID)。默认情况下,多路径设备的名称被设置为它的 WWID。设备名称应为 /dev/mapper/WWID。它还在 /dev/ 目录中创建,名为 /dev/dm-X
  • 另外,您可以在 /etc/multipath.conf 文件中将 user_friendly_names 选项设置为 yes。这会将 multipath 部分中的 alias 设置为 mpathN 格式的节点唯一名称。该设备名称应该是 /dev/mapper/mpathN/dev/dm-X。但不能保证,在所有使用多路径设备的节点中的设备名称都是一致的。同样,如果您在 /etc/multipath.conf 文件中设置了 alias 选项,该名称不会自动在集群中的所有节点中保持一致。
注意

如果您使用 LVM 在多路径设备中创建逻辑设备,这不应造成问题。为了使您的多路径设备名称在每个节点上一致,红帽建议禁用 user_friendly_names 选项。

例如:一个带有两个 HBA 的节点,通过一个没有区的 FC 交换机就可以看到四个设备: /dev/sda, /dev/sdb, /dev/sdc, 和 /dev/sdd。DM 多路径会创建一个唯一 WWID 设备,它根据多路径配置将 I/O 重新路由到这四个底层设备。

除了 user_friendly_namesalias 选项外,多路径设备还具有其他属性。您可以通过在 /etc/multipath.conf 文件的 multipaths 部分中为该设备创建条目来修改特定多路径设备的这些属性。

其他资源

  • multipath(8)multipath.conf(8) man page
  • /etc/multipath.conf 文件
  • DM 多路径组件

2.2. 逻辑卷中的多路径设备

创建多路径设备后,您可以使用多路径设备名称,因为在创建逻辑卷管理器(LVM)物理卷时使用物理设备名称。例如,如果 /dev/mapper/mpatha 是多路径设备的名称,则 pvcreate /dev/mapper/mpatha 命令将 /dev/mapper/mpatha 标记为物理卷。

在创建 LVM 卷组时,您可以使用生成的 LVM 物理设备,就像使用其它 LVM 物理设备一样。

要过滤 /etc/lvm/lvm.conf 文件中的所有 sd 设备,在文件的 devices 部分添加 filter = [ "r/block/", "r/disk/", "r/sd./", "a/./" ] 过滤。

注意

如果您试图在配置的分区的整个设备中创建 LVM 物理卷,则 pvcreate 命令会失败。如果您不具体指定每个块设备,Anaconda 和 Kickstart 安装程序会创建空分区表。如果您要使用整个设备而不是创建分区,请从该设备中删除现有分区。您可以使用 kpartx -d device 命令和 fdisk 实用程序删除现有分区。如果您的系统有大于 2Tb 的块设备,使用 parted 工具删除分区。

当您创建使用 active/passive 多路径设备作为基础物理设备的 LVM 逻辑卷时,您可以选择在 /etc/lvm/lvm.conf 文件中包含过滤器,以排除多路径设备下的磁盘。这是因为如果阵列在收到 I/O 时自动更改被动路径,则当没有过滤这些设备时,多路径都会在 LVM 扫描被动路径时进行故障转移。

内核通过自动检测要使用的正确硬件处理程序来更改主动/被动状态。对于需要干预以改变其状态的主动/被动路径,多路径会自动使用这个硬件处理器根据需要进行操作。如果内核没有自动检测要使用的正确硬件处理程序,您可以使用"hardware_handler"选项配置 multipath.conf 文件中要使用的硬件处理程序。对于需要命令使被动路径被为主动的 active/passive 阵列,LVM 会在发生这种情况时输出警告信息。

根据您的配置,LVM 可能会输出以下任何信息:

  • LUN 未就绪:

    end_request: I/O error, dev sdc, sector 0
    sd 0:0:0:3: Device not ready: <6>: Current: sense key: Not Ready
        Add. Sense: Logical unit not ready, manual intervention required
  • 读失败:

    /dev/sde: read failed after 0 of 4096 at 0: Input/output error

以下是上述错误的原因:

  • 在为机器提供主动/被动路径的存储设备中设置多路径。
  • 路径是直接访问的,而不是通过多路径设备访问。

其他资源

第 3 章 配置 DM 多路径

您可以使用 mpathconf 工具设置 DM 多路径。这个工具会根据以下情况创建或编辑 /etc/multipath.conf 多路径配置文件:

  • 如果 /etc/multipath.conf 文件已存在,则 mpathconf 实用程序将编辑该文件。
  • 如果 /etc/multipath.conf 文件不存在,则 mpathconf 实用程序将从头开始创建 /etc/multipath.conf 文件。

3.1. 检查 device-mapper-multipath 软件包

在您的系统中设置 DM 多路径前,请确定您的系统是最新的,并包含 device-mapper-multipath 软件包。

流程

  1. 检查您的系统是否包含 device-mapper-multipath 软件包:

    # rpm -q device-mapper-multipath
    device-mapper-multipath-current-package-version

    如果您的系统没有包括这个软件包,它会输出以下内容:

    package device-mapper-multipath is not installed
  2. 如果您的系统没有包括这个软件包,请运行以下命令安装它:

    # {PackageManager} install device-mapper-multipath

3.2. 为基本故障切换配置设置 DM 多路径

如果您需要在启动 multipathd 守护进程前编辑 /etc/multipath.conf 文件,请使用以下步骤为基本故障切换配置设置 DM 多路径。

流程

  1. 启用多路径配置文件:

    # mpathconf --enable
  2. 如果需要,请编辑 /etc/multipath.conf 文件。DM 多路径的默认设置被编译到系统中,不需要在 /etc/multipath.conf 文件中明确设置。

    path_grouping_policy 的默认值被设置为 failover,因此,您不需要编辑 /etc/multipath.conf 文件。

    配置文件的初始默认部分配置您的系统,以便多路径设备的名称格式为 /dev/mapper/mpathn;。如果没有此设置,则多路径设备的名称将别名化为该设备的 WWID。如果您不想使用用户友好的名称,您可以输入以下命令:

    # mpathconf --enable --user_friendly_names n

    如果您需要在启动 multipath 守护进程后编辑多路径配置文件,则需要执行 systemctl reload multipathd.service 命令以使更改生效。

  3. 保存配置文件并退出编辑器。
  4. 启动 multipath 守护进程并创建多路径设备:

    # systemctl start multipathd.service
注意

如果您删除了 device-mapper-multipath 软件包,则不会删除 /etc/multipath.conf 文件,或者 /etc/multipath 目录中的任何文件,因为该目录可以包含仅限于当前列出的文件。您可能需要在以后的 device-mapper-multipath 软件包安装中手动删除这些文件。

3.3. 在生成多路径设备时忽略本地磁盘

有些机器在其内部磁盘中使用本地 SCSI 卡,我们不建议在这些设备中使用 DM 多路径。如果将 find_multipaths 配置参数设置为 on,则不必在这些设备上禁用多路径。

如果您没有将 find_multipaths 配置参数设置为 on,您可以使用以下步骤修改 DM 多路径配置文件,以便在配置多路径时忽略本地磁盘。

流程

  1. 确定哪些磁盘是内部磁盘。在这些示例中,/dev/sda 是内部磁盘:

    • 显示现有的多路径设备:

      # multipath -v2 -l
      
      SIBM-ESXSST336732LC____F3ET0EP0Q000072428BX1 dm-2 WINSYS,SF2372
      size=33 GB features="0" hwhandler="0" wp=rw
      `-+- policy='round-robin 0' prio=0 status=active
        |- 0:0:0:0 sda 8:0 active undef running
    • 显示 DM 多路径可能创建的附加多路径设备:

      # multipath -v2 -d
      
      : SIBM-ESXSST336732LC____F3ET0EP0Q000072428BX1 undef WINSYS,SF2372
      size=33 GB features="0" hwhandler="0" wp=undef
      `-+- policy='round-robin 0' prio=1 status=undef
        |- 0:0:0:0 sda 8:0  undef ready running
  2. 编辑 /etc/multipath.conf 文件的 blacklist 部分,使其包含此设备。

    使用它的 WWID 属性识别该设备。虽然您可以使用 devnode 类型识别 sda 设备,但这不是一个安全的步骤,因为重新引导时 /dev/sda 无法保证相同。

    在上例中,/dev/sda 设备的 WWID 是 SIBM-ESXSST336732LC____F3ET0EP0Q000072428BX1。要忽略这个设备,请在 /etc/multipath.conf 文件中包含以下内容:

    blacklist {
          wwid SIBM-ESXSST336732LC____F3ET0EP0Q000072428BX1
    }
  3. 通过运行以下命令之一修改多路径配置文件后,验证 /etc/multipath.conf 文件:

    • 要显示任何配置错误,请运行:

      # multipath -t > /dev/null
    • 要显示使用添加的更改显示新配置,请运行:

      # multipath -t
  4. 重新载入 /etc/multipath.conf 文件并重新配置 multipathd 守护进程以使更改生效:

    # service multipathd reload

其他资源

  • multipath.conf(5) 手册页

3.4. 配置附加存储设备

默认情况下,DM 多路径包括对支持最常见存储阵列的支持,该存储阵列支持 DM 多路径。

流程

  • 查看默认配置值,包括支持的设备:

    # multipathd show config
    # multipath -t
  • 可选: 要添加默认不支持的附加存储设备,请编辑 /etc/multipath.conf 文件并插入适当的设备信息。

    以下示例展示了如何添加 HP Open-V 系列的信息。这会在所有路径失败后将设备设为队列(或者重试 12 次,每个重试 5 秒)。

    devices {
            device {
                    vendor "HP"
                    product "OPEN-V"
                    no_path_retry 12
            }
    }

3.5. 在 initramfs 文件系统中设置多路径

您可以在 initramfs 文件系统中设置多路径。如果您不使用需要多路径的设备,则不需要设置它,直到引导离开 initramfs 文件系统为止。

先决条件

  • 您已在系统中配置了 DM 多路径。

流程

  • 运行以下命令,使用多路径配置文件重建 initramfs 文件系统:

    # dracut --force --add multipath

    如果您从 initramfs 文件系统运行多路径并对多路径配置文件进行任何更改,则必须重建 initramfs 文件系统以使更改生效。当根设备使用多路径时,运行 dracut 命令会自动将多路径模块添加到 initramfs 中。

  • 可选:如果您需要在 initramfs 中运行多路径,但没有设置多路径的 root 设备,请运行:

    # echo add_dracutmodules+=\"multipath\" > /etc/dracut.conf.d/multipath.conf
    # dracut --force
注意

dracut 命令在 initramfs 中包含多路径,即使不再需要多路径。要停止包括多路径,请运行:

# rm /etc/dracut.conf.d/multipath.conf
# dracut --force

第 4 章 在 NVMe 设备中启用多路径

您可以通过光纤传输(如光纤通道(FC))连接到您的系统的多路径 NVMe 设备。您可以在多个多路径解决方案之间进行选择。

4.1. 本地 NVMe 多路径和 DM 多路径

NVMe 设备支持原生多路径功能。当在 NVMe 中配置多路径时,您可以在标准 DM 多路径和原生 NVMe 多路径之间进行选择。

DM 多路径和原生 NVMe 多路径都支持 NVMe 设备的 Asymmetric Namespace Access(ANA)多路径方案。ANA 识别控制器和主机之间的优化路径,并提高性能。

当启用原生 NVMe 多路径时,它会全局地应用于所有 NVMe 设备。它可以提供更高的性能,但不包含 DM 多路径提供的所有功能。例如,原生 NVMe 多路径只支持 numaround-robin 路径选择方法。

红帽建议您在 Red Hat Enterprise Linux 8 中使用 DM 多路径作为默认多路径解决方案。

4.2. 启用原生 NVMe 多路径

此流程使用原生 NVMe 多路径解决方案在连接的 NVMe 设备中启用多路径。

先决条件

步骤

  1. 检查内核中是否启用了原生 NVMe 多路径:

    # cat /sys/module/nvme_core/parameters/multipath

    这个命令显示以下之一:

    N
    禁用原生 NVMe 多路径。
    Y
    启用原生 NVMe 多路径。
  2. 如果禁用原生 NVMe 多路径,使用以下方法之一启用它:

    • 使用内核选项:

      1. 在内核命令行中添加 nvme_core.multipath=Y 选项:

        # grubby --update-kernel=ALL --args="nvme_core.multipath=Y"
      2. 在 64 位 IBM Z 构架中更新引导菜单:

        # zipl
      3. 重启系统。
    • 使用内核模块配置文件:

      1. 使用以下内容创建 /etc/modprobe.d/nvme_core.conf 配置文件:

        options nvme_core multipath=Y
      2. 备份 initramfs 文件系统:

        # cp /boot/initramfs-$(uname -r).img \
             /boot/initramfs-$(uname -r).bak.$(date +%m-%d-%H%M%S).img
      3. 重建 initramfs 文件系统:

        # dracut --force --verbose
      4. 重启系统:
  3. 可选: 在运行的系统中,更改 NVMe 设备中的 I/O 策略,以便在所有可用路径中分发 I/O:

    # echo "round-robin" > /sys/class/nvme-subsystem/nvme-subsys0/iopolicy
  4. 可选:使用 udev 规则永久设置 I/O 策略。使用以下内容创建 /etc/udev/rules.d/71-nvme-io-policy.rules 文件:

    ACTION=="add|change", SUBSYSTEM=="nvme-subsystem", ATTR{iopolicy}="round-robin"

验证

  1. 检查您的系统是否识别 NVMe 设备:

    # nvme list
    
    Node             SN                   Model                                    Namespace Usage                      Format           FW Rev
    ---------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------
    /dev/nvme0n1     a34c4f3a0d6f5cec     Linux                                    1         250.06  GB / 250.06  GB    512   B +  0 B   4.18.0-2
    /dev/nvme0n2     a34c4f3a0d6f5cec     Linux                                    2         250.06  GB / 250.06  GB    512   B +  0 B   4.18.0-2
  2. 列出所有连接的 NVMe 子系统:

    # nvme list-subsys
    
    nvme-subsys0 - NQN=testnqn
    \
     +- nvme0 fc traddr=nn-0x20000090fadd597a:pn-0x10000090fadd597a host_traddr=nn-0x20000090fac7e1dd:pn-0x10000090fac7e1dd live
     +- nvme1 fc traddr=nn-0x20000090fadd5979:pn-0x10000090fadd5979 host_traddr=nn-0x20000090fac7e1dd:pn-0x10000090fac7e1dd live
     +- nvme2 fc traddr=nn-0x20000090fadd5979:pn-0x10000090fadd5979 host_traddr=nn-0x20000090fac7e1de:pn-0x10000090fac7e1de live
     +- nvme3 fc traddr=nn-0x20000090fadd597a:pn-0x10000090fadd597a host_traddr=nn-0x20000090fac7e1de:pn-0x10000090fac7e1de live

    检查活动传输类型。例如,nvme0 fc 表示设备通过光纤通道传输连接,nvme tcp 则表示设备通过 TCP 连接。

  3. 如果您编辑了内核选项,请检查内核命令行中是否启用了原生 NVMe 多路径:

    # cat /proc/cmdline
    
    BOOT_IMAGE=[...] nvme_core.multipath=Y
  4. 检查 DM 多路径报告了 NVMe 命名空间为,例如:nvme0c0c0n1nvme0c3n1,而不是,例如: nvme0n1nvme3n1

    # multipath -e -ll | grep -i nvme
    
    uuid.8ef20f70-f7d3-4f67-8d84-1bb16b2bfe03 [nvme]:nvme0n1 NVMe,Linux,4.18.0-2
    | `- 0:0:1    nvme0c0n1 0:0     n/a   optimized live
    | `- 0:1:1    nvme0c1n1 0:0     n/a   optimized live
    | `- 0:2:1    nvme0c2n1 0:0     n/a   optimized live
      `- 0:3:1    nvme0c3n1 0:0     n/a   optimized live
    
    uuid.44c782b4-4e72-4d9e-bc39-c7be0a409f22 [nvme]:nvme0n2 NVMe,Linux,4.18.0-2
    | `- 0:0:1    nvme0c0n1 0:0     n/a   optimized live
    | `- 0:1:1    nvme0c1n1 0:0     n/a   optimized live
    | `- 0:2:1    nvme0c2n1 0:0     n/a   optimized live
      `- 0:3:1    nvme0c3n1 0:0     n/a   optimized live
  5. 如果您更改了 I/O 策略,请检查 round-robin 是 NVMe 设备中的活跃 I/O 策略:

    # cat /sys/class/nvme-subsystem/nvme-subsys0/iopolicy
    
    round-robin

4.3. 在 NVMe 设备中启用 DM 多路径

这个过程使用 DM 多路径解决方案在连接的 NVMe 设备中启用多路径。

先决条件

步骤

  1. 检查是否禁用了原生 NVMe 多路径:

    # cat /sys/module/nvme_core/parameters/multipath

    这个命令显示以下之一:

    N
    禁用原生 NVMe 多路径。
    Y
    启用原生 NVMe 多路径。
  2. 如果启用了原生 NVMe 多路径,请禁用它:

    1. 在内核命令行中删除 nvme_core.multipath=Y 选项:

      # grubby --update-kernel=ALL --remove-args="nvme_core.multipath=Y"
    2. 在 64 位 IBM Z 构架中更新引导菜单:

      # zipl
    3. 如果存在,从 /etc/modprobe.d/nvme_core.conf 文件中删除 options nvme_core multipath=Y 行。
    4. 重启系统。
  3. 确保启用了 DM 多路径:

    # systemctl enable --now multipathd.service
  4. 在所有可用路径中分发 I/O。在 /etc/multipath.conf 文件中添加以下内容:

    device {
      vendor "NVME"
      product ".*"
      path_grouping_policy    group_by_prio
    }
    注意

    当 DM 多路径管理 NVMe 设备时,/sys/class/nvme-subsys0/iopolicy 配置文件不会影响 I/O 分发。

  5. 重新载入 multipathd 服务以应用配置更改:

    # multipath -r
  6. 备份 initramfs 文件系统:

    # cp /boot/initramfs-$(uname -r).img \
         /boot/initramfs-$(uname -r).bak.$(date +%m-%d-%H%M%S).img
  7. 重建 initramfs 文件系统:

    # dracut --force --verbose

验证

  1. 检查您的系统是否识别 NVMe 设备:

    # nvme list
    
    Node             SN                   Model                                    Namespace Usage                      Format           FW Rev
    ---------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------
    /dev/nvme0n1     a34c4f3a0d6f5cec     Linux                                    1         250.06  GB / 250.06  GB    512   B +  0 B   4.18.0-2
    /dev/nvme0n2     a34c4f3a0d6f5cec     Linux                                    2         250.06  GB / 250.06  GB    512   B +  0 B   4.18.0-2
    /dev/nvme1n1     a34c4f3a0d6f5cec     Linux                                    1         250.06  GB / 250.06  GB    512   B +  0 B   4.18.0-2
    /dev/nvme1n2     a34c4f3a0d6f5cec     Linux                                    2         250.06  GB / 250.06  GB    512   B +  0 B   4.18.0-2
    /dev/nvme2n1     a34c4f3a0d6f5cec     Linux                                    1         250.06  GB / 250.06  GB    512   B +  0 B   4.18.0-2
    /dev/nvme2n2     a34c4f3a0d6f5cec     Linux                                    2         250.06  GB / 250.06  GB    512   B +  0 B   4.18.0-2
    /dev/nvme3n1     a34c4f3a0d6f5cec     Linux                                    1         250.06  GB / 250.06  GB    512   B +  0 B   4.18.0-2
    /dev/nvme3n2     a34c4f3a0d6f5cec     Linux                                    2         250.06  GB / 250.06  GB    512   B +  0 B   4.18.0-2
  2. 列出所有连接的 NVMe 子系统。检查命令报告为 nvme0n1nvme3n2,而不是,例如: nvme0c0c0n1nvme0c3n1

    # nvme list-subsys
    
    nvme-subsys0 - NQN=testnqn
    \
     +- nvme0 fc traddr=nn-0x20000090fadd5979:pn-0x10000090fadd5979 host_traddr=nn-0x20000090fac7e1dd:pn-0x10000090fac7e1dd live
     +- nvme1 fc traddr=nn-0x20000090fadd597a:pn-0x10000090fadd597a host_traddr=nn-0x20000090fac7e1dd:pn-0x10000090fac7e1dd live
     +- nvme2 fc traddr=nn-0x20000090fadd5979:pn-0x10000090fadd5979 host_traddr=nn-0x20000090fac7e1de:pn-0x10000090fac7e1de live
     +- nvme3 fc traddr=nn-0x20000090fadd597a:pn-0x10000090fadd597a host_traddr=nn-0x20000090fac7e1de:pn-0x10000090fac7e1de live
    # multipath -ll
    
    mpathae (uuid.8ef20f70-f7d3-4f67-8d84-1bb16b2bfe03) dm-36 NVME,Linux
    size=233G features='1 queue_if_no_path' hwhandler='0' wp=rw
    `-+- policy='service-time 0' prio=50 status=active
      |- 0:1:1:1  nvme0n1 259:0   active ready running
      |- 1:2:1:1  nvme1n1 259:2   active ready running
      |- 2:3:1:1  nvme2n1 259:4   active ready running
      `- 3:4:1:1  nvme3n1 259:6   active ready running
    
    mpathaf (uuid.44c782b4-4e72-4d9e-bc39-c7be0a409f22) dm-39 NVME,Linux
    size=233G features='1 queue_if_no_path' hwhandler='0' wp=rw
    `-+- policy='service-time 0' prio=50 status=active
      |- 0:1:2:2  nvme0n2 259:1   active ready running
      |- 1:2:2:2  nvme1n2 259:3   active ready running
      |- 2:3:2:2  nvme2n2 259:5   active ready running
      `- 3:4:2:2  nvme3n2 259:7   active ready running

第 5 章 修改 DM-Multipath 配置文件

默认情况下,DM 多路径会为多数常见的多路径用例提供配置值。另外,DM 多路径包括对自己支持 DM 多路径的最常见存储阵列的支持。您可以通过编辑 /etc/multipath.conf 配置文件来覆盖 DM 多路径的默认配置值。如果需要,您还可以在配置文件中添加不支持的默认存储阵列。

有关默认配置值(包括支持的设备)的详情,请运行以下命令:

# multipathd show config
# multipath -t
注意

如果您从 initramfs 文件系统运行多路径并对多路径配置文件进行任何更改,则必须重建 initramfs 文件系统以使更改生效

在多路径配置文件中,您只需要指定配置所需的部分,或者从默认值中更改的小节。如果文件中没有与您的环境相关的部分,或者不需要覆盖默认值,您可以将其注释掉,因为它们位于初始文件中。

配置文件允许正则表达式描述语法。

5.1. 配置文件概述

多路径配置文件可分为以下几个部分:

黑名单
不视为多路径的特定设备列表。
blacklist_exceptions
根据 blacklist 部分的参数,列出其他将被忽略的多路径设备。
defaults
DM 多路径的常规默认设置。
multipaths
各个多路径设备特性的设置。这些值会覆盖在配置文件中的 overrides, devices, 和 defaults 部分指定的值。
devices
各个存储控制器的设置。这些值覆盖了在 配置文件的 defaults 部分中指定的内容。如果您使用默认不支持的存储阵列,您可能需要为阵列创建 devices 子部分。
overrides
适用于所有设备的设置。这些值覆盖了在配置文件的 devicesdefaults 部分中指定的值。

当系统决定多路径设备的属性时,它会按照以下顺序检查 multipath.conf 文件中的单独部分的设置:

  1. multipaths 部分
  2. overrides 部分
  3. devices 部分
  4. defaults 部分

5.2. 配置文件默认设置

/etc/multipath.conf 配置文件包含一个 defaults 部分。本节包含设备映射器(DM)多路径的默认配置。默认值根据您的初始设备设置可能会有所不同。

如果在多路径设备上安装机器,则默认多路径配置会自动应用。如果您没有在安装过程中设置多路径,请运行以下命令获取默认配置:

# mpathconf --enable

默认配置包括以下内容:

# For a complete list of the default configuration values, run either
# multipath -t
# or
# multipathd show config
#
# For a list of configuration options with descriptions, see the multipath.conf
# man page
defaults
{         user_friendly_names yes         find_multipaths yes         enable_foreign \"^$\" }
blacklist_exceptions
{         property \"(SCSI_IDENT_|ID_WWN)\" }

下表描述了 multipath.conf 配置文件的 defaults 部分中设置的属性。multipaths 部分中指定的属性的优先级高于 devices 部分的值。devices 部分中指定的属性的优先级高于默认值。使用 overrides 部分为所有设备类型设置属性值,即使这些设备类型在 devices 部分中有一个内置配置条目。overrides 部分没有强制的属性。但是,本节中设置的任何属性优先于 devicesdefaults 部分中的值。

表 5.1. 多路径配置默认设置

属性描述

polling_interval

指定两个路径检查间隔(以秒为单位)。对于可正常工作的路径,检查间的间隔会逐渐增加到 max_polling_interval。默认值为 5

max_polling_interval

指定两个路径检查间隔的最大长度(以秒为单位)。

默认值为 4 * polling_interval

find_multipaths

定义设置多路径设备的模式。可用值包括:

:如果将 find_multipaths 设置为 no,则多路径 将规则应用为 严格 值,而 multipathd 守护进程将规则应用为 greedy 值。

是 :如果至少有一个设备不在具有相同 World Wide Identifier (WWID)的 黑名单 中,或者多路径创建了设备 WWID 的多路径设备(即使该多路径设备不再存在),那么该设备将被视为多路径设备的路径。

greedy多路径和多路径 将每个非黑名单的设备视为多路径设备路径。

智能 :多路径都会自动认为每个非黑名单设备都是多路径设备路径。如果第二个路径,在 find_multipaths_timeout 的时间集中不会出现相同的 WWID,多路径会发布该设备并使其可以被系统其余使用。multipathd 守护进程会像使用 yes 值一样应用规则。

strict :如果创建使用设备 WWID 的多路径设备,这个值只会将设备视为多路径路径。

默认值为 off。默认 multipath.conf 文件将 find_multipaths 设置为 yes

find_multipaths_timeout

这代表超时(以秒为单位),在检测到第一个路径后等待附加路径(如果设置了 find_multipaths smart )。可能的值包括:

正值 :如果使用正值设置,则超时适用于所有非黑名单设备。

负值: 如果设置了负值,则超时时间只适用于在多路径硬件表中有一个条目的已知设备,这些设备位于内置表中,或者在 设备 部分中。其他未知设备使用 1 秒的超时以避免引导延迟。

0 :系统应用此属性的内置默认值。

已知硬件的默认值为 -10。这意味着已知设备有 10 秒超时。未知设备有一个 1 秒超时。如果 find_multipaths 属性具有 Smart 之外的值,则此属性没有影响。

uxsock_timeout

以毫秒为单位设置 multipathd 互动命令的超时。

对于有大量设备的系统,多路径互动命令可能会超时并失败。如果发生这种情况,请增加这个超时时间来解决这个问题。

默认值为 4000

reassign_maps

启用重新分配设备映射器映射。使用这个选项时,multipathd 守护进程会重新映射现有的设备映射器映射,以便始终指向多路径设备,而不是底层块设备。可能的值有 yes没有。默认值为 no

详细程度

默认详细程度值为 2。数值越大可提高详细程度。有效级别介于 04 之间。

path_selector

指定用于确定用于下一个 I/O 操作的路径的默认算法。可能的值包括:

循环 0 :通过路径组中的每个路径进行循环,将相同数量的 I/O 请求发送由 rr_min_iorr_min_io_rq 确定的。

queue-length 0 :发送下一个 I/O 请求组,将路径缩减为预期最少的 I/O 请求数。

Service-time 0 :发送下一组 I/O 请求,并在预计服务时间最短的情况下降低路径。这通过将未完成的 I/O 的总大小除除以相对吞吐量的每个路径来决定。

默认值为 service-time 0。

path_grouping_policy

指定要应用到未指定多路径的默认路径分组策略。可能的值包括:

故障转移 :每个优先级组 1 路径。

multibus :1 优先级组中的所有有效路径.

group_by_serial :每个检测到的序列号为 1 优先级组。

group_by_prio :每个路径优先级值 1 优先级组。优先级由 prio 属性决定。

group_by_node_name :每个目标节点名称 1 个优先级组。/sys/class/fc_transport/target*/node_name 目录包含目标节点名称。

默认值为 failover

uid_attrs

将这个选项设置为按 WWID 激活合并 uevents。此操作可能提高了 uevent 处理效率。也是配置 udev 属性用来确定唯一路径标识符(WWID)的替代方法。

这个选项的值是以空格分开的记录列表,如 type:ATTR,其中 type 与设备节点名称匹配,ATTR 是匹配的 udev 属性的名称。

如果您配置这个选项,且与设备的设备名称匹配,它会覆盖其他配置的方法以确定这个设备的 WWID。

您可以通过将该值设置为 sd:ID_SERIAL dasd:ID_UID nvme:ID_WWN 来启用 uevent 合并。

默认为 未设置

prio

指定调用以获取路径优先级值的默认功能。例如,SPC-3 中的 ALUA 位提供了可被利用的 prio 值。可能的值包括:

const :将优先级 1 设置为所有路径。

EMC :为 EMC 阵列生成路径优先级。

sysfs :从 sysfs 生成路径优先级。这个优先级程序接受可选的 prio_argexclusive_pref_bitsysfs 值使用 sysfs 属性 access_statepreferred_path

alua :根据 SCSI-3 ALUA 设置生成路径优先级。如果您在设备配置中指定 prio aluaprio_args exclusive_pref_bit,多路径会创建一个路径,该路径只包含 exclusive_pref_bit 设置的路径,并为该路径分配最高优先级最高的路径。有关此情况的更多信息,请参阅 multipath.conf (5) 手册页。

ONTAP :为 NetApp 阵列生成路径优先级。

rdac :为 LSI/Engenio RDAC 控制器生成路径优先级。

hp_sw :在 active/standby 模式中生成 Compaq/HP 控制器的路径优先级。

hds :为 Hitachi HDS Modular 存储阵列生成路径优先级。

随机 :在 1 到 10 之间生成随机优先级。

weightedpath :根据正则表达式和所提供的优先级作为参数生成路径优先级。需要一个 prio_args 关键字。

path_latency :根据延迟算法生成路径优先级。需要一个 prio_args 关键字。

A a :根据 NVMe ANA 设置生成路径优先级。这个优先级例程是硬件依赖的。

datacore :为某些 DataCore 存储阵列生成路径优先级。需要一个 prio_args 关键字。这个优先级例程是硬件依赖的。

iet :根据其 IP 地址为 iSCSI 目标生成路径优先级。需要一个 prio_args 关键字。此优先级例程仅通过 iSCSI 提供。

默认值取决于 detect_prio 设置。如果将 detect_prio 设置为 yes,则默认优先级算法为 sysfs。唯一的例外适用于 NetAPP E-Series,其中 默认为 alua。如果 detect_prio 设为 no,则默认优先级算法为。

prio_args

传递给 prio 功能的参数。这只适用于以下优先级:

weighted: 格式需要是 <hbtl,devname,serial,wwn> <regex1> <prio1> <regex2> <prio2>

HBTL :Regex 值可以是 SCSI H:B:T:L 格式。例如:1:0:.:. , *:0:0:

devname :Regex 值可以是设备名称格式。例如:sda, sd.e

serial :Regex 值可以是序列号格式。通过 sysfs 查找 串行 设备,或者运行命令 multipathd show paths format "%z"

wwn: Regex 值可采用 host_wwnn:host_wwpn:target_wwn:target_wwpn 形式。这些值可以通过 sysfs 或命令 multipathd show paths format %N:%R:%n:%r" 查找。

path_latency: 需要的值,格式为 io_num= <integer> base_num=<integer>

io_num :读取 IO 的数量,持续发送到当前路径。这个值有助于计算平均路径延迟。有效值包括 Integer, [2, 200]

base_num: logarithmic scale 的基本数字值。这个值有助于对不同的优先级进行分区。有效值包括 Integer, [2, 10]。最大的延迟值是 100s,最低平均延迟值为 1us

alua :如果设置了 exclusive_pref_bit 值,则设置了 preferred_path_bit 的路径始终创建自己的路径组。

sysfs :如果设置了 exclusive_pref_bit 值,则设置了 preferred_path_bit 的路径始终创建自己的路径组。

datacore: 需要的值,格式为 timeout=<milliseconds> preferredsds=<name>

preferredsds :必需的值,它代表首选的 SDS 名称。

timeout: 这个值是可选的。以毫秒为单位设置查询超时。

iet: 一个需要的值,格式为 preferredip=<ip_address>

preferredip :此值是必需的。这是 iSCSI 目标的首选 IP 地址,使用点十进制表示法。

默认值为 unset

功能

多路径设备的默认额外功能,格式为 "number_of_features_plus_arguments feature1 …​"

features 的可能值包括:

queue_if_no_path :与将 no_path_retry 设置为 queue 的效果相同。

pg_init_retries n: 在失败前,重新尝试路径组初始化最多 n 次。这个值必须在 1 到 50 之间。

pg_init_delay_msecs msecs: pg_init 重新尝试初始化前的时间(毫秒)。这个值必须在 0 到 60000 之间。

queue_ mode :选择每个多路径设备的队列模式。mode 值选项包括 biorqmq。它们分别对应于基于 bio、request 和 block-multiqueue 请求 (blk-mq)。

默认值为 unset。默认也可以依赖于内核参数 dm_mod.use_blk_mq。如果已在 参数中设置了两个选项,则这两个选项为 mq,否则为 rq

path_checker

指定确定路径状态的默认方法。可能的值包括:

readsector0 :读该设备的第一个扇区。

tur :向设备发生一个 TEST UNIT READY 命令。

emc_clariion: 查询 EMC Clariion 特定的 EVPD 页 0xC0 以确定路径。

hp_sw :检查使用 Active/Standby 固件的 HP 存储阵列的路径状态。

rdac :检查 LSI/Engenio RDAC 存储控制器的路径状态。

directio :阅读带有直接 I/O 的第一个扇区。

cciss_tur :检查 HP/COMPAQ Smart Array (CCISS) 控制器的路径状态。这依赖于具体硬件。

none :不检查该设备。退回使用从 sysfs 检索的值。

默认值为 tur

alias_prefix

此属性代表 user_friendly_names 前缀。

默认值为 mpath

failback

管理路径组故障恢复。可能的值包括:

immediate :指定包含主动路径的最高优先级路径组的即时故障。

manual :指定没有立即故障恢复,但可以通过操作员的干预来进行故障恢复。

followover :指定只有路径组的第一个路径处于活跃状态时,才能执行自动故障恢复。当另一个节点请求故障切换时,这会让节点自动进行故障恢复。

大于零的数字值指定延迟故障恢复,以秒为单位表示。

默认值为 manual

rr_min_io

指定在切换到当前路径组中的下一个路径前要路由到路径的 I/O 请求数量。此设置仅适用于运行超过 2.6.31 的内核。较新的系统应使用 rr_min_io_rq。默认值为 1000

rr_min_io_rq

指定在切换到当前路径组中的下一个路径前要路由到路径的 I/O 请求数量。使用基于请求的 device-mapper-multipath。此设置可用于运行当前内核的系统。在运行早于 2.6.31 的内核的系统上,请使用 rr_min_io。默认值为:1

no_path_retry

此属性的数字值指定在禁用排队前,路径检查程序必须针对多路径设备中的所有路径失败的次数。

fail 表示立即失败,而不排队。

queue 表示在路径修复前排队不应停止。

默认值为 fail

user_friendly_names

可能的值包括:

yes :指定系统可以使用 /etc/multipath/bindings 文件为多路径分配永久唯一的别名,格式为 mpath<n>

no :系统使用 WWID 作为多路径的别名。在配置文件的 multipaths 部分中设置的所有特定于设备的别名,可覆盖此名称。

默认值为 no

queue_without_daemon

如果设置为 no,则 multipathd 守护进程会禁用所有设备的队列,在关闭时。默认值为 no

flush_on_last_del

如果设置为 yes,则 multipathd 守护进程会在删除最后的路径到设备时禁用排队。默认值为 no。

max_fds

设置多路径和 multipathd 守护进程可打开的最大打开文件描述符数量。这等同于 ulimit -n 命令。默认值为 max,它从 /proc/sys/fs/nr_open 被设置为系统限制。

checker_timeout

用来使用优先级优先级和路径检查器的超时时间(以秒为单位)发出带有显式超时的 SCSI 命令。sys/block/sd<x>/device/timeout 目录包括默认值。

fast_io_fail_tmo

当在一个 FC 远程端口中出现问题后 SCSI 层需要等待的时间(秒)才使到远程端口上的设备 I/O 失败。这个值需要小于 dev_loss_tmo 的值。把它设置为 off 会禁用超时。默认值为 5fast_io_fail_tmo 选项会覆盖底层路径设备的 recovery_tmoreplacement_timeout 选项的值。

dev_loss_tmo

SCSI 层在 FC 远程端口上检测到问题后等待的秒数,然后再从系统中删除。把它设置为 infinity 将会将其设置为 2147483647 秒(68 年)。OS 决定默认值。

eh_deadline

指定 SCSI 层在 SCSI 设备失败时执行错误处理的最大秒数。在这个超时后,scsi 层会执行完整的 HBA 重置。在 rport 永不丢失的情况下,需要设置此项,因此 fast_io_fail_tmodev_loss_tmo 不会触发,但 scsi 命令仍然挂起。当 SCSI 错误处理器执行 HBA 重置时,这会影响那个 HBA 上的所有目标路径。只有当受影响 HBA 中的所有目标都被多路径时,才应设置 eh_deadline 值。

默认值为 unset

detect_prio

如果它被设置为 yes,则多路径会检测该设备是否是支持 Asymmetric Logical Unit Access (ALUA)的 SCSI 设备,或者支持 Asymmetric Namespace Access (ANA)的 NVMe 设备。如果设备支持 ALUA,则多路径会自动为其分配 alua prioritizer。如果设备支持 ANA,则多路径会自动为其分配 ana prioritizer。

如果 detect_prio 设置为 no,或者设备不支持 ALUA 或 ANA,则 prio 属性会设置 prioritizer。

默认值为 yes

uid_attribute

指定用于设备 WWID 的 udev 属性。

默认值取决于具体设备:SCSI 设备为 ID_SERIAL,DASD 设备为 ID_UID,NVMe 设备为 ID_WWN

force_sync

如果设置为 yes,则此参数可防止路径检查程序在 async 模式下运行。这意味着一次仅运行一个检查程序。当多个 multipathd checkers 并行运行,并可能导致大量 CPU 压力时,这非常有用。

默认值为 no

strict_timing

如果设置为 yesmultipathd 守护进程会在正好 1 秒后启动一个新的路径检查程序循环,以便每个路径检查在 polling_interval 的确切设置秒内进行。在忙碌的系统上,路径检查所需的时间可能长于一秒。接下来的轮循中会考虑缺少的 tick。如果路径检查的时间超过 polling_interval 设置的秒,则发出警告。

默认值为 no

retrigger_tries,retrigger_delay

结合使用 retrigger_triesretrigger_delay 参数,使 multipathd retrigger uevents。如果 udev 无法完全处理原始的 uevents,则会导致多路径无法使用该设备。retrigger_tries 参数设置多路径试图在未完全设置时重新触发 uevent 的次数。retrigger_delay 参数设置重试间隔秒数。这两个选项都接受大于或等于 0 的数字。将 retrigger_tries 参数设置为 0 可禁用重试。将 retrigger_delay 参数设置为 0 会导致在路径检查程序的下一个循环中重新发出 uevent

retrigger_tries 的默认值为 3retrigger_delay 的默认值为 10。

missing_uev_wait_timeout

此属性控制 multipathd 守护进程等待为新创建的多路径设备接收来自 udev 的更改事件的秒数。之后,它会自动启用设备重新载入。在大多数情况下,multipathd 延迟会在设备上重新加载,直到它从初始表负载接收更改 uevent

默认值为 30

deferred_remove

如果设置为 yesmultipathd 会执行延迟删除,而不是在删除最后一个路径设备时进行常规删除。这样可确保如果执行常规删除,且删除失败,则当最后一个用户关闭该设备时,设备会被自动删除。默认值为 no

san_path_err_threshold, san_path_err_forget_rate, san_path_err_recovery_time

如果将所有三个属性设置为大于零的整数,则它们可让 multipathd 守护进程使 multipathd 守护进程无法重新生成路径,从而监控路径检查程序失败的频率。如果路径检查程序失败的次数多于 san_path_err_threshold 属性的值,但在 san_path_err_forget_rate 检查内,则 multipathd 守护进程不会重新恢复路径,直到 san_path_err_recovery_time 属性的值返回,且没有任何路径检查失败。

如需更多信息,请参阅 multipath.conf (5) 中的 Shaky paths 检测 部分。

默认值为 no

marginal_path_double_failed_time, marginal_path_err_sample_time, marginal_path_err_rate_threshold, marginal_path_err_recheck_gap_time

如果 marginal_path_double_failed_time,marginal_path_err_rate_threshold, 和 marginal_path_err_recheck_gap_time 设置为大于 0 的整数,则 marginal_path_err_sample_time 设置为大于 120 的整数, 它们通过测试重复失败的路径的 I/O 故障率,使 multipathd 守护进程可以防止 reky 路径。

如果路径在 marginal_path_double_failed_time 属性中设置的值内失败,则 multipathd 守护进程不会立即重新恢复它,当路径检查程序决定备份它时。相反,multipathd 会将读取 I/O 的稳定流添加到 marginal_path_err_sample_time 属性中设置的值(以秒为单位)。如果每千个 I/O 属性的 marginal_path_err_rate_threshold 属性中设定了值,multipathd 会等待 marginal_path_err_recheck_gap_time 秒,然后启动另一个以读取 I/O 测试路径的测试路径。否则,multipathd 会重新声明路径。

如需更多信息,请参阅 multipath.conf (5) 中的 Shaky paths 检测 部分。

默认值为 no

marginal_pathgroups

可能的值包括:

on :当一个边缘路径检测方法决定路径边缘时,系统会重新输入路径并将其放置在单独的 pathgroup 中。只有在首先尝试所有非可能路径组后,此组才会生效。这可以防止在系统仍可使用一些边缘路径时出现 IO 错误。该路径会在配置的时间通过监控后立即返回到常规路径组。

off: delay_*_checks,marginal_path_*, 和 san_path_err_* 属性使系统无法重新生成任何 marginalshaky 路径,直到它们被监控了配置的时间。

fpinmultipathd 守护进程收到 fpin 通知,将路径状态设置为 marginal 和重新组路径,如 on 值所述。

marginal_path_*san_path_err_* 属性被隐式设置为 no

如需更多信息,请参阅 multipath.conf (5) 中的 Shaky paths 检测 部分。

默认值为 no

log_checker_err

如果设置为 once,则multipathd 会在详细程度 2 中记录第一个路径检查程序错误。在恢复设备之前,系统会在详细程度 3 中记录进一步的错误。如果将 log_checker_err 参数设置为 alwaysmultipathd 始终会在详细程度 2 中记录路径检查程序错误。默认值为 always

skip_kpartx

如果设置为 yes,则kpartx 不会自动在该设备中创建分区。这可让您在没有创建分区的情况下创建多路径设备,即使该设备有分区表。这个选项的默认值为 no

max_sectors_kb

使用此选项,您可以在多路径设备首次激活前,将 max_sectors_kb 设备队列参数设置为多路径设备的所有底层路径上的指定的值。每当系统创建新的多路径设备时,设备都会继承路径设备的 max_sectors_kb 值。为多路径设备手动增大这个值或降低路径设备的值可能会导致多路径创建大于路径设备的 I/O 操作。使用 max_sectors_kb 参数是在路径设备之上创建多路径设备前设置这些值的简单方法,并防止传递任何无效的 I/O 操作。如果您没有设置此参数,path devices 驱动程序会自动设置它,多路径设备会从路径设备中继承它。

ghost_delay

此属性设置在仅使用 ghost 路径创建设备后,多路径在将其准备好在 systemd 中使用的秒数。这提供了多路径运行硬件处理程序之前显示的主动路径时间,以便将 ghost 路径切换到活跃路径。

把它设置为 0no 使多路径立即将带有 ghost 路径的设备标记为就绪。

默认值为 no

enable_foreign

此属性启用或禁用外部库。

该值是一个正则表达式。如果外部库的名称与表达式匹配,则会加载。

默认情况下,所有库都启用。但是,默认配置文件还会将此属性设置为"^ $",这将禁用所有外部库。

recheck_wwid

如果设置为 yes,当恢复失败路径时,multipathd 守护进程会重新检查路径 WWID。如果 WWID 中有变化,则路径会从当前多路径设备中删除,并作为新路径再次添加。如果手动重新添加,multipathd 守护进程还会再次检查路径 WWID。

这个选项只适用于带有配置的 SCSI 设备,以使用默认的 uid_attributeID_SERIALsysfs 来获取其 WWID。

默认值为 no

remove_retries

这个选项设定多路径重试删除正在使用的设备的次数。在每次尝试之间,多路径都会不活跃 1 秒。默认值为 0,这意味着多路径不会重试删除。

detect_checker

如果设置为 yes,则多路径会检查设备是否支持 ALUA 或冗余磁盘阵列控制器 (RDAC)。如果设备支持 ALUA,则多路径会为其分配 tur path_checker。如果设备支持 RDAC,multipathd 守护进程会为其分配 rdac path_checker。如果设备不支持 ALUA 或 RDAC,或者 detect_checker 被设置为 nopath_checker 属性会设置路径检查程序。

默认值为 yes

reservation_key

mpathpersist 参数使用此服务操作保留密钥。必须为使用持久保留的所有多路径设备设置它,并且它必须与 PERSISTENT RESERVE OUT 参数类别中的 RESERVATION KEY 字段相同,其中包含应用客户端提供给设备服务器的 8 字节值。如果您在使用 mpathpersist 注册密钥时使用 --param-aptpl 选项,您必须将 :aptpl 附加到保留密钥的末尾。

这个参数也可以设置为 file,这会导致 mpathpersist 自动存储用于在 prkeys 文件中注册多路径设备的 RESERVATION KEY。然后 multipathd 守护进程使用这个密钥在出现时注册额外的路径。当您删除注册时,这会自动从 prkeys 文件中删除 RESERVATION KEY。它默认是 unset。如果需要持久性保留,建议将此属性设置为 file

all_tg_pt

如果此选项在 mpathpersist 注册密钥时设为 yes,它会将注册的密钥从一个主机视为一个目标端口,就像从一个主机移动到所有目标端口一样。这必须设置为 yes,以便在主机中的所有目标端口上自动设置和清除注册密钥,而不是每个主机的每个目标端口成功使用 mpathpersist。默认值为 no

其他资源

  • multipath.conf(5) 手册页

5.3. 配置文件 multipaths 部分

使用 multipath.conf 配置文件的 multipaths 部分设置单个多路径设备的属性。设备映射器(DM)多路径使用这些属性覆盖所有其他配置设置,包括 overrides 部分中的设置。如需 overrides 部分中的属性列表,请参阅配置文件 覆盖 部分。

multipaths 部分仅将 multipath 子部分识别为属性。下表显示了您可以在 multipath 子部分中为每个特定多路径设备设置的属性。这些属性仅适用于指定的多路径。如果几个 multipath 子部分与特定的设备全球识别符(WWID)匹配,则这些小节的内容会合并。与之前版本相比,来自最新条目的设置均具有优先权。

表 5.2. multipath 子部分属性

属性描述

wwid

指定多路径设备的 WWID,多路径属性应用到其中。这个参数对于 multipath.conf 文件的这个部分是必需的。

alias

指定多路径设备的符号名称,多路径属性应用到其中。如果您使用 user_friendly_names,请不要将此值设置为 mpath <n>。这可能导致与自动分配的用户友好名称冲突,并为您提供不正确的设备节点名称。

以下列表中的属性是可选的。如果没有设置它们,则会应用来自 overrides, devices, 或 defaults 部分中的默认值。有关这些属性的完整描述,请参阅 配置文件默认值

  • path_grouping_policy
  • path_selector
  • prio
  • prio_args
  • failback
  • no_path_retry
  • rr_min_io
  • rr_min_io_rq
  • flush_on_last_del
  • 功能
  • reservation_key
  • user_friendly_names
  • deferred_remove
  • san_path_err_threshold
  • san_path_err_forget_rate
  • san_path_err_recovery_time
  • marginal_path_err_sample_time
  • marginal_path_err_rate_threshold
  • marginal_path_err_recheck_gap_time
  • marginal_path_double_failed_time
  • delay_watch_checks
  • delay_wait_checks
  • skip_kpartx
  • max_sectors_kb
  • ghost_delay

以下示例显示了在配置文件中为两个特定多路径设备指定的多路径属性。第一个设备的 WWID 为 3600508b4000156d70001200000b0000,符号链接名为 yellow

示例中的第二个多路径设备的 WWID 为 1DEC_321816758474,符号链接名为 red

例 5.1. 多路径属性规格

multipaths {
       multipath {
              wwid                  3600508b4000156d70001200000b0000
              alias                 yellow
              path_grouping_policy  multibus
              path_selector         "round-robin 0"
              failback              manual
              no_path_retry         5
       }
       multipath {
              wwid                  1DEC_321816758474
              alias                 red
        }
}

其他资源

5.4. 配置文件 devices 部分

使用 multipath.conf 配置文件的 devices 部分为单个存储控制器类型定义设置。本节中设置的值覆盖 defaults 部分中的指定的值。

系统根据 vendor, product, 和 revision 关键字标识存储控制器类型。这些关键字是正则表达式,必须与有关特定设备的 sysfs 信息匹配。

devices 部分仅将 device 子部分识别为属性。如果某个设备有多个关键字匹配,则所有匹配条目的属性都将应用到其中。如果在多个匹配的 device 子部分中指定属性,则后续版本的条目优先于任何之前条目。

重要

最新版本的 device 子部分中的配置属性会覆盖任何之前 devices 子部分中的属性,以及 defaults 部分中的属性。

下表显示了您可以在 device 子部分中设置的属性。

表 5.3. devices 部分属性

属性描述

vendor

指定与设备厂商名称匹配的正则表达式。这是一个必需属性。

产品

指定与设备产品名称匹配的正则表达式。这是一个必需属性。

revision

指定与设备产品修订匹配的正则表达式。如果缺少 revision 属性,则所有设备修订都匹配。

product_blacklist

多路径使用此属性创建具有 vendor 属性的设备 blacklist 项,它与这个设备项的 vendor 属性匹配,以及一个 product 属性,它与这个 product_blacklist 属性匹配。

vpd_vendor

使用 VPD 页缩写来显示特定于供应商的 Vital 产品数据(VPD) 页面信息。

multipathd 守护进程使用此信息来收集设备特定信息。目前只支持 hp3par VPD 页面。

hardware_handler

指定用于特定设备类型的硬件处理器。所有可能的值都依赖于硬件,包括:

emc:DGC 类数组的硬件处理程序,如 CLARiiON CX/AX 和 EMC VNX 和 unity 系列。

rdac :LSI/Engenio/NetApp RDAC 类的硬件处理器,如 NetApp SANtricity E/EF 系列,以及 IBM DELL SGI STK 和 SUN 的 OEM 阵列。

hp_sw: HP/COMPAQ/DEC HSG80 和 MSA/HSV 阵列的硬件处理程序,只使用 Active/Standby 模式。

alua:SCSI-3 ALUA 兼容阵列的硬件处理程序.

ana: NVMe ANA 兼容阵列的硬件处理程序。

默认值为 unset

重要

Linux 内核(版本 4.3 及更新版本)会自动将设备处理程序附加到已知的设备中。这包括支持 SCSI-3 ALUA 的所有设备。之后,内核不会启用更改处理程序。在这些内核上设置此类设备的 hardware_handler 属性不会起作用。

以下列表中的属性是可选的。如果没有设置它们,则应用 defaults 部分中的默认值。有关这些属性的完整描述,请参阅 配置文件默认值

  • path_grouping_policy
  • uid_attribute
  • getuid_callout
  • path_selector
  • path_checker
  • prio
  • prio_args
  • failback
  • alias_prefix
  • no_path_retry
  • rr_min_io
  • rr_min_io_rq
  • flush_on_last_del
  • 功能
  • reservation_key
  • user_friendly_names
  • deferred_remove
  • san_path_err_threshold
  • san_path_err_forget_rate
  • san_path_err_recovery_time
  • marginal_path_err_sample_time
  • marginal_path_err_rate_threshold
  • marginal_path_err_recheck_gap_time
  • marginal_path_double_failed_time
  • delay_watch_checks
  • delay_wait_checks
  • skip_kpartx
  • max_sectors_kb
  • ghost_delay
  • all_tg_pt

其他资源

5.5. 配置文件覆盖部分

overrides 部分可以识别可选的 protocol 子部分,并可包含多个 protocol 子部分。系统使用强制 type 属性将路径设备与 protocol 子匹配。匹配 protocol 子部分中的属性优先于其它 overrides 部分中的属性。如果有多个匹配的 protocol 子部分,则后续条目具有更高的优先级。

以下列表中的属性是可选的。如果没有设置它们,则应用 devicesdefaults 部分中的默认值。

  • path_grouping_policy
  • uid_attribute
  • getuid_callout
  • path_selector
  • path_checker
  • alias_prefix
  • 功能
  • prio
  • prio_args
  • failback
  • no_path_retry
  • rr_min_io
  • rr_min_io_rq
  • flush_on_last_del
  • fast_io_fail_tmo
  • dev_loss_tmo
  • eh_deadline
  • user_friendly_names
  • retain_attached_hw_handler
  • detect_prio
  • detect_checker
  • deferred_remove
  • san_path_err_threshold
  • san_path_err_forget_rate
  • san_path_err_recovery_time
  • marginal_path_err_sample_time
  • marginal_path_err_rate_threshold
  • marginal_path_err_recheck_gap_time
  • marginal_path_double_failed_time
  • delay_watch_checks
  • delay_wait_checks
  • skip_kpartx
  • max_sectors_kb
  • ghost_delay
  • all_tg_pt

protocol 子部分识别以下强制属性:

表 5.4. multipath 子部分属性

属性描述

type

指定路径设备的协议字符串。可能的值包括:

scsi:fcp, scsi:spi, scsi:ssa, scsi:sbp, scsi:srp, scsi:iscsi, scsi:sas, scsi:adt, scsi:ata, scsi:unspec, ccw, cciss, nvme, undef

此属性不是正则表达式。路径设备协议字符串必须完全匹配。

以下列表中的属性对于 protocol 子部分是可选的。如果没有设置它们,则应用来自 overrides, devicesdefaults 部分中的默认值。

  • fast_io_fail_tmo
  • dev_loss_tmo
  • eh_deadline

其他资源

5.6. DM 多路径覆盖设备超时

restore_tmo sysfs 选项控制一个特定 iSCSI 设备的超时时间。以下选项全局覆盖 recovery_tmo 值:

  • replacement_timeout 配置选项会全局覆盖所有 iSCSI 设备的 recovery_tmo 值。
  • 对于由 DM 多路径管理的所有 iSCSI 设备,DM 多路径中的 fast_io_fail_tmo 选项会全局覆盖 recovery_tmo 值。

    DM 多路径中的 fast_io_fail_tmo 选项会覆盖光纤通道设备的 fast_io_fail_tmo 选项。

DM 多路径 fast_io_fail_tmo 选项优先于 replacement_timeout。红帽不推荐使用 replacement_timeout 覆盖由 DM 多路径管理的设备中的 recovery_tmo,因为在 multipathd 服务重新载入时 DM 多路径总是重置 recovery_tmo

5.7. 修改多路径配置文件默认设置

/etc/multipath.conf 配置文件包含一个 defaults 部分,该部分将 user_friendly_names 参数设置为 yes,如下所示。

defaults {
        user_friendly_names yes
}

这会覆盖 user_friendly_names 参数的默认值。multipath.conf 文件 的 defaults 部分中设置的默认值由 DM 多路径使用,除非被 multipath.conf 文件的设备、多路径或覆盖部分中指定的属性所覆盖。

流程

  1. 查看 /etc/multipath.conf 配置文件,其中包含配置默认值模板:

    #defaults {
    #       polling_interval        10
    #       path_selector           "round-robin 0"
    #       path_grouping_policy    multibus
    #       uid_attribute           ID_SERIAL
    #       prio                    alua
    #       path_checker            readsector0
    #       rr_min_io               100
    #       max_fds                 8192
    #       rr_weight               priorities
    #       failback                immediate
    #       no_path_retry           fail
    #       user_friendly_names     yes
    #}
  2. 覆盖任何配置参数的默认值。您可以从此模板将相关行复制到 defaults 部分,并取消注释它。

    例如,要将 path_grouping_policy 参数覆盖为 multibus,而不是默认值 failover,请将模板中的相应行复制到配置文件的初始默认值部分,然后取消对它的注释,如下所示:

    defaults {
            user_friendly_names     yes
            path_grouping_policy    multibus
    }
  3. 通过运行以下命令之一修改多路径配置文件后,验证 /etc/multipath.conf 文件:

    • 要显示任何配置错误,请运行:

      # multipath -t > /dev/null
    • 要显示使用添加的更改显示新配置,请运行:

      # multipath -t
  4. 重新载入 /etc/multipath.conf 文件并重新配置 multipathd 守护进程以使更改生效:

    # service multipathd reload

其他资源

  • multipath.conf(5) and multipathd(8) man pages

5.8. 修改具体设备的多路径设置

multipath.conf 配置文件的 multipaths 部分中,您可以添加特定于单个多路径设备的配置,由强制 WWID 参数引用。

这些默认设置由 DM 多路径使用,并覆盖 multipath.conf 文件的 overridesdefaultdevices 部分设置的属性。multipaths 部分可能存在任意数量的多路径子部分。

流程

  1. 修改特定多路径设备的 multipaths 部分。以下示例显示了在配置文件中为两个特定多路径设备指定的多路径属性:

    • 第一个设备的 WWID 为 3600508b4000156d70001200000b0000,符号链接名为 yellow
    • 示例中的第二个多路径设备的 WWID 为 1DEC_321816758474,符号链接名为 red

    在本例中,rr_weight 属性设置为 priorities

    multipaths {
           multipath {
                  wwid                  3600508b4000156d70001200000b0000
                  alias                 yellow
                  path_grouping_policy  multibus
                  path_selector         "round-robin 0"
                  failback              manual
                  rr_weight             priorities
                  no_path_retry         5
           }
           multipath {
                  wwid                  1DEC_321816758474
                  alias                 red
                  rr_weight             priorities
            }
    }
  2. 通过运行以下命令之一修改多路径配置文件后,验证 /etc/multipath.conf 文件:

    • 要显示任何配置错误,请运行:

      # multipath -t > /dev/null
    • 要显示使用添加的更改显示新配置,请运行:

      # multipath -t
  3. 重新载入 /etc/multipath.conf 文件并重新配置 multipathd 守护进程以使更改生效:

    # service multipathd reload

其他资源

  • multipath.conf(5) 手册页

5.9. 使用协议修改特定设备的多路径配置

您可以根据其传输协议配置多路径设备路径。通过使用 /etc/multipath.conf 文件中的 overrides 部分中的 protocol 子部分,您可以覆盖特定路径上的多路径配置设置。这可让通过多种传输协议访问多路径设备,如 Fiber Channel (FC)或互联网小型计算机系统接口(iSCSI)。

protocol 子部分中设定的选项会覆盖覆盖 overrides, devicesdefaults 部分中的值。这些选项只适用于使用匹配小节的 type 参数的传输协议的设备。

先决条件

  • 您已在系统中配置了设备映射器 (DM) 多路径。
  • 您有多路径设备,其中并非所有路径都使用相同的传输协议。

流程

  1. 运行以下命令查看具体路径协议:

    # multipathd show paths format "%d %P"
    dev protocol
    sda scsi:ata
    sdb scsi:fcp
    sdc scsi:fcp
  2. 通过为每个多路径类型添加 protocol 子部分,编辑 /etc/multipath.conf 文件的 overrides 部分。

    • 路径设备的设置,使用 scsi:fcp 协议:

      overrides {
              dev_loss_tmo 60
              fast_io_fail_tmo 8
              protocol {
                      type "scsi:fcp"
                      dev_loss_tmo 70
                      fast_io_fail_tmo 10
                      eh_deadline 360
              }
    • 使用 scsi:iscsi 协议的路径设备设置:

      overrides {
              dev_loss_tmo 60
              fast_io_fail_tmo 8
              protocol {
                      type "scsi:iscsi"
                      dev_loss_tmo 60
                      fast_io_fail_tmo 120
              }
    • 路径设备的设置,使用所有其他协议:

      overrides {
              dev_loss_tmo 60
              fast_io_fail_tmo 8
              protocol {
                      type "<type of protocol>"
                      dev_loss_tmo 60
                      fast_io_fail_tmo 8
              }

overrides 部分可以包含多个 protocol 部分。

重要

protocol 部分必须包含 type 参数。然后,使用匹配 type 参数配置所有路径,然后使用 protocol 子部分中列出的其余参数进行更新。

其他资源

  • multipath.conf(5) 手册页

5.10. 修改存储控制器的多路径设置

multipath.conf 配置文件的 devices 部分为独立的存储设备设置属性。这些属性可由 DM 多路径使用,除非被包括该设备的路径的 multipath.conf 文件的 multipathsoverrides 部分的内容覆盖。这些属性覆盖 multipath.conf 文件的 defaults 部分中设置的属性。

流程

  1. 查看默认配置值的信息,包括支持的设备:

    # multipathd show config
    # multipath -t

    在多路径配置中,默认包括支持多路径的许多设备。

  2. 可选:如果需要修改默认配置值,您可以通过在配置文件中包含覆盖这些值的设备的条目来覆盖默认值。您可以复制 multipathd show config 命令显示的设备的设备配置默认值,并覆盖您要更改的值。
  3. 通过设置 vendorproduct 参数,将没有被默认自动配置的设备添加到配置文件的 devices 部分。打开 /sys/block/device_name/device/vendor/sys/block/device_name/device/model 文件,其中 device_name 是多路径的设备,如下例所示:

    # cat /sys/block/sda/device/vendor
    WINSYS
    # cat /sys/block/sda/device/model
    SF2372
  4. 可选: 根据您的具体设备指定附加参数:

    主动/主动 设备
    通常,在这种情况下不需要设置附加参数。如果需要,您可以将 path_grouping_policy 设置为 multibus。其他可能需要设置的参数为 no_path_retryrr_min_io
    主动/被动 设备
    如果它自动将 I/O 的路径切换到被动路径,您需要将检查程序功能更改为不会将 I/O 发送到路径路径,以测试其是否工作,否则您的设备会保持故障。这意味着,您已将 path_checker 设置为 tur,它适用于支持 Test unit Ready 命令的所有 SCSI 设备。

    如果设备需要特殊命令来切换路径,则为多路径配置这个设备需要硬件处理器内核模块。当前可用的硬件处理器是 emc。如果您的设备不够,您可能无法为多路径配置设备。

    以下示例显示了多路径配置文件中的 device 条目:

    #	}
    #	device {
    #		vendor			"COMPAQ  "
    #		product			"MSA1000         "
    #		path_grouping_policy	multibus
    #		path_checker		tur
    #		rr_weight		priorities
    #	}
    #}
  5. 通过运行以下命令之一修改多路径配置文件后,验证 /etc/multipath.conf 文件:

    • 要显示任何配置错误,请运行:

      # multipath -t > /dev/null
    • 要显示使用添加的更改显示新配置,请运行:

      # multipath -t
  6. 重新载入 /etc/multipath.conf 文件并重新配置 multipathd 守护进程以使更改生效:

    # service multipathd reload

其他资源

  • multipath.conf(5) and multipathd(8) man pages

5.11. 为所有设备设定多路径值

使用 multipath.conf 配置文件的 overrides 部分,您可以为所有设备设置配置值。这部分支持 multipath.conf 配置文件的 devicesdefaults 部分支持的所有属性,这是除 vendor, product, 和 revision 以外的所有 devices 项属性。

这些属性可由 DM 多路径为所有设备使用,除非被 multipath.conf 文件的 multipath.conf 文件的 multipaths 部分中指定的属性覆盖。这些属性覆盖 multipath.conf 文件的 devicesdefaults 部分中设置的属性。

流程

  1. 覆盖特定于设备的设置。例如,您可能希望所有设备都将 no_path_retry 设置为 fail。当所有路径都失败时,使用以下命令关闭队列。这会覆盖任何特定于设备的设置。

    overrides {
            no_path_retry fail
    }
  2. 通过运行以下命令之一修改多路径配置文件后,验证 /etc/multipath.conf 文件:

    • 要显示任何配置错误,请运行:

      # multipath -t > /dev/null
    • 要显示使用添加的更改显示新配置,请运行:

      # multipath -t
  3. 重新载入 /etc/multipath.conf 文件并重新配置 multipathd 守护进程以使更改生效:

    # service multipathd reload

其他资源

  • multipath.conf(5) 手册页

第 6 章 防止设备多路径

您可以将 DM 多路径配置为在配置多路径设备时忽略所选设备。DM 多路径不会将这些忽略的设备分组到多路径设备中。

6.1. DM 多路径为路径创建多路径设备的条件

DM 多路径有一组默认规则,用于决定是否为路径创建多路径设备还是忽略路径。您可以配置行为。

如果将 find_multipaths 配置参数设定为 off,则多路径总是会尝试为每个未明确禁用的路径创建一个多路径设备。如果 find_multipaths 配置参数被设置为 on,则只在满足以下条件之一时,多路径会创建一个设备:

  • 至少有两个路径有相同的全局-Wide Identification(WWID)没有禁用。
  • 您可以使用 multipath 命令指定设备来手动强制创建设备。
  • 一个路径的 WWID 与之前创建的多路径设备相同,即使那个多路径设备目前还不存在。每当创建多路径设备时,多路径都会记住设备的 WWID,以便在看到该 WWID 的路径时立即自动创建该设备。这可让您让多路径自动选择到多路径设备的正确路径,而无需在其它设备中禁用多路径。

如果您之前使用 find_multipaths 参数创建了多路径设备,然后稍后将 参数设置为 on,您可能需要从 /etc/multipath/wwids 文件中删除您不想作为多路径设备创建的 WWID。以下示例显示了示例 /etc/multipath/wwids 文件。WWID 用斜杠(/)括起:

# Multipath wwids, Version : 1.0
# NOTE: This file is automatically maintained by multipath and multipathd.
# You should not need to edit this file in normal circumstances.
#
# Valid WWIDs:
/3600d0230000000000e13955cc3757802/
/3600d0230000000000e13955cc3757801/
/3600d0230000000000e13955cc3757800/
/3600d02300069c9ce09d41c31f29d4c00/
/SWINSYS  SF2372         0E13955CC3757802/
/3600d0230000000000e13955cc3757803/

除了 onoff 之外,您还可以将 find_multipaths 设置为以下值:

strict
多路径永远不会接受之前没有多路径的路径,因此不在 /etc/multipath/wwids 文件中。
smart
多路径会在出现时立即接受 udev 中的非禁用设备。如果 multipathd 没有在使用 find_multipaths_timeout 参数设置的超时中创建设备,它将在该设备中释放其声明。

find_multipaths 的内置默认值为 off。但是,mpathconf 创建的默认 multipath.conf 文件会将 find_multipaths 的值设置为 on

find_multipaths 参数设置为 on 时,仅在带有您不想使用多路径的设备中禁用多路径。因此,通常不需要在设备中禁用多路径。

如果您将之前创建的多路径设备添加到 黑名单 中,通过使用 -w 选项从 /etc/multipath/wwids 文件中删除该设备的 WWID 有助于避免与其他程序出现问题。例如,要从 /etc/multipath/wwids 文件中删除 WWID 为3600d0230000000000e13954ed5f89300 的设备 /dev/sdb

  • 使用设备名称删除多路径设备。

    #multipath -w /dev/sdb
    wwid '3600d0230000000000e13954ed5f89300' removed
  • 使用设备的 WWID 删除多路径设备。

    #multipath -w 3600d0230000000000e13954ed5f89300
    wwid '3600d0230000000000e13954ed5f89300' removed

您也可以使用 -W 选项来更新 /etc/multipath/wwids 文件。这会将 /etc/multipath/wwids 文件重置为仅包含当前多路径设备的 WWID。要重置文件,请运行以下命令:

#multipath -W
successfully reset wwids

其他资源

  • multipath.conf(5) 手册页

6.2. 在某些设备中禁用多路径的条件

您可以根据以下标准在设备中禁用多路径:

  • WWID
  • 设备名称
  • 设备类型
  • 属性
  • 协议

对于每个设备,DM 多路径会按照以下顺序评估这些条件:

  1. 属性
  2. devnode
  3. device
  4. protocol
  5. wwid

如果某个设备被任何上述条件所禁用,DM 多路径会将它排除在 multipathd 处理之外,不会评估后续标准。对于每个条件,如果设备同时匹配,则异常列表优先于禁用的设备列表。

注意

默认情况下,禁用了各种设备类型,即使您注释掉了配置文件的初始 黑名单 部分。

6.3. 使用 WWID 禁用多路径

您可以通过其全局识别(WWID)禁用独立设备上的多路径。

流程

  1. 使用 wwid 条目禁用 /etc/multipath.conf 配置文件中的设备。

    以下示例显示,DM 多路径配置文件中禁用 WWID 为 26353900f02796769 的设备的行:

    blacklist {
           wwid 26353900f02796769
    }
  2. 通过运行以下命令之一修改多路径配置文件后,验证 /etc/multipath.conf 文件:

    • 要显示任何配置错误,请运行:

      # multipath -t > /dev/null
    • 要显示使用添加的更改显示新配置,请运行:

      # multipath -t
  3. 重新载入 /etc/multipath.conf 文件并重新配置 multipathd 守护进程以使更改生效:

    # service multipathd reload

6.4. 使用设备名称禁用多路径

您可以使用设备名称在设备类型中禁用多路径,以便 DM 多路径不会将其分组到多路径设备中。

流程

  1. 使用 devnode 条目禁用 /etc/multipath.conf 配置文件中的设备。

    下面的例子显示,DM 多路径配置文件中禁用所有 SCSI 设备的行,因为它也禁用所有 sd* 设备:

    blacklist {
           devnode "^sd[a-z]"
    }

    您可以使用 devnode 条目禁用单个设备,而不是禁用特定类型的所有设备。但不建议这样做,因为除非由 udev 规则静态映射,否则无法保证重启后特定设备的名称相同。例如:重启后,设备名称可以从 /dev/sda 改为 /dev/sdb

    默认情况下,DM 多路径会禁用所有不是 SCSI、NVMe 或者 DASD 的设备,使用以下 devnode 条目:

    blacklist {
           devnode "!^(sd[a-z]|dasd[a-z]|nvme[0-9])"
    }

    这个条目禁用的设备通常不支持 DM 多路径。

  2. 通过运行以下命令之一修改多路径配置文件后,验证 /etc/multipath.conf 文件:

    • 要显示任何配置错误,请运行:

      # multipath -t > /dev/null
    • 要显示使用添加的更改显示新配置,请运行:

      # multipath -t
  3. 重新载入 /etc/multipath.conf 文件并重新配置 multipathd 守护进程以使更改生效:

    # service multipathd reload

6.5. 根据设备类型禁用多路径

您可以使用 device 部分在设备中禁用多路径。

流程

  1. 使用 device 部分,禁用 /etc/multipath.conf 配置文件中的设备。

    以下示例禁用所有 IBM DS4200 和 HP 设备的多路径:

    blacklist {
           device {
                   vendor  "IBM"
                   product "3S42"       #DS4200 Product 10
           }
           device {
                   vendor  "HP"
                   product ".*"
           }
    }
  2. 通过运行以下命令之一修改多路径配置文件后,验证 /etc/multipath.conf 文件:

    • 要显示任何配置错误,请运行:

      # multipath -t > /dev/null
    • 要显示使用添加的更改显示新配置,请运行:

      # multipath -t
  3. 重新载入 /etc/multipath.conf 文件并重新配置 multipathd 守护进程以使更改生效:

    # service multipathd reload

6.6. 使用 udev 属性禁用多路径

您可以通过其 udev 属性参数禁用对设备的多路径。

流程

  1. 使用 property 参数禁用 /etc/multipath.conf 配置文件中的设备。此参数是一个正则表达式字符串,与设备的 udev 环境变量名称匹配。

    以下示例禁用了所有使用 udev 属性 ID_ATA 的设备上的多路径:

    blacklist {
            property "ID_ATA"
    }
  2. 通过运行以下命令之一修改多路径配置文件后,验证 /etc/multipath.conf 文件:

    • 要显示任何配置错误,请运行:

      # multipath -t > /dev/null
    • 要显示使用添加的更改显示新配置,请运行:

      # multipath -t
  3. 重新载入 /etc/multipath.conf 文件并重新配置 multipathd 守护进程以使更改生效:

    # service multipathd reload

6.7. 使用设备协议禁用多路径

您可以使用设备协议禁用设备中的多路径。

流程

  1. 可选:查看路径使用的协议:

    # multipathd show paths format "%d %P"
  2. 使用 protocol 参数禁用 /etc/multipath.conf 配置文件中的设备。

    protocol 参数使用正则表达式,将具有匹配协议字符串的所有设备列入黑名单。例如,要在所有 nvme 设备中禁用多路径,请使用:

    blacklist {
            protocol "nvme"
    }

    DM 多路径识别以下协议字符串:

    • scsi:fcp
    • scsi:spi
    • scsi:ssa
    • scsi:sbp
    • scsi:srp
    • scsi:iscsi
    • scsi:sas
    • scsi:adt
    • scsi:ata
    • scsi:unspec
    • ccw
    • cciss
    • nvme:pcie
    • nvme:rdma
    • nvme:fc
    • nvme:tcp
    • nvme:loop
    • nvme:apple-nvme
    • nvme:unspec
    • undef
  3. 通过运行以下命令之一修改多路径配置文件后,验证 /etc/multipath.conf 文件:

    • 要显示任何配置错误,请运行:

      # multipath -t > /dev/null
    • 要显示使用添加的更改显示新配置,请运行:

      # multipath -t
  4. 重新载入 /etc/multipath.conf 文件并重新配置 multipathd 守护进程以使更改生效:

    # service multipathd reload

6.8. 为禁用多路径的设备添加例外

您可以通过在当前禁用多路径的设备中添加例外来启用多路径。

先决条件

  • 在某些设备中禁用多路径。

流程

  1. 使用 /etc/multipath.conf 配置文件的 blacklist_exceptions 部分在设备上启用多路径。

    当在配置文件的 blacklist_exceptions 部分中指定设备时,您必须使用与 黑名单 部分中指定的相同标准指定例外。例如: WWID 异常不适用于 devnode 条目禁用的设备,即使禁用的设备与该 WWID 关联。同样,devnode 例外仅适用于 devnode 条目,device 例外则仅适用于设备条目。

    例 6.1. WWID 异常

    如果您有大量设备,且希望仅多路径 WWID 为 3600d0230000000000e13955cc3757803,而不是逐一禁用每个设备,您可以禁用所有这些设备,然后禁用所有这些设备,然后通过将以下几行添加到 /etc/multipath.conf 文件中来只启用其中一个。

    blacklist {
            wwid ".*"
    }
    
    blacklist_exceptions {
            wwid "3600d0230000000000e13955cc3757803"
    }

    另外,您可以使用感叹号(!)来反转 黑名单 条目,该条目会禁用除指定 WWID 之外的所有设备:

    blacklist {
            wwid "!3600d0230000000000e13955cc3757803"
    }

    例 6.2. udev 属性的例外

    property 参数的工作方式与其他 blacklist_exception 参数不同。property 参数的值必须与 udev 数据库中变量名称匹配。否则,设备会被禁用。使用这个参数,您可以在某些 SCSI 设备中禁用多路径,如 USB 盘和本地硬盘。

    要只在可能进行多路径的 SCSI 设备中启用多路径,请将此参数设置为 (SCSI_IDENT_|ID_WWN),如下例所示:

    blacklist_exceptions {
            property "(SCSI_IDENT_|ID_WWN)"
    }
  2. 通过运行以下命令之一修改多路径配置文件后,验证 /etc/multipath.conf 文件:

    • 要显示任何配置错误,请运行:

      # multipath -t > /dev/null
    • 要显示使用添加的更改显示新配置,请运行:

      # multipath -t
  3. 重新载入 /etc/multipath.conf 文件并重新配置 multipathd 守护进程以使更改生效:

    # service multipathd reload

第 7 章 管理多路径卷

以下是 DM 多路径提供的几个命令,您可以使用它们来管理多路径卷:

  • multipath
  • dmsetup
  • multipathd

7.1. 重新定义在线多路径设备大小

如果您需要重新定义在线多路径设备的大小,请使用以下步骤。

流程

  1. 重新定义您的物理设备大小。
  2. 执行以下命令查找逻辑单元号(LUN)的路径:

    # multipath -l
  3. 重新定义您的路径大小。对于 SCSI 设备,在 rescan 文件中写入 1 以便重新扫描 SCSI 驱动程序,如下命令所示:

    # echo 1 > /sys/block/path_device/device/rescan

    请确定您为每个路径设备运行这个命令。例如:如果您的路径设备是 sdasdbsdesdf,则您要运行以下命令:

    # echo 1 > /sys/block/sda/device/rescan
    # echo 1 > /sys/block/sdb/device/rescan
    # echo 1 > /sys/block/sde/device/rescan
    # echo 1 > /sys/block/sdf/device/rescan
  4. 重新定义多路径设备大小:

    # multipathd resize map multipath_device
  5. 重新定义文件系统大小(假设没有使用 LVM 或者 DOS 分区):

    # resize2fs /dev/mapper/mpatha

7.2. 将 root 文件系统从单一路径设备移动到多路径设备中

如果您在单一路径设备中安装了系统,之后在 root 文件系统中添加另一个路径,则需要将您的根文件系统移到多路径设备。有关从单一路径移动到多路径设备的详情,请查看以下步骤。

先决条件

  • 已安装 device-mapper-multipath 软件包。

流程

  1. 创建 /etc/multipath.conf 配置文件,加载 multipath 模块并启用 multipathd systemd 服务:

    # yum install device-mapper-multipath
  2. 执行以下命令,以创建 /etc/multipath.conf 配置文件,载入 multipath 模块,并将 multipathdchkconfig 设置为 on:

    # mpathconf --enable
  3. 如果 find_multipaths 配置参数未设置为 yes,请编辑 /etc/multipath.conf 文件的 blacklistblacklist_exceptions 部分,如防止设备使用多路径所述。
  4. 要让多路径在发现 root 设备后马上构建多路径设备,请输入以下命令。此命令还可确保 find_multipaths 允许设备,即使它只有一个路径。

    # multipath -a root_devname

    例如,如果 root 设备是 /dev/sdb,请输入以下命令。

    # multipath -a /dev/sdb
    wwid '3600d02300069c9ce09d41c4ac9c53200' added
  5. 执行 multipath 命令并搜索以下格式行的输出,确认您的配置文件设置是否正确。这表示该命令创建多路径设备失败。

    date  wwid: ignoring map

    例如:如果设备的 WWID 是 3600d02300069c9ce09d41c4ac9c53200,您将在输出中看到一行,如下所示:

    # multipath
    Oct 21 09:37:19 | 3600d02300069c9ce09d41c4ac9c53200: ignoring map
  6. 使用 multipath 重建 initramfs 文件系统:

    # dracut --force -H --add multipath
  7. 关闭机器。
  8. 引导机器。
  9. 使其他路径对机器可见。

验证步骤

  • 运行以下命令,检查多路径设备是否已创建:

    # multipath -l | grep 3600d02300069c9ce09d41c4ac9c53200
    mpatha (3600d02300069c9ce09d41c4ac9c53200) dm-0 3PARdata,VV

7.3. 将 swap 文件系统从单一路径设备移动到多路径设备中

默认情况下将 swap 设备设定为逻辑卷。只要您在构成逻辑卷的物理卷中设置了多路径,就不需要将其配置为多路径设备。如果您的 swap 设备不是 LVM 卷,且使用设备名称挂载,您可能需要编辑 /etc/fstab 文件以切换到适当的多路径设备名称。

流程

  1. 将设备的 WWID 添加到 /etc/multipath/wwids 文件中:

    # multipath -a swap_devname

    例如,如果 root 设备是 /dev/sdb,请输入以下命令。

    # multipath -a /dev/sdb
    wwid '3600d02300069c9ce09d41c4ac9c53200' added
  2. 执行 multipath 命令并搜索以下格式行的输出,确认您的配置文件设置是否正确:

    date  wwid: ignoring map

    这表示该命令创建多路径设备失败。

    例如:如果设备的 WWID 是 3600d02300069c9ce09d41c4ac9c53200,您将在输出中看到一行,如下所示:

    # multipath
    Oct 21 09:37:19 | 3600d02300069c9ce09d41c4ac9c53200: ignoring map
  3. /etc/multipath.conf 文件中为交换设备设置别名:

    multipaths {
        multipath {
            wwid WWID_of_swap_device
            alias swapdev
        }
    }
  4. 编辑 /etc/fstab 文件,并使用多路径设备替换到 root 设备的旧设备路径。

    例如,如果您在 /etc/fstab 文件中有以下条目:

    /dev/sdb2 swap                    swap    defaults        0 0

    将条目改为以下内容:

    /dev/mapper/swapdev swap          swap    defaults        0 0
  5. 使用多路径重建 initramfs 文件系统:

    # dracut --force -H --add multipath
  6. 关闭机器。
  7. 引导机器。
  8. 使其他路径对机器可见。

验证步骤

  • 验证 swap 设备是否在多路径设备中:

    # swapon -s

    例如:

    # swapon -s
    
    Filename                Type          Size Used    Priority
    /dev/dm-3               partition     4169724 0    -2

    文件名应与多路径交换设备匹配。

    # readlink -f /dev/mapper/swapdev
    /dev/dm-3

7.4. 使用 dmsetup 命令确定设备映射器条目

您可以使用 dmsetup 命令找出哪个设备映射器条目与多路径设备匹配。

流程

  • 显示所有设备映射器设备及其主号码和副号码。副号码决定 dm 设备的名称。例如:副号码 3 与多路径设备 /dev/dm-3 对应。

    # dmsetup ls
    mpathd  (253:4)
    mpathep1        (253:12)
    mpathfp1        (253:11)
    mpathb  (253:3)
    mpathgp1        (253:14)
    mpathhp1        (253:13)
    mpatha  (253:2)
    mpathh  (253:9)
    mpathg  (253:8)
    VolGroup00-LogVol01     (253:1)
    mpathf  (253:7)
    VolGroup00-LogVol00     (253:0)
    mpathe  (253:6)
    mpathbp1        (253:10)
    mpathd  (253:5)

7.5. 管理 multipathd 守护进程

multipathd 命令可用于管理 multipathd 守护进程。

流程

  • 查看 multipathd show maps 命令的输出的标准默认格式:

    # multipathd show maps
    name sysfs uuid
    mpathc dm-0 360a98000324669436c2b45666c567942
  • 有些 multipathd 命令包括 format 选项,后跟通配符。使用以下命令显示可用通配符列表:

    # multipathd show wildcards
  • 以常规和原始格式显示 multipathd 监控的多路径设备,使用带多路径通配符的格式字符串:

    list|show maps|multipaths format $format
    list|show maps|multipaths raw format $format

    multipathd 命令支持以"raw"格式版本显示多路径设备和路径状态的格式命令。在原始格式中,不会打印标头,且不会添加字段来与标头匹配。相反,字段按照格式字符串中指定的内容完全相同。然后,此输出更易于用于脚本编写。您可以使用 multipathd show wildcard 命令显示格式字符串使用的通配符。

  • 使用带有多路径通配符的格式字符串显示 multipathd 监控的路径,使用常规和 raw 格式:

    list|show paths format $format
    list|show paths raw format $format
  • 显示 multipathd show maps 的非原始格式和原始格式之间的差别。请注意,采用 raw 格式的标头和列之间只能有一个空格:

    # multipathd show maps format "%n %w %d %s"
    name   uuid                              sysfs vend/prod/rev
    mpathc 360a98000324669436c2b45666c567942 dm-0  NETAPP,LUN
    
    # multipathd show maps raw format "%n %w %d %s"
    mpathc 360a98000324669436c2b45666c567942 dm-0 NETAPP,LUN

其他资源

  • multipathd(8)man page

第 8 章 删除存储设备

您可以从正在运行的系统中安全地删除存储设备,这有助于防止系统内存过载和数据丢失。

先决条件

  • 在删除存储设备前,您必须确定您在 I/O 清除过程中因为系统内存负载增加而您有足够的可用内存。使用以下命令查看系统的当前内存负载和可用内存:

    # vmstat 1 100
    # free
  • 红帽不推荐在以下系统中删除存储设备:

    • 空闲内存低于内存总量的 5%,每 100 个超过 10 个样本。
    • 交换是活跃的(在 vmstat 命令的输出中非零的 siso 列)。

8.1. 安全删除存储设备

从正在运行的系统中安全地删除存储设备需要顶级的方法。从顶层(通常是应用程序或文件系统)开始,并在底层(即物理设备)上工作。

您可以通过多种方式使用存储设备,它们可以在物理设备之上有不同的虚拟配置。例如:您可以将设备的多个实例分组到多路径设备中,使其成为 RAID 的一部分,或者您可以将其成为 LVM 组的一部分。此外,设备可以通过文件系统访问,或者可以直接访问设备,如"原始"设备。

使用 top-to-bottom 方法时,您必须确保:

  • 要删除的设备没有被使用
  • 对该设备的所有待处理的 I/O 都会被清除
  • 操作系统无法引用存储设备

8.2. 删除块设备

您可以从正在运行的系统中安全地删除块设备,以帮助防止系统内存过载和数据丢失。

警告

重新扫描 SCSI 总线或执行更改操作系统状态的其他操作,而无需遵循这个流程,因为 I/O 超时、设备被意外删除或数据丢失。

先决条件

  • 如果您要删除多路径设备,且您无法访问其路径设备,请禁用多路径设备的队列:

    # multipathd disablequeueing map multipath-device

    这可让设备的 I/O 失败,允许使用该设备的应用程序关闭。

  • 确定没有其他应用程序或服务正在使用您要删除的设备。
  • 请确定从您要删除的设备备份数据。

流程

  1. 使用 umount 命令卸载该设备上挂载的任何文件系统。
  2. 从任何 MD RAID 阵列或者它所属的 LVM 卷中删除该设备。根据设备类型,执行以下步骤之一:

    • 如果该设备是 LVM 组的成员,且它是一个多路径设备:

      1. 将数据移动到另一个设备中:

        # pvmove -b /dev/mapper/from-multipath-device /dev/mapper/to-multipath-device
      2. 从卷组中删除该设备:

        # vgreduce volume-group /dev/mapper/from-multipath-device
      3. 可选:从物理设备中删除 LVM 元数据:

        # pvremove /dev/mapper/from-multipath-device
    • 如果您要删除多路径设备,请执行以下命令:

      1. 查看该设备的所有路径:

        # multipath -l

        稍后需要这个命令的输出。

      2. 清除 I/O 并删除多路径设备:

        # multipath -f multipath-device
    • 如果该设备没有配置为多路径设备,或者设备配置为多路径设备,并且您之前将 I/O 传递给单个路径,请将任何未完成的 I/O 刷新到所有使用的设备路径:

      # blockdev --flushbufs device

      对于直接访问的设备非常重要,umountvgreduce 命令不会清除 I/O。

    • 如果您要删除 SCSI 设备,请执行以下命令:

      1. 删除对基于路径的设备名称的任何引用,如 /dev/sd/dev/disk/by-pathmajor:minor number(在系统上的应用程序、脚本或工具中)。这样可保证以后添加的不同设备不会为当前的设备错误。
      2. 从 SCSI 子系统中删除该设备的每个路径:

        # echo 1 > /sys/block/device-name/device/delete

        其中 device-namemultipath -l 命令的输出中检索(如果之前用作多路径设备)。

  3. 从正在运行的系统中删除物理设备。请注意,当您删除此设备时,I/O 到其它设备不会停止。

其他资源

  • multipath(8)、 pvmove(8)、 vgreduce(8)、 blockdev(8)umount(8) man page。

第 9 章 DM 多路径故障排除

如果您在进行多路径配置时遇到问题,您可以检查这些问题。以下问题可能会导致多路径配置缓慢或无法正常工作:

多路径守护进程没有运行
如果您在进行多路径配置时遇到问题,请确保 multipathd 守护进程正在运行,如设置 DM 多路径 中所述。multipathd 守护进程必须正在运行,才能使用多路径设备。
queue_if_no_path 功能的问题
如果使用 "1 queue_if_no_path" 选项配置多路径设备,那么在恢复一个或多个路径前,任何问题 I/O 的进程都会挂起。

9.1. 对 queue_if_no_path 功能的问题进行故障排除

如果使用 "1 queue_if_no_path" 选项配置多路径设备,那么在恢复一个或多个路径前,任何问题 I/O 的进程都会挂起。要避免这种情况,请在 /etc/multipath.conf 文件中设置 no_path_retry N 参数,其中 N 是系统应该重试路径的次数。

如果您需要使用 "1 queue_if_no_path" 选项,并遇到这个问题,您可以在运行时为特定 LUN 禁用队列策略,以便所有路径都不可用。

流程

  • 禁用特定设备的队列:

    # multipathd disablequeueing map device
  • 禁用所有设备的队列:

    # multipathd disablequeueing maps

禁用某个设备队列后,它将保持禁用,直到 multipathd 重新启动或重新加载,或直至您执行以下命令之一:

  • 为特定设备重置队列到以前的值:

    # multipathd restorequeueing map device
  • 为所有设备重置队列到以前的值:

    # multipathd restorequeueing maps

9.2. 使用 multipathd 互动控制台进行故障排除

multipathd -k 命令是 multipathd 守护进程的互动接口。执行此命令将进入互动的多路径控制台。执行此命令后,您可以输入 help 来获取可用命令列表,Ctrl+D 退出。

使用 multipathd 互动控制台来对与您的系统相关的问题进行故障排除。

流程

  • 在退出控制台前显示多路径配置,包括默认设置:

    # multipathd -k
    multipathd> show config
    multipathd> Ctrl+D
  • 确定多路径已获取对 multipath.conf 文件的任何更改:

    # multipathd -k
    multipathd> reconfigure
    multipathd> Ctrl+D
  • 确保路径检查程序正常工作:

    # multipathd -k
    multipathd> show paths
    multipathd> Ctrl+D
  • 您也可以直接从命令行运行单个 multipathd 交互式命令,而无需启动交互式控制台。例如,要检查多路径是否已获取对 multipath.conf 文件的任何更改,请运行:

    # multipathd reconfigure

第 10 章 使用 eh_deadline 配置存储错误恢复的最大时间

您可以配置最大允许的时间来恢复失败的 SCSI 设备。这个配置保证了 I/O 响应时间,即使存储硬件因为失败而变得无响应。

10.1. eh_deadline 参数

SCSI 错误处理(EH)机制尝试在失败的 SCSI 设备上执行错误恢复。SCSI 主机对象 eh_deadline 参数允许您配置恢复的最大时间。配置的时间过期后,SCSI EH 会停止并重置整个主机总线适配器(HBA)。

使用 eh_deadline 可以缩短时间:

  • 关闭失败的路径,
  • 切换路径,或者
  • 禁用 RAID 分片。
警告

eh_deadline 过期时,SCSI EH 会重置 HBA,这会影响那个 HBA 中的所有目标路径,而不仅仅是故障。如果由于其他原因无法使用冗余路径,则可能会出现 I/O 错误。仅在所有目标中有完全冗余的多路径配置时才启用 eh_deadline

eh_deadline 参数的值以秒为单位指定。默认设置为 off,它会禁用时间限制并允许进行所有错误恢复。

eh_deadline 很有用的情况

在大多数情况下,您不需要启用 eh_deadline。在某些特定场景中,使用 eh_deadline 非常有用。例如,如果在光纤通道(FC)交换机和目标端口之间发生链接丢失,且 HBA 没有收到 Registered State Change Notifications(RSCN)。在这种情况下,I/O 请求和错误恢复命令会超时,而不是遇到错误。在这个环境中设置 eh_deadline 会针对恢复时间设置上限。这可让失败的 I/O 在由 DM 多路径的另一个可用路径中检索。

在以下条件下,eh_deadline 参数不提供额外的好处,因为 I/O 和错误恢复命令会立即失败,这会导致 DM 多路径重试:

  • 如果启用了 RSCN
  • 如果 HBA 没有注册链接不可用

10.2. 设置 eh_deadline 参数

这个过程配置 eh_deadline 参数的值来限制最大 SCSI 恢复时间。

流程

  • 您可以使用以下方法之一配置 eh_deadline

    • multpath.conf 文件的 defaults 部分

      multpath.conf 文件的 defaults 部分,将 eh_deadline 参数设置为所需的秒数:

      # eh_deadline 300
      注意

      在 RHEL 8.4 中,使用 multpath.conf 文件的 defaults 部分设置 eh_deadline 参数是首选的方法。

      要使用此方法关闭 eh_deadline 参数,请将 eh_deadline 设置为 off

    • sysfs

      将秒数写入 /sys/class/scsi_host/host<host-number>/eh_deadline 文件中。例如,要在 SCSI 主机 6 上通过 sysfs 设置 eh_deadline 参数:

      # echo 300 > /sys/class/scsi_host/host6/eh_deadline

      要使用此方法关闭 eh_deadline 参数,请使用 echo off

    • 内核参数

      使用 scsi_mod.eh_deadline 内核参数为所有 SCSI HBA 设置默认值。

      # echo 300 > /sys/module/scsi_mod/parameters/eh_deadline

      要使用此方法关闭 eh_deadline 参数,请使用 echo -1