Multipath用户进程代码.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
目录 TOC \o 1-3 \h \z \u 1 Multipath概要说明 h 2 2 multipath程序流程: h 3 2.1 multipath版本 h 3 2.2 multipath用户态程序依赖库 h 3 2.3 生成多路径信息 h 4 2.3.1 命令执行概要 h 4 2.3.2 核心数据结构 h 4 2.3.3 主函数调用流程 h 4 2.4 清除所有多路径信息 h 9 2.4.1 命令执行概要 h 9 3 multipathd程序流程 h 10 1.1. checkloop线程 h 12 2.2. ueventloop线程 h 14 2.3. uxlsnrloop线程 h 16 4 device_mapper用户库接口 h 17 5 dm_mod、dm_multipath内核模块 h 18 Multipath概要说明 Multipath用户程序有两个,包括multipath和multipathd,其中multipath程序主要用来做查询多路径状态,multipathd程序主要用来响应硬件事件,并执行相应动作。 从网上找的一张描述multipath整体调用流程的图片,从用户态到内核态 multipath程序流程: 首先调用sysfs_get_mnt_path,得到sysfs文件系统的挂载目录,一般情况下为/sys; 然后调用configure,这个函数执行了剩下的所有事情: 首先通过path_discovery从/sys下找到所有当前磁盘路径,放到结构体中pathvec中 然后调用coalesce_paths,计算pathvec中每一条路径的wwid值,如果相同就聚合成一条mpp 最后调用domap(mpp),执行多路径动作(例如:路径创建、路径删除、路径切换等等) multipath版本 device-mapper-multipath-0.4.7-23.el5 multipath用户态程序依赖库 libsysfs.so 从sysfs子系统内提取/sys/block/{sda,sdb...} 磁盘信息 对应源码包:sysfsutils-2.0.0-6.src.rpm libdevmapper.so 重新封装ioctl接口,供libmultipath.so库以及kpartx调用 主要提供函数接口如:dm_task_create dm_task_run dm_task_destroy等 对应源码包:device-mapper-1.02.28-2.el5.src.rpm libmultipath.so 供multipath、multipathd等程序调用 主要提供函数接口如:coalesce_paths、add_map_without_path、add_map_with_path、remove_map、remove_maps等 对应源码包:device-mapper-multipath-0.4.7-23.el5.src.rpm 以命令执行为入口,一步步分析代码流程: 生成多路径信息 multipath -v3 命令执行概要 扫描sysfs下所有磁盘,得到所有块设备,包括本机硬盘,U盘,所有scsi存储,过滤掉黑名单(blacklist)中的设备,通过scsi_id命令得到磁盘的scsi-id,并将相同scsi-id的磁盘归类为一个多路径,最后调用ioctl发往内核 核心数据结构 struct vectors vecs { struct vector *pathvec; # 存储单独的一条磁盘信息,如sda、sdb等 struct vector *mpvec; # 存储聚合后的多路径信息,如dm-0、dm-1等 } 主函数调用流程 执行 main - configure - path_discovery、coalesce_paths path_discovery函数流程 从sysfs子系统提取所有路径,如sda,sdb... 遍历这些路径,依次调用path_discover,在path_discover中,过滤掉黑名单(blacklist)中的磁盘设备,再调用pathinfo获得与磁盘有关的信息:wwid、vendor_id、product_id、sg_id.{host_no,channel,scsi_id,lun}等,最终将所有单条路径信息填入vecs-pathvec结构中 其中获得wwid的函数为get_uid,主要就是调用程序/sbin/scsi_id -g -u -s /block/%n 获得磁盘wwid信息 coalesce_paths(聚合路径)

文档评论(0)

***** + 关注
实名认证
内容提供者

我是自由职业者,从事文档的创作工作。

1亿VIP精品文档

相关文档