声明规则会确定哪个多路径模块拥有通往特定存储设备的路径。他们也定义了主机向设备提供的多路径支持的类型。

要了解有关多路径模块的更多信息,请参见多路径概念和缩写

声明规则在主机的 /etc/vmware/esx.conf 文件中列出。

这些规则分为以下几类:
  • 核心声明规则。这些声明规则会确定 NMP、HPP 或第三方 MPP 中的哪个多路径模块为特定设备提供声明。
  • SATP 声明规则。根据设备类型,这些规则会分配特定 SATP 子模块,为设备提供特定于供应商的多路径管理。

您可以使用 esxcli 命令添加或更改核心和 SATP 声明规则。通常情况下,您要添加声明规则以加载第三方 MPP,或从主机中隐藏 LUN。如果特定设备的默认设置不足,则可能需要更改声明规则。

有关可用于管理 PSA 声明规则的命令的详细信息,请参见《ESXCLI 入门》

有关存储阵列和相应的 SATP 和 PSP 的列表,请参见以下文档的“存储/SAN”一节:vSphere Compatibility Guide

多路径注意事项

管理存储多路径插件和声明规则时,需考虑一些特定的注意事项。

以下注意事项可帮助您使用多路径:

  • 如果声明规则未将任何 SATP 分配给设备,则 iSCSI 或 FC 设备的默认 SATP 将是 VMW_SATP_DEFAULT_AA。默认 PSP 是 VMW_PSP_FIXED。
  • 当系统搜索 SATP 规则以查找给定设备的 SATP 时,会首先搜索驱动程序规则。如果没有匹配项,则搜索供应商/型号规则,最后搜索传输规则。如果未出现匹配项,NMP 将选择设备的默认 SATP。
  • 如果已将 VMW_SATP_ALUA 分配给某特定存储设备,但该设备不能识别 ALUA,则该设备将没有任何匹配的声明规则。设备将由默认 SATP 根据设备的传输类型进行声明。
  • 由 VMW_SATP_ALUA 声明的所有设备的默认 PSP 是 VMW_PSP_MRU。VMW_PSP_MRU 选择由 VMW_SATP_ALUA 报告的主动/优化的路径,如果没有主动/优化的路径,则选择主动/未优化的路径。在有更好的路径可用 (MRU) 之前,将一直使用此路径。例如,如果 VMW_PSP_MRU 当前正在使用主动/未优化的路径,那么,当主动/优化的路径变为可用时,VMW_PSP_MRU 会将当前路径切换到主动/优化的路径。
  • 尽管默认情况下通常为 ALUA 阵列选择 VMW_PSP_MRU,但某些 ALUA 存储阵列仍需使用 VMW_PSP_FIXED。要查看存储阵列是否需要使用 VMW_PSP_FIXED,请参阅《VMware 兼容性指南》或联系存储供应商。如果将 VMW_PSP_FIXED 用于 ALUA 阵列,则除非明确指定首选路径,否则 ESXi 主机将选择最优的工作路径,并将其指定为默认首选路径。如果主机选择的路径不可用,主机将选择替代的可用路径。但如果您明确指定首选路径,则无论其为何状态,都将始终为首选路径。
  • 默认情况下,PSA 声明规则 101 会屏蔽 Dell 阵列伪设备。除非您要取消屏蔽这些设备,否则请不要删除此规则。

列出主机的多路径声明规则

使用 esxcli命令可列出可用的多路径声明规则。

声明规则指出是 NMP、HPP 还是第三方 MPP 管理给定的物理路径。每个声明规则基于以下参数标识一组路径:

  • 供应商/型号字符串
  • 传输,如 SATA、IDE、光纤通道
  • 适配器、目标或 LUN 位置
  • 设备驱动程序(如 Mega-RAID)

过程

  • 通过运行 esxcli storage core claimrule list --claimrule-class=MP 命令来列出多路径声明规则。
    如果不使用 claimrule-class选项,则隐含 MP 规则类。

示例: esxcli storage core claimrule list 命令的示例输出

