当前位置:首页>Linux>Linux LVM(二):查看与监控

Linux LVM(二):查看与监控

  • 2026-09-26 21:41:36
Linux LVM(二):查看与监控

字数 1477,阅读大约需 8 分钟

学会 pvcreate、vgcreate、lvcreate 只是第一步。日常运维靠"看":看状态、看容量、看变化。本篇就来讲一讲怎么看。

一、查看命令家族一览

LVM 提供三套查看命令,分别对应 PV、VG、LV:

简短命令
详细命令
作用
pvspvdisplay
物理卷
vgsvgdisplay
卷组
lvslvdisplay
逻辑卷

pvs/vgs/lvs 输出一行一个对象,适合脚本处理;
pvdisplay/vgdisplay/lvdisplay 输出多行详细信息,适合人类阅读。

另外还有几个全局命令:

命令
作用
lvscan
扫一遍所有 LV,列出 device-mapper 设备
vgscan
扫 VG(系统启动时自动跑)
pvscan
扫 PV
lvm dumpconfig
输出当前生效的 lvm.conf

二、pvs 系列

最简用法

$ pvs
  PV         VG      Fmt  Attr PSize  PFree
  /dev/sdb   vg_data lvm2 a--  5.00g 4.99g
  /dev/sdc   vg_data lvm2 a--  5.00g 5.00g

自定义列

pvs -o 可以指定显示哪些字段:

$ pvs -o pv_name,pv_size,pv_free,pv_used,pv_attr,vg_name
  PV         PSize  PFree  Used  Attr VG
  /dev/sdb   5.00g  4.99g 4.00m a--  vg_data
  /dev/sdc   5.00g  5.00g     0 a--  vg_data

所有可用字段:pvs -o help 或 man pvs,常用:

字段
含义
pv_name
设备名
vg_name
所属 VG
pv_fmt
元数据格式(lvm2)
pv_attr
属性位
pv_size
PV 总大小
pv_free
PV 未分配空间
pv_used
PV 已用空间
pv_pe_count
PE 总数
pv_pe_alloc_count
已分配 PE 数

pvdisplay:详细信息

$ pvdisplay /dev/sdb
  --- Physical volume ---
  PV Name               /dev/sdb
  VG Name               vg_data
  PV Size               5.00 GiB / not usable 4.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              1279
  Free PE               1278
  Allocated PE          1
  PV UUID               xxxxxx-xxxx-xxxx-xxxx-xxxxxx

"not usable 4.00 MiB":每块 PV 开头的 4MiB 用于存放 LVM 元数据,所以实际可用比磁盘标称略小。

三、vgs 系列

最简用法

$ vgs
  VG      
#PV #LV #SN Attr   VSize  VFree
  vg_data   2   1   0 wz--n- 9.99g 4.99g

字段含义:

字段
含义
#PV
VG 包含几个 PV
#LV
VG 里几个 LV
#SN
几个快照
Attrw
=writable,z=resizable,n=normal,p=partial 等
VSize
VG 总大小
VFree
剩余可用

自定义列:监控友好

$ vgs -o vg_name,vg_size,vg_free,vg_attr --units g --nosuffix
  vg_name  vg_size  vg_free  vg_attr
  vg_data      9.99     4.99  wz--n-

--units g --nosuffix 让数字以纯 GB 输出,方便脚本 grep:

$ vgs --noheadings --nosuffix --units g -o vg_name,vg_free
  vg_data      4.99

vgdisplay

$ vgdisplay vg_data
  --- Volume group ---
  VG Name               vg_data
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               9.99 GiB
  PE Size               4.00 MiB
  Total PE              2558
  Alloc PE / Size       1 / 4.00 MiB
  Free  PE / Size       2557 / 9.99 GiB
  VG UUID               ...

Metadata Sequence No(元数据序列号)很重要:每次 VG 变更它都会递增,备份恢复时要用到。

四、lvs 系列

最简用法

$ lvs
  LV      VG      Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv_demo vg_data -wi-ao---- 5.00g

字段含义:

字段
含义
LV
LV 名
VG
所属 VG
Attr
多位属性
LSize
LV 大小
Pool
所属 thin pool(普通 LV 无)
Origin
该 LV 是某个快照的源 LV
Data%
 / Meta%
thin pool 占用率
Move
pvmove 进行中状态
Cpy%Sync
镜像同步进度
Convert
类型转换中状态

Attr 字段详解(lv_attr)

格式:[-abcdijklmnopqrstuvwy],重点位:

