我的服务器是安装在 hp blade (x64) 上的 Oracle Enterprise Linux 5.4 (RHEL5),带有连接到 EMC clariion SAN 的 qlogic HBA。
我们正在从多路径迁移到 powerpath,因为 emc 和公司存储团队不会支持多路径。
目前我的 3 个 lvm 卷组正在使用设备映射器/多路径创建的 /dev/dm-X 设备:
- vg01 是 25GB lun 上的一个完整磁盘分区
- vg02 是 3 个 16 gb lun,没有分区
- vg03 是一个 1tb lun,没有分区。
(实验 1)我关闭 multipathd 并在检查配置中禁用它,然后将以下过滤器添加到lvm.conf
。
filter = [ "a|/dev/emc.*|", "a|/dev/cciss.*|", "r/.*/" ]
当我重新启动时:
- vg01 无法检测到
- vg02 检测成功
- vg03 检测成功
尽管我可以使用 dd 查看 lvm 标头内容,但 vg01 在其 emcpower 磁盘上未被检测到。其他两个 VG 被检测到得很好。而且所有 dm-X 设备仍在 /dev/ 中。
(2)因此我删除过滤器并启用所有黑名单multipath.conf
:
blacklist {
devnode "*"
}
现在重新启动时,/dev/ 中不再有 dm-X 设备,并且在它们的 emcpower 设备上找到了 vg02 和 vg03,但仍然无法检测到 vg01。
(3) 我使用过滤器和黑名单重新启动,结果是 vg01 无法检测到,但 vg02 和 vg03 正常。
有人能帮助我弄清楚为什么这个卷组在没有设备映射器/多路径的情况下似乎无法检测到吗?
有人可以解释一下 lvm、device-mapper 和 multipath 之间的关系吗?
答案1
我目前无法使用 EMC 设备来验证这一点,但我必须在之前的几份工作中设置它。如果我没记错的话,你必须使用这个过滤器行:filter=["r/sd./“, “A/。/"] 这将删除所有 sd 设备(sda、sdb 等),然后允许其他所有设备。当然,如果您从显示为 /dev/sda 的内部磁盘启动,则必须指定:filter=["r/sd[bz]./“, “A/。/”]或类似的东西。
编辑:我在我的旧笔记中找到了一行配置(我认为这是针对 RHEL 4 的,但应该仍然有效);此过滤器适用于从内部 raid 控制器(cciss)启动的 HP 服务器,并且具有用于数据驱动器的 Powerpath:
filter = [ "a|^/dev/cciss/.*|", "a|^/dev/emcpower.*|", "a|^/dev/loop.*|", "r /.*/" ]
因此,这将接受 cciss 设备、emcpower 和任何环回设备,并拒绝其他所有设备(此处适用正则表达式规则)。
回答问题的最后一部分,当 LVM 进行扫描时,它会在 /proc/partitions 中查找与其接受/拒绝过滤器匹配的任何设备,并扫描这些块设备以查找 LVM 标头。它为特定 LVM 卷标头找到的第一个块设备就是所使用的块设备。现在有了 SAN,/dev/sda 和 /dev/sdg(例如)都映射到相同的数据,/dev/emcpowera 也是如此(命令“powermt display all”应该会为您提供正确的映射)。希望这能有所帮助。