Rule Class  Rule   Class    Type       Plugin     Matches
MP           10    runtime  vendor     HPP        vendor=NVMe model=*              
MP           10    file     vendor     HPP        vendor=NVMe model=*              
MP           50    runtime  transport  NMP        transport=usb
MP           51    runtime  transport  NMP        transport=sata
MP           52    runtime  transport  NMP        transport=ide
MP           53    runtime  transport  NMP        transport=block
MP           54    runtime  transport  NMP        transport=unknown
MP          101    runtime  vendor     MASK_PATH  vendor=DELL model=Universal Xport
MP          101    file     vendor     MASK_PATH  vendor=DELL model=Universal Xport
MP          200    runtime  vendor     MPP_1      vendor=NewVend model=* 
MP          200    file     vendor     MPP_1      vendor=NewVend model=* 
MP          201    runtime  location   MPP_2      adapter=vmhba41 channel=* target=* lun=* 
MP          201    file     location   MPP_2      adapter=vmhba41 channel=* target=* lun=* 
MP          202    runtime  driver     MPP_3      driver=megaraid 
MP          202    file     driver     MPP_3      driver=megaraid 
MP          65535  runtime  vendor     NMP        vendor=* model=*
此示例表示以下内容:
  • NMP 声明与使用 USB、SATA、IDE 和块 SCSI 传输的存储设备相连的所有路径。
  • 已添加 HPP、MPP_1、MPP_2 和 MPP_3 规则,以便模块可声明指定设备。例如,HPP 声明供应商为 NVMe 的所有设备。无论实际供应商如何,所有由内置的 nvme 驱动程序处理的设备均已声明。MPP_1 模块声明与任何型号 NewVend 存储阵列相连的所有路径。
  • 可以使用 MASK_PATH 模块隐藏主机中未使用的设备。默认情况下,PSA 声明规则 101 会屏蔽供应商字符串为 DELL且型号字符串为 Universal Xport 的 Dell 阵列伪设备。
  • 输出中的“Rule Class”列说明声明规则的类别。类别可以是 MP(多路径插件)、Filter 或 VAAI。
  • “Class”列显示已定义的规则和已加载的规则。“Class”列中的file参数表示规则已定义。runtime参数表示规则已被加载到系统中。为了激活用户定义的声明规则,必须存在两个具有相同规则编号的行,一行是具有 file参数的规则,另一行是具有runtime 的规则。几个默认系统定义的声明规则只有一行,其“Class”为runtime。您无法修改这些规则。
  • 默认规则 65535 将所有空闲路径分配给 NMP。请勿删除此规则。

添加多路径声明规则

使用 esxcli 命令将多路径 PSA 声明规则添加到系统上的一组声明规则。为了激活新声明规则,请先定义规则,然后将其加载到系统中。

下面是一些添加 PSA 声明规则的示例:
  • 加载新的第三方 MPP 并且必须定义此模块声明的路径。
  • 您必须启用本机 HPP。
警告: 您不能在两个不同的插件声明路径指向同一设备的情况下创建规则。尝试创建这些声明规则失败, vmkernel.log 中会显示警告。

前提条件

安装 ESXCLI。请参见《ESXCLI 入门》。要进行故障排除,请在 ESXi Shell中运行 esxcli 命令。