字符
含义
第 1 位
卷类型:-=普通、s=快照、m=镜像源、M=镜像日志、o=origin、p=pvmove、t=thin、T=thin pool、r=raid
第 2 位
权限:w=可写、r=只读
第 3 位
分配策略:i=inherit、c=contiguous、l=cling、n=normal、a=anywhere
第 4 位
固定:f=fixed(不常用)
第 5 位
状态:a=active、s=suspended、I=invalid snapshot 等
第 6 位
设备状态:o=open
后面若干位
高级特性标志

自定义列示例

# 显示 LV 的设备路径、UUID、挂载点
$ lvs -o lv_name,lv_path,lv_uuid,lv_size --noheadings
  lv_demo  /dev/vg_data/lv_demo  xxxxxx-...  5.00g

# 显示所有 thin 相关字段

$ lvs -a -o lv_name,lv_size,pool_lv,data_percent,metadata_percent

lvdisplay

$ lvdisplay /dev/vg_data/lv_demo
  --- Logical volume ---
  LV Path                /dev/vg_data/lv_demo
  LV Name                lv_demo
  VG Name                vg_data
  LV UUID                ...
  LV Write Access        read/write
  LV Creation host, time ...
  LV Status              available
  # open                 1

  LV Size                5.00 GiB
  Current LE             1280
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

# open 表示有几个进程正在使用这个 LV(打开的文件描述符数)。这个数字关系到能否安全卸载。

五、lvscan:最快的全景扫描

$ lvscan
  ACTIVE            '/dev/vg_data/lv_demo' [5.00 GiB] inherit

加 -a 显示所有,包括 inactive:

$ lvscan -a
  ACTIVE            '/dev/vg_data/lv_demo' [5.00 GiB] inherit
  inactive          '/dev/vg_data/lv_old' [10.00 GiB] inherit

六、过滤与脚本化

只看特定 VG

$ lvs vg_data
$ vgs vg_data
$ pvs vg_data    # 这个写法也行

只看特定字段(脚本友好)

# 取 VG 剩余空间(单位:字节)
$ vgs --noheadings --nosuffix --units b -o vg_free vg_data
  5347737600B

JSON 输出

lvs 支持 -o json,方便集成:

$ lvs --reportformat json vg_data
{
  "report"
: [
    {
      "lv"
: [
        {"lv_name":"lv_demo", "vg_name":"vg_data", "lv_size":"5368709120", ...}
      ]
    }
  ]
}

七、监控脚本示例

监控 VG 剩余空间(cron + mail)

#!/bin/bash
# /usr/local/bin/lvm-monitor.sh

THRESHOLD=10   # GB

for
 vg in $(vgs --noheadings -o vg_name); do
    FREE=$(vgs --noheadings --nosuffix --units g -o vg_free "$vg" | awk '{print $1}')
    if
 (( $(echo "$FREE < $THRESHOLD" | bc -l) )); then
        echo
 "WARNING: VG $vg only ${FREE}G free!"
        # mail -s "LVM: VG $vg low space" root@yourcompany.com

    fi

done

监控 thin pool

# thin pool 满会导致所有 thin LV 不可用,必须监控
$ lvs -o lv_name,data_percent,metadata_percent vg_data

Data% 接近 100% 时扩容 thin pool 或清理空间。

监控 pvmove / 同步进度

# 每秒刷新看 pvmove 进度
$ watch -n 1 'lvs -a -o lv_name,lv_size,move_percent'

# 镜像同步进度

$ watch -n 1 'lvs -a -o lv_name,lv_size,copy_percent'

八、/etc/lvm 目录结构

$ ls /etc/lvm
archive/  backup/  cache/  lvm.conf
  • • lvm.conf:主配置
  • • backup/:最新的 VG 元数据文本副本(救命稻草)
  • • archive/:历史 VG 元数据(每次变更保留)
  • • cache/:lvm2 的内部缓存
# 查看最近的 VG 配置
$ cat /etc/lvm/backup/vg_data (这个名字要根据你自已系统上的名字来,这里只是举个例子)

# 查看历史(按时间倒序)

$ ls -lt /etc/lvm/archive/vg_data_*.vg

九、总结一下

命令
推荐场景
pvs / vgs / lvs
快速查看状态、写脚本
pvdisplay / vgdisplay / lvdisplay
详细信息、查 UUID 和 PE 数
lvscan
全景扫描
lvs -o json
集成到监控系统

关键属性位要记牢:Attr 是 LVM 状态的"心电图"。

相关阅读:

Linux LVM(一):基础、概念及简单示例

最新文章

随机文章