lvmetad是LVM中用于处理元数据缓存的服务。

缓存状态

Empty : 系统中可用的设备还没有被添加到lvmetad。

Scanning : 部分系统中可用的设备已经被添加进lvmetad。

Initialized : 全部系统中可用的设备已经被添加进lvmetad。

Outdated : 还有系统或者存储时间没有被lvmetad处理。

Updated : 所有事件都已经被处理。

缓存过时(Outdated)的情况

MissingDev : 添加到系统中的设备还没有被添加进lvmetad。

RemovedDev : 从系统中移除的设备还没有被从lvmetad删除。

MissingVG : 写入磁盘的新VG还没有被添加进lvmetad。

RemovedVG : 从磁盘中删除的VG还没有被从lvmetad中删除。

ChangedVG : 磁盘中的VG元数据已经被修改,但是lvmetad还没有更新。

MissingPV : 写入磁盘的新PV还没有被添加进lvmetad。

RemovedPV : 从磁盘中删除的PV还没有被从lvmetad中删除。

ChangedPV : 磁盘中的PV元数据已经被修改,但是lvmetad还没有更新。

缓存状态转换

Empty -> Scanning

Scanning -> Initialized

Initialized -> Scanning

Initialized -> Outdated

Outdated -> Updated

Updated -> Outdated

Updated -> Scanning

Outdated -> Scanning

缓存状态转换的原因

Empty

启动或重启lvmetad服务。

Scanning

运行pvscan --cache命令。

运行任何global_filter不同的命令(token不匹配)。

当lvmetad处于Empty状态时,运行任何命令。

运行一个报告或显示命令时使用--foreign选项。

运行一个报告或显示命令时使用--shared选项。

运行一个命令时使用了lvmetad全局锁,且锁的状态发生改变。

Initialized

扫描完成。

Outdated

从系统中添加或删除设备。

创建、删除或修改一个VG。

创建、删除或修改一个PV。

Updated

接收并处理完所有事件。

不同缓存状态下的请求处理

Empty : 返回token错误。

Scanning : 返回token错误,并附带“updating”字符串。

Initialized : 正常响应所有请求。

Updated : 正常响应所有请求。

Outdated : 正常响应所有请求。

一般的状态转换步骤

正常情况下,状态转换一般是“Updated -> Scanning -> Initialized”,转换步骤是:

接收一个设置token为“updating”的请求, Scanning状态开始;

接收一个pv_clear_all请求来清除当前缓存;

接收一系列pv_found时间来重新构建缓存;

接收一个设置token为一个hash值,Initialized状态开始。

从Outdated向Updated的状态转换依赖与LVM命令发送给lvmetad的事件请求,比如说pv_found, pv_gone, vg_update, vg_remove。

注意:

当通过lvmlockd使用共享VG时,Outdated会持续较长时间,因此,在每次使用缓存前,lvmlockd会强制进行一次“Outdated -> Scanning -> Initialized”状态转换。

缓存的有效性

正常情况下,lvmetad通过处理来自客户端的提醒消息和系统的uevents来保持缓存处于最新状态。当使用lvmlockd时,当其他主机改变磁盘上的元数据时,也应该使本机的lvmetad元数据缓存变为过时状态。

为了解决这个问题,lvmetad元数据缓存增加了“无效”标志,当一个命令向lvmetad发送获取元数据请求时,在lvmetad返回元数据的同时,附带缓存“无效”标志。命令在收到响应后首先检查这个标志,如果无效则扫描磁盘,获取最新的元数据。最后把最新的元数据发送给lvmetad服务,并清除其“无效”标志,后面再有新的命令获取元数据时获取的就是最新的元数据了。

为了跟踪元数据“无效”状态,LVM元数据被分为两类,VG范围和全局范围:

VG范围 - 包括VG修改或者LV所有操作。

全局范围 - 包括VG的名称、孤立的物理卷。

当使用lvmetad时,分布式锁中会包含VG最新的seqno,或者全局锁会有一个全局计数器,当对锁使用Update操作后会增加这个序号。其他节点在获取锁时会把锁记录的序号与自身保存的序号进行比较,如果自身的较小则说明元数据过时,则从本地重新扫描元数据。