过程

  1. 要定义新声明规则,请使用以下命令:
    esxcli storage core claimrule add

    该命令采用以下选项:

    选项 描述
    -A|--adapter=<adapter> 要使用的路径适配器。仅当 --typelocation 时才有效。
    -u|--autoassign 根据声明特性添加声明规则。规则编号并非必填项。
    -C|--channel=<channel> 要使用的路径通道。仅当 --typelocation 时才有效。
    -c|--claimrule-class=<cl> 此操作中要使用的声明规则类。您可以指定 MP(默认值)、FilterVAAI

    要为新的阵列配置硬件加速,请添加两个声明规则:一个用于 VAAI 筛选器,另一个用于 VAAI 插件。有关详细说明,请参见添加硬件加速声明规则

    -d|--device=<device_uid> 设备 UID。仅当 --typedevice 时才有效。
    -D|--driver=<driver> 要使用的路径 HBA 的驱动程序。仅当 --typedriver 时才有效。
    -f|--force 强制声明规则在任何情况下均忽略有效性检查并安装规则。
    --force-reserved 替代对预留规则 ID 范围的保护。

    预留声明规则是指 ID 小于 100 的规则。您可以使用它们将本地设备重新分配给特定的插件,例如将 NVMe 设备重新分配给 HPP。

    --if-unset=<str> 如果此高级用户变量未设置为 1,请运行该命令。
    -i|--iqn=<iscsi_name> 目标的 iSCSI 限定名称。仅当 --typetarget 时才有效。
    -L|--lun=<lun_id> 路径的 LUN。仅当 --typelocation 时才有效。

    LUN ID 不得高于高级配置选项 /Disk/MaxLUN 的值。

    -M|--model=<model> 要使用的路径型号。仅当 --typevendor 时才有效。

    有效值是 SCSI 查询字符串中的型号字符串的值。在每台设备上运行 vicfg-scsidevs <conn_options> -l 以查看型号字符串值。

    -P|--plugin=<plugin> 要使用的 PSA 插件。值为 NMPMASK_PATHHPP。第三方还可以提供自己的 PSA 插件。必需。
    -r|--rule=<rule_ID> 要使用的规则 ID。规则 ID 指示声明规则的评估顺序。用户定义的声明规则按照从 101 开始的数字顺序进行评估。

    您可以运行 esxcli storage core claimrule list 以确定哪些规则 ID 可用。

    -T|--target=<target> 要使用的路径目标。仅当 --typelocation 时才有效。
    -R|--transport=<transport>

    要使用的路径传输。仅当 --typetransport 时才有效。支持以下值。

    • block — 块存储
    • fc — 光纤通道
    • iscsivendor — iSCSI
    • iscsi — 当前未使用
    • ide — IDE 存储
    • sas — SAS 存储
    • sata — SATA 存储
    • usb — USB 存储
    • parallel — 并行
    • fcoe — FCoE
    • unknown
    -t|--type=<type> 用于操作的匹配类型。以下为有效值。必需。
    • vendor
    • location
    • driver
    • transport
    • device
    • target
    -V|--vendor=<vendor> 要使用的路径供应商。仅当 --typevendor 时才有效。

    有效值是 SCSI 查询字符串中的供应商字符串的值。在每台设备上运行 vicfg-scsidevs <conn_options> -l 以查看供应商字符串值。

    --wwnn=<wwnn> 目标的全球节点编号。
    --wwpn=<wwpn> 目标的全球端口编号。
    -a|--xcopy-use-array-values 使用阵列报告的值来构建要发送到存储阵列的 XCOPY 命令。这仅适用于 VAAI 声明规则。
    -s|--xcopy-use-multi-segs 当发出 XCOPY 请求时,使用多个分段。仅当指定 --xcopy-use-array-values 时才有效。
    -m|--xcopy-max-transfer-size 使用不同于阵列所报告的传输大小时的最大数据传输大小 (MB)。仅当指定 --xcopy-use-array-values 时才有效。
    -k|--xcopy-max-transfer-size-kib 使用不同于阵列所报告的传输大小时 XCOPY 命令的最大传输大小 (KiB)。仅当指定 --xcopy-use-array-values 时才有效。
  2. 要将新声明规则加载到系统中,请使用以下命令:
    esxcli storage core claimrule load
    此命令会将 esx.conf 配置文件中所有新创建的多路径声明规则加载到 VMkernel 中。该命令没有选项。
  3. 要应用加载的声明规则,请使用以下命令:
    esxcli storage core claimrule run

    该命令采用以下选项:

    选项 描述
    -A|--adapter=<adapter> 如果 --typelocation,表示在其上运行声明规则的路径的 HBA 名称。要从所有适配器的路径上运行声明规则,请忽略此选项。
    -C|--channel=<channel> 如果 --typelocation,表示要在此操作中使用的路径通道。要在含任何通道号的路径上运行声明规则,请忽略此选项。
    -c|--claimrule-class=<cl> 此操作中要使用的声明规则类。
    -d|--device=<device_uid> 设备 UID。
    -L|--lun=<lun_id> 如果 --typelocation,表示在其上运行声明规则的路径的 LUN。要在含任何 LUN 的路径上运行声明规则,请忽略此选项。
    -p|--path=<path_uid> 如果 --typepath,则此选项指示唯一路径标识符 (UID) 或在其上运行声明规则的路径的运行时名称。
    -T|--target=<target> 如果 --typelocation,表示在其上运行声明规则的路径的目标。要在含任何目标编号的路径上运行声明规则,请忽略此选项。
    -t|--type=<location|path|all> 要执行的声明类型。默认情况下,将使用 all,这意味着在不限于特定路径的情况下运行声明规则。有效值为 locationpathall
    -w|--wait 仅当还使用了 --type all 时才可以使用此选项。

    如果包括此选项,则声明将等待路径进入稳定状态后,再运行声明操作。在这种情况下,只有在开始声明过程之前系统上的所有路径都出现后,系统才会启动声明过程。

    声明过程开始后,该命令在设备注册完成后返回。

    如果在声明或发现过程中添加或移除路径,则此选项可能无法正常工作。

