linux 简单的解析器multipath -l输出检查单路径设备

swvgeqrz  于 2023-10-16  发布在  Linux
关注(0)|答案(1)|浏览(153)

在RHEL 6机器上,我需要定期检查所有SAN LUN是否在至少两个不同的HBA端口上具有至少一个功能路径。我想要一个简单的解析器脚本,它会告诉我哪些LUN不符合这些条件。
我假设你们中的一些人已经经历过同样的事情,并且可能已经创建了一个简单的解析器,这可能会为我节省保存一些时间。理想情况下使用标准的Linux工具,所以bash/cat/grep/awk/sed,而不是perl/ruby/java/erlang.(尽管Perl可能确实是可以接受的)。
每个设备的输出如下所示,LUN的“关键字”是“dm-:digit:",则可能有一个或多个HBA端口,每个端口在各种情况下都没有或有多个可见路径,以下是一些示例:
1)无别名的设备,两个HBA端口,每个端口两条路径,工作正常

36005076802810c208000000000000014 dm-53 IBM,2145
size=10T features='1 queue_if_no_path' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=50 status=active
| |- 4:0:1:20 sded 128:80  active ready running
| `- 4:0:2:20 sdez 129:176 active ready running
`-+- policy='round-robin 0' prio=10 status=enabled
  |- 3:0:1:20 sdcf 69:48   active ready running
  `- 3:0:2:20 sddb 70:144  active ready running

2)此设备有别名,并且每个端口只有一个路径:

otsdcpp01_lun49 (360001ff0118e74c831000100000e8ded) dm-52 IBM,DCS9900
size=7.3T features='0' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=1 status=active
| `- 2:0:0:33 sdd  8:48    active ready running
`-+- policy='round-robin 0' prio=1 status=enabled
  `- 1:0:6:33 sdgl 132:16  active ready running

3)这一个有4个路径,唉,通过只有一个HBA -这应该报告:

360000970000296800131533030303638 dm-1 EMC,SYMMETRIX
size=600G features='1 queue_if_no_path' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=1 status=active
  |- 2:0:1:1  sdh  8:112   active ready running
  |- 1:0:0:1  sdw  65:96   active ready running
  |- 2:0:2:1  sdy  65:128  active ready running
  `- 1:0:1:1  sdcr 69:240  active ready running

4)单路径设备(这里是本地SCSI磁盘,但最好报告它):

3600508b1001030384639323138300600 dm-53 HP,LOGICAL VOLUME
size=137G features='1 queue_if_no_path' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=1 status=active
  `- 0:0:0:0  sda  8:0     active ready running

multipath命令输出的设备没有任何间隙、空行等。
该命令的输出不必是超级漂亮的,即转储该设备的整个块会被触发为“不充分的冗余路径”,所以这个解析器会像“多行块grep”过滤出“多路径多HBA”的情况,并留下那些可能需要注意的。
TIA!TIA!
CEPAL
P.S.:如果有足够高的声誉的人可以添加“多路径”的标签请,会很酷..

ffscu2ro

ffscu2ro1#

把这个贴在这里是因为我真的不知道它的存在,直到现在,希望它能拯救别人:**multipathd有一个json输出命令!**您可以运行multipathd show multipath <path> json,这将给予multipath -ll的所有信息。不幸的是,您一次只能对一个设备执行此操作,因此您需要首先通过/dev/dm-*/dev/mapper(或其他方式)获得设备列表,但解析信息的困难部分已经解决!
示例架构:

{
  "major_version": 0,
  "minor_version": 1,
  "map": {
    "name": "<mapper name/uuid/wwid>",
    "uuid": "<mapper name/uuid/wwid>",
    "sysfs": "dm-0",
    "failback": "immediate",
    "queueing": "off",
    "paths": 4,
    "write_prot": "rw",
    "dm_st": "active",
    "features": "0",
    "hwhandler": "0",
    "action": "",
    "path_faults": 4,
    "vend": "PURE    ",
    "prod": "FlashArray      ",
    "rev": "8888",
    "switch_grp": 0,
    "map_loads": 3,
    "total_q_time": 0,
    "q_timeouts": 0,
    "path_groups": [
      {
        "selector": "queue-length 0",
        "pri": 1,
        "dm_st": "active",
        "group": 1,
        "paths": [
          {
            "dev": "sdi",
            "dev_t": "8:128",
            "dm_st": "active",
            "dev_st": "running",
            "chk_st": "ready",
            "checker": "tur",
            "pri": 1,
            "host_wwnn": "[undef]",
            "target_wwnn": "<IQN>",
            "host_wwpn": "[undef]",
            "target_wwpn": "[undef]",
            "host_adapter": "<IP>"
          },
          ...
        ]
      }
    ]
  }
}

相关问题