Linux查看lvm元数据,LVM元数据服务lvmetad分析相关推荐

  1. Linux查看客户端NTP会话,linux_NTP服务详解

    一.安装ntp服务 yum -y install ntp 二.配置ntp服务器端 restrict 0.0.0.0 mask 0.0.0.0  nomodify notrap  noquery res ...

  2. linux webservice服务器端,Linux查看资源使用情况 webservice服务端口监控

    本人在最近的项目过程中,发现一个很严重的问题 在我们写的一个应用中,jboss作应用程序的容器,其中加载了webservice服务.每次服务运行一段时间后,大概几天时间以后,发现很奇怪的现象.我们的j ...

  3. Linux查看、禁止、启用服务

    本文以Centos7.6 x86_64为例,其它发行版本,可能略有不同 systemctl命令格式如下: systemctl [选项] [服务名称] systemctl命令可以使用enable/dis ...

  4. linux查看license情况,检查SCL服务状态和License使用情况

    使用 SSH 工具登录 SCL license server主机和将要运行QuantumATK的主机上执行命令: lmstat -a -c 27020@[my_server] # 注释:[my_ser ...

  5. linux lvm snapshot lvm 快照 逻辑卷 快照

    lvm快照有多种实现方法,其中一种是COW(Copy-On-Write),不用停止服务或将逻辑卷设为只读就可以进行备份,当一个 snapshot创建的时候只是拷贝原始卷里的元数据,而不是物理上的数据, ...

  6. linux磁盘扩空间,Linux磁盘空间扩容(LVM)

    Linux磁盘空间扩容(lvm) 随着系统的运行时间增长,业务数据的增长,原有磁盘的空间会存在空间不足情况,导致系统不能正常运行,或者系统管理员磁盘没有完全划完,根据使用者的需求自行划分.那么怎么才能 ...

  7. Linux磁盘管理之LVM与快照

    引言: 逻辑卷管理LVM是硬盘的⼀个系统⼯具.⽆论在Linux或者其他类似的系统,都是⾮常的好⽤.传统分区使⽤固定⼤⼩分区,重新调整⼤⼩⼗分麻烦.但是,LVM可以创建和管理"逻辑" ...

  8. linux 扩展zhu分区,Linux分区调整(LVM和非LVM环境中扩容和缩小)

    前言:我的上一篇博文详细介绍了磁盘.格式以及分区知识,里面也涉及了LVM,本文主要实践下LVM和非LVM环境中Linux分区如何扩容和缩小. 分区调整原理: Linux磁盘分区和磁盘格式紧密相连,想要 ...

  9. 如何查看 Linux 中所有正在运行的服务

    有许多方法和工具可以查看 Linux 中所有正在运行的服务.大多数管理员会在 System V(SysV)初始化系统中使用 service service-name status 或 /etc/ini ...

最新文章

  1. 人工智能领导世界走向何方?
  2. 计算机文化基础教程教案,新版《计算机文化基础》教案.doc
  3. kafka数据文件.log
  4. 多线程的那点儿事(之多线程数据结构)
  5. oracle自定义数组
  6. 2018青岛ICPC ZOJ 4061: Magic Multiplication(模拟)
  7. 执行pip命令时遇到 Fatal error in launcher: Unable to create process using ''
  8. 科沃斯扫地机器人橡胶配件_扫地机器人主要配件,扫地机器人配件详解
  9. MQTT客户端程序的编写
  10. 关于各式竞赛书籍的点评
  11. 尝试一下暴力破解Wifi
  12. 数学建模学习(57):K-Means聚类原理分析讲解与应用
  13. 服务器共享文件夹设置特殊权限,资料共享服务器权限设置、服务器共享盘设置权限、设置局域网共享文件夹访问权限的方法...
  14. 常见的两种解空间 全排列与幂集
  15. 正点原子IMX6ULL开发板禁用出厂QT界面
  16. 万豪环保系列之水箱自洁消毒器
  17. 英语时态:一般、否定疑问句、现表将来(中文练到无停顿)
  18. Springboot整合Shiro之授权
  19. 遍历HashMap中元素的三种方法
  20. 数据仓库——数据仓库基础

热门文章

  1. java中null是常量吗_C_NULL Julia中的常量
  2. 不稳定学习器适合做基分类器_分类稳定性
  3. kadane算法_使用KADANE的算法求最大子阵列和
  4. matlab7.0 6.5,任何处理matlab6.5与7.0.1的兼容问题
  5. c语言中memcpy函数_带有示例的C中的memcpy()函数
  6. oracle怎样修改表名、列名、字段类型、添加表列、删除表列
  7. 关联数组(associative array)
  8. npm包管理器安装模块
  9. linux2.6 gcc 4.8.2,在Red Hat Enterprise linux 6.5上安装GCC 4.8.2
  10. autowired的对象为null_spring-为什么我的@Autowired对象为null?