示例: 定义多路径声明规则

在以下示例中,将添加并加载编号为 500 的规则。此规则为 NMP 插件声明型号字符串为 NewMod 以及供应商字符串为 NewVend 的所有路径。

# esxcli storage core claimrule add -r 500 -t vendor -V NewVend -M NewMod -P NMP

# esxcli storage core claimrule load

运行 esxcli storage core claimrule list 命令之后,可以看到新的声明规则显示在列表中。

以下输出表明编号为 500 的声明规则已加载到系统中,并处于活动状态。
Rule Class  Rule   Class    Type       Plugin     Matches
...         ...    ...      ...        ...        ...
MP          500    runtime  vendor     NMP        vendor=NewVend model=NewMod  
MP          500    file     vendor     NMP        vendor=NewVend model=NewMod 

删除多路径声明规则

使用 esxcli命令将多路径 PSA 声明规则从系统上的一组声明规则中移除。

前提条件

安装 ESXCLI。请参见《ESXCLI 入门》。要进行故障排除,请在 ESXi Shell中运行 esxcli 命令。

过程

  1. 从声明规则集中删除声明规则。
    esxcli storage core claimrule remove
    注: 默认情况下,PSA 声明规则 101 会屏蔽 Dell 阵列伪设备。除非您要取消屏蔽这些设备,否则请不要删除此规则。

    该命令采用以下选项:

    选项 描述
    -c|--claimrule-class=<str>

    表示声明规则类(MP、筛选器和 VAAI)。

    -P|--plugin=<str> 表示插件。
    -r|--rule=<long> 表示规则 ID。
    此步骤将从“文件”类中移除声明规则。
  2. 从系统移除声明规则。
    esxcli storage core claimrule load
    此步骤将从“运行时”类中移除声明规则。

屏蔽路径

可以阻止主机访问存储设备或 LUN,或阻止其使用指向某个 LUN 的单个路径。使用 esxcli 命令可屏蔽路径。屏蔽路径时,请创建声明规则,该规则将 MASK_PATH 插件分配给指定路径。

前提条件

安装 ESXCLI。请参见《ESXCLI 入门》。要进行故障排除,请在 ESXi Shell中运行 esxcli 命令。

过程

  1. 检查下一个可用的规则 ID 是多少。
    esxcli storage core claimrule list
    用于屏蔽路径的声明规则的规则 ID 在 101 – 200 范围内。如果此命令显示规则 101 和 102 已经存在,您可以指定 103 来添加规则。
  2. 通过为 MASK_PATH 插件创建新声明规则,将该插件分配给某个路径。
    esxcli storage core claimrule add -P MASK_PATH
  3. 将 MASK_PATH 声明规则加载到系统中。
    esxcli storage core claimrule load
  4. 验证是否正确添加了 MASK_PATH 声明规则。
    esxcli storage core claimrule list
  5. 如果存在已屏蔽路径的声明规则,则将规则移除。
    esxcli storage core claiming unclaim
  6. 运行路径声明规则。
    esxcli storage core claimrule run

结果

在将 MASK_PATH 插件分配给路径之后,路径状态变为不相关,且不再由主机进行维护。因此,显示屏蔽路径信息的命令可能将路径状态显示为失效。

示例: 屏蔽 LUN

在此示例中,屏蔽目标 T1 和 T2 上通过存储适配器 vmhba2 和 vmhba3 访问的 LUN 20。

  1. #esxcli storage core claimrule list
  2. #esxcli storage core claimrule add -P MASK_PATH -r 109 -t location -A vmhba2 -C 0 -T 1 -L 20 
    #esxcli storage core claimrule add -P MASK_PATH -r 110 -t location -A vmhba3 -C 0 -T 1 -L 20 
    #esxcli storage core claimrule add -P MASK_PATH -r 111 -t location -A vmhba2 -C 0 -T 2 -L 20 
    #esxcli storage core claimrule add -P MASK_PATH -r 112 -t location -A vmhba3 -C 0 -T 2 -L 20
  3. #esxcli storage core claimrule load
  4. #esxcli storage core claimrule list
  5. #esxcli storage core claiming unclaim -t location -A vmhba2 
    #esxcli storage core claiming unclaim -t location -A vmhba3
  6. #esxcli storage core claimrule run

