Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

6.7. 为多路径设备重复 PV Warning

当将 LVM 与多路径存储搭配使用时,一些 LVM 命令(如 vgslvchange)可能会在列出卷组或逻辑卷时显示如下信息。
Found duplicate PV GDjTZf7Y03GJHjteqOwrye2dcSCjdaUi: using /dev/dm-5 not /dev/sdd
Found duplicate PV GDjTZf7Y03GJHjteqOwrye2dcSCjdaUi: using /dev/emcpowerb not /dev/sde
Found duplicate PV GDjTZf7Y03GJHjteqOwrye2dcSCjdaUi: using /dev/sddlmab not /dev/sdf
在为这些警告提供 root 原因信息后,本节描述了如何在以下两个情况下解决这个问题。
  • 输出中显示的两个设备都是指向同一设备的单一路径
  • 输出中显示的两个设备都是多路径映射

6.7.1. Duplicate PV Warning 的根本原因

使用默认配置,LVM 命令将扫描 /dev 中的设备,并检查每个生成的 LVM 元数据设备。这是因为 /etc/lvm/lvm.conf 中的默认过滤器(如下所示):
filter = [ "a/.*/" ]
当使用设备映射器多路径或其他多路径软件(如 EMC PowerPath 或 Hitachi Dynamic Link Manager (HDLM))时,特定逻辑单元号(LUN)的每个路径都会作为不同的 SCSI 设备注册,如 /dev/sdb/dev/sdc。然后,多路径软件会创建一个映射到这些独立路径的新设备,如 /dev/mapper/mpath1/dev/mapper/mpatha 用于设备映射器多路径,/dev/emcpowera 用于 EMC PowerPath,或用于 Hitachi HDLM 的 /dev/sddlmab。由于每个 LUN 在 /dev 中有多个指向同一底层数据的设备节点,所以它们都包含相同的 LVM 元数据,因此 LVM 命令会多次找到相同的元数据,并将其报告为重复。
这些重复的信息只是警告,并不意味着 LVM 操作失败。相反,它们会被提醒用户,只有其中一个设备被用作物理卷,而其他设备将被忽略。如果消息表示选择不正确的设备或者向用户有破坏性的警告,则可以应用过滤器来仅搜索物理卷所需的设备,并为多路径设备发出任何基础路径。

6.7.2. 单一路径的重复警告

以下示例显示了一个重复的 PV 警告,其中显示重复的设备是同一设备的单一路径。在这种情况下,/dev/sdd/dev/sdf 可以在输出中的同一多路径映射中找到到 multipath -ll 命令。
Found duplicate PV GDjTZf7Y03GJHjteqOwrye2dcSCjdaUi: using **/dev/sdd** not **/dev/sdf**
要防止这个警告出现,您可以在 /etc/lvm/lvm.conf 文件中配置过滤器来限制 LVM 将搜索元数据的设备。该过滤器是一个模式列表,它将应用于通过 /dev 扫描找到的每个设备(或 /etc/lvm/lvm.conf 文件中的 dir 关键字指定的目录)。模式是以任何字符分隔的正则表达式,前面带有 (用于接受)或 r (用于拒绝)。该列表按顺序遍历,第一个与设备匹配的正则表达式决定了设备是否被接受或拒绝(忽略)。与任何模式不匹配的设备会被接受。有关 LVM 过滤器的常规信息,请参考 第 4.5 节 “使用过滤器控制 LVM 设备扫描”
您配置的过滤器应包括需要检查 LVM 元数据的所有设备,比如使用根卷组以及所有多路径设备的本地硬盘驱动器。通过拒绝到多路径设备的底层路径(如 /dev/sdb/dev/sdd 等等),您可以避免这些重复的 PV 警告,因为每个唯一元数据区域只在多路径设备本身中找到一次。
以下示例显示了因为有多个存储路径而避免重复的 PV 警告的过滤器。
  • 这个过滤器接受第一个硬盘上的第二个分区(/dev/sda 和任何 device-mapper-multipath 设备),同时拒绝所有其他分区。
    filter = [ "a|/dev/sda2$|", "a|/dev/mapper/mpath.*|", "r|.*|" ]
    
  • 这个过滤器接受所有 HP SmartArray 控制器和任何 EMC PowerPath 设备。
    filter = [ "a|/dev/cciss/.*|", "a|/dev/emcpower.*|", "r|.*|" ]
    
  • 这个过滤器接受第一个 IDE 驱动器以及所有多路径设备中的任何分区。
    filter = [ "a|/dev/hda.*|", "a|/dev/mapper/mpath.*|", "r|.*|" ]
    
注意
/etc/lvm/lvm.conf 文件中添加新过滤器时,请确保原始过滤器使用 # 或被注释掉。
配置过滤器并且保存了 /etc/lvm/lvm.conf 文件后,检查这些命令的输出以确保没有缺少物理卷或卷组。
# pvscan
# vgscan
您还可以通过将 --config 参数添加到 LVM 命令中,而无需修改 /etc/lvm/lvm.conf 文件,而无需修改 /etc/lvm/lvm.conf 文件,如下例所示。
# lvs --config 'devices{ filter = [ "a|/dev/emcpower.*|", "r|.*|" ] }'
注意
使用 --config 参数测试过滤器不会对服务器的配置进行永久更改。在测试后,请确保将正常工作的过滤器包含在 /etc/lvm/lvm.conf 文件中。
配置 LVM 过滤器后,建议您使用 dracut 命令重建 initrd 设备,以便在重启后只扫描必要的设备。

6.7.3. 多路径映射重复警告

以下示例显示两个设备都有重复的 PV 警告,它们是多路径映射。在这些示例中,我们不会查看两个不同的路径,而是两个不同的设备。
Found duplicate PV GDjTZf7Y03GJHjteqOwrye2dcSCjdaUi: using **/dev/mapper/mpatha** not **/dev/mapper/mpathc**
Found duplicate PV GDjTZf7Y03GJHjteqOwrye2dcSCjdaUi: using **/dev/emcpowera** not **/dev/emcpowerh**
对于同一设备到同一设备的设备来说,这种情况比重复的警告更加严重,因为这些警告通常意味着机器已呈现出不应看到的设备(例如 LUN 克隆或镜像)。在这种情况下,除非您了解了应该从机器中删除哪些设备,否则这种情况可以被不可恢复。建议您联系红帽技术支持来解决这个问题。