Duplicate PV Warnings for Multipathed Devices

SYMPTOMS

存储 LUN 做 LVM,执行 pvs 命令时,出现如下报错:

~]# pvs
Found duplicate PV gdJ3qQtqoOjwZs2dtFw9vP0zIpz0HQhj: using /dev/sdba not /dev/emcpowerai
Found duplicate PV 8jLc3hNNwiSnGz4fEEasw8PQwthrGBpO: using /dev/sdbq not /dev/emcpowers
Found duplicate PV BY29XsIxW1I4LUOcoqAepnG7eGUcPxZl: using /dev/emcpoweru not /dev/sdbo

CAUSE

在默认配置下,LVM 对所有磁盘进行扫描,以确定哪一块上面包含 PV。如果使用了 device-mapper-multipath 或其他多路径软件如 EMC PowerPath 或 Hitachi Dynamic Link Manager (HDLM),那么对于每一个 LUN 的每一条路径就注册成为一个不同的 SCSI 设备。如 /dev/sdb,/dev/sdc,等等。多路径软件之后会创建一个新的设备映射到这些路径如:/dev/mapper/mpath1 (device-mapper-multipath),/dev/emcpowerb (EMC PowerPath),或 /dev/sddlmab (HDLM)。由于每一个设备都指向同一个 LUN,所以它们都包含相同的 LVM 元数据,因此在扫描时显示为 duplicate。运行任何 LVM 命令,都会出现重复 PV 告警。

SOLUTION

要确保 LVM 只扫描想要的多路径设备而不是单条路径,需要在 /etc/lvm/lvm.conf 文件中加上过滤条件,格式如下:

# Example
# Accept every block device:
# filter = [ "a|.*|" ]
# Reject the cdrom drive:
# filter = [ "r|/dev/cdrom|" ]
# Work with just loopback devices, e.g. for testing:
# filter = [ "a|loop|", "r|.*|" ]
# Accept all loop devices and ide drives except hdc:
# filter = [ "a|loop|", "r|/dev/hdc|", "a|/dev/ide|", "r|.*|" ]
# Use anchors to be very specific:
# filter = [ "a|^/dev/hda8$|", "r|.*|" ]
#
# This configuration option has an automatic default value.
# filter = [ "a|.*|" ]

过滤语法接收多重条件。形式如 "a" (Accept) or "r" (Reject),中间以逗号为间隔。所有符合 Accept 条件的设备都会被扫描,同时忽略所有符合 Reject 条件的设备。

注意:如果本地存储设备包含物理卷,确保除了多路径设备外,这些设备也包含在过滤条件中。

测试配置:

lvs --config 'devices{ filter = [ "a|/dev/emcpower.*|", "r|.*|" ] }'

更改配置:

# for multipathd
filter = [ "a|/dev/sda3$|", "a|/dev/sdb1$|", "a|/dev/mapper/mpath.*|", "r|.*|" ]

# for dellemc powerpath
filter = [ "a|/dev/sda3$|", "a|/dev/sdb1$|", "a|/dev/emcpower.*|", "r|.*|" ]

# for hitachi hdlm
filter = [ "a|/dev/sda3$|", "a|/dev/sdb1$|", "a|/dev/sddlma.*|", "r|.*|" ]

REFERENCE

LVM reports _Cannot use device with duplicates.pdf |