取消路径屏蔽

当需要主机访问被屏蔽的存储设备时,请取消对该设备路径的屏蔽。

注: 使用设备属性(例如设备 ID 或供应商)运行取消声明操作时,不会取消声明 MASK_PATH 插件声明的路径。MASK_PATH 插件不会跟踪其声明的路径的任何设备属性。

前提条件

安装 ESXCLI。请参见《ESXCLI 入门》。要进行故障排除,请在 ESXi Shell中运行 esxcli 命令。

过程

  1. 删除 MASK_PATH 声明规则。
    esxcli storage core claimrule remove -r rule#
  2. 验证是否正确删除了此声明规则。
    esxcli storage core claimrule list
  3. 将配置文件中的路径声明规则重新加载到 VMkernel 中。
    esxcli storage core claimrule load
  4. 对于每个指向被屏蔽的存储设备的路径,运行 esxcli storage core claiming unclaim 命令。
    例如:

    esxcli storage core claiming unclaim -t location -A vmhba0 -C 0 -T 0 -L 149

  5. 运行路径声明规则。
    esxcli storage core claimrule run

结果

您的主机即可访问之前被屏蔽的存储设备。

定义 NMP SATP 规则

NMP SATP 声明规则定义存储设备由哪些 SATP 来管理。通常情况下,您可以使用为存储设备提供的默认 SATP。如果默认设置不充足,请使用 esxcli命令更改特定设备的 SATP。

当安装特定存储阵列的第三方 SATP 时,可能需要创建一条 SATP 规则。

前提条件

安装 ESXCLI。请参见《ESXCLI 入门》。要进行故障排除,请在 ESXi Shell中运行 esxcli 命令。

过程

  1. 要添加特定 SATP 的声明规则,请运行 esxcli storage nmp satp rule add 命令。该命令采用以下选项。
    选项 描述
    -b|--boot 此规则是在引导时添加的系统默认规则。请勿修改 esx.conf 或添加到主机配置文件。
    -c|--claim-option=string 添加 SATP 声明规则时设置声明选项字符串。
    -e|--description=string 添加 SATP 声明规则时设置声明规则描述。
    -d|--device=string 添加 SATP 声明规则时设置设备。设备规则与供应商/型号规则和驱动程序规则互斥。
    -D|--driver=string 添加 SATP 声明规则时设置驱动程序字符串。驱动程序规则与供应商/型号规则互斥。
    -f|--force 强制声明规则在任何情况下均忽略有效性检查并安装规则。
    -h|--help 显示帮助消息。
    -M|--model=string 添加 SATP 声明规则时设置型号字符串。供应商/型号规则与驱动程序规则互斥。
    -o|--option=string 添加 SATP 声明规则时设置选项字符串。
    -P|--psp=string 设置 SATP 声明规则的默认 PSP。
    -O|--psp-option=string 设置 SATP 声明规则的 PSP 选项。
    -s|--satp=string 为其添加新规则的 SATP。
    -R|--transport=string 添加 SATP 声明规则时设置声明传输类型字符串。
    -t|--type=string 添加 SATP 声明规则时设置声明类型。
    -V|--vendor=string 添加 SATP 声明规则时设置供应商字符串。供应商/型号规则与驱动程序规则互斥。
    注: 当搜索 SATP 规则以查找给定设备的 SATP 时,NMP 会首先搜索驱动程序规则。如果没有匹配项,则搜索供应商/型号规则,最后搜索传输规则。如果仍然没有匹配项,NMP 将选择设备的默认 SATP。
  2. 重新引导主机。

示例: 定义 NMP SATP 规则

以下示例命令将分配 VMW_SATP_INV 插件以管理供应商字符串为 NewVend 和型号字符串为 NewMod 的存储阵列。

# esxcli storage nmp satp rule add -V NewVend -M NewMod -s VMW_SATP_INV

运行 esxcli storage nmp satp list -s VMW_SATP_INV 命令时,您可以看到新规则已位于 VMW_SATP_INV 规则列表中。