Linux查看lvm元数据,LVM元数据服务lvmetad分析
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分析相关推荐
- Linux查看客户端NTP会话,linux_NTP服务详解
一.安装ntp服务 yum -y install ntp 二.配置ntp服务器端 restrict 0.0.0.0 mask 0.0.0.0 nomodify notrap noquery res ...
- linux webservice服务器端,Linux查看资源使用情况 webservice服务端口监控
本人在最近的项目过程中,发现一个很严重的问题 在我们写的一个应用中,jboss作应用程序的容器,其中加载了webservice服务.每次服务运行一段时间后,大概几天时间以后,发现很奇怪的现象.我们的j ...
- Linux查看、禁止、启用服务
本文以Centos7.6 x86_64为例,其它发行版本,可能略有不同 systemctl命令格式如下: systemctl [选项] [服务名称] systemctl命令可以使用enable/dis ...
- linux查看license情况,检查SCL服务状态和License使用情况
使用 SSH 工具登录 SCL license server主机和将要运行QuantumATK的主机上执行命令: lmstat -a -c 27020@[my_server] # 注释:[my_ser ...
- linux lvm snapshot lvm 快照 逻辑卷 快照
lvm快照有多种实现方法,其中一种是COW(Copy-On-Write),不用停止服务或将逻辑卷设为只读就可以进行备份,当一个 snapshot创建的时候只是拷贝原始卷里的元数据,而不是物理上的数据, ...
- linux磁盘扩空间,Linux磁盘空间扩容(LVM)
Linux磁盘空间扩容(lvm) 随着系统的运行时间增长,业务数据的增长,原有磁盘的空间会存在空间不足情况,导致系统不能正常运行,或者系统管理员磁盘没有完全划完,根据使用者的需求自行划分.那么怎么才能 ...
- Linux磁盘管理之LVM与快照
引言: 逻辑卷管理LVM是硬盘的⼀个系统⼯具.⽆论在Linux或者其他类似的系统,都是⾮常的好⽤.传统分区使⽤固定⼤⼩分区,重新调整⼤⼩⼗分麻烦.但是,LVM可以创建和管理"逻辑" ...
- linux 扩展zhu分区,Linux分区调整(LVM和非LVM环境中扩容和缩小)
前言:我的上一篇博文详细介绍了磁盘.格式以及分区知识,里面也涉及了LVM,本文主要实践下LVM和非LVM环境中Linux分区如何扩容和缩小. 分区调整原理: Linux磁盘分区和磁盘格式紧密相连,想要 ...
- 如何查看 Linux 中所有正在运行的服务
有许多方法和工具可以查看 Linux 中所有正在运行的服务.大多数管理员会在 System V(SysV)初始化系统中使用 service service-name status 或 /etc/ini ...
最新文章
- 人工智能领导世界走向何方?
- 计算机文化基础教程教案,新版《计算机文化基础》教案.doc
- kafka数据文件.log
- 多线程的那点儿事(之多线程数据结构)
- oracle自定义数组
- 2018青岛ICPC ZOJ 4061: Magic Multiplication(模拟)
- 执行pip命令时遇到 Fatal error in launcher: Unable to create process using ''
- 科沃斯扫地机器人橡胶配件_扫地机器人主要配件,扫地机器人配件详解
- MQTT客户端程序的编写
- 关于各式竞赛书籍的点评
- 尝试一下暴力破解Wifi
- 数学建模学习(57):K-Means聚类原理分析讲解与应用
- 服务器共享文件夹设置特殊权限,资料共享服务器权限设置、服务器共享盘设置权限、设置局域网共享文件夹访问权限的方法...
- 常见的两种解空间 全排列与幂集
- 正点原子IMX6ULL开发板禁用出厂QT界面
- 万豪环保系列之水箱自洁消毒器
- 英语时态:一般、否定疑问句、现表将来(中文练到无停顿)
- Springboot整合Shiro之授权
- 遍历HashMap中元素的三种方法
- 数据仓库——数据仓库基础
热门文章
- java中null是常量吗_C_NULL Julia中的常量
- 不稳定学习器适合做基分类器_分类稳定性
- kadane算法_使用KADANE的算法求最大子阵列和
- matlab7.0 6.5,任何处理matlab6.5与7.0.1的兼容问题
- c语言中memcpy函数_带有示例的C中的memcpy()函数
- oracle怎样修改表名、列名、字段类型、添加表列、删除表列
- 关联数组(associative array)
- npm包管理器安装模块
- linux2.6 gcc 4.8.2,在Red Hat Enterprise linux 6.5上安装GCC 4.8.2
- autowired的对象为null_spring-为什么我的@Autowired对象为null?