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

学会 pvcreate、vgcreate、lvcreate 只是第一步。日常运维靠"看":看状态、看容量、看变化。本篇就来讲一讲怎么看。
LVM 提供三套查看命令,分别对应 PV、VG、LV:
pvs | pvdisplay | |
vgs | vgdisplay | |
lvs | lvdisplay |
pvs/vgs/lvs 输出一行一个对象,适合脚本处理;pvdisplay/vgdisplay/lvdisplay 输出多行详细信息,适合人类阅读。
另外还有几个全局命令:
lvscan | |
vgscan | |
pvscan | |
lvm dumpconfig |
$ 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.00gpvs -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 | |
pv_fmt | |
pv_attr | |
pv_size | |
pv_free | |
pv_used | |
pv_pe_count | |
pv_pe_alloc_count |
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
VG #PV #LV #SN Attr VSize VFree
vg_data 2 1 0 wz--n- 9.99g 4.99g字段含义:
#PV | |
#LV | |
#SN | |
Attr | wz=resizable,n=normal,p=partial 等 |
VSize | |
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.99vgdisplay$ 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
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv_demo vg_data -wi-ao---- 5.00g字段含义:
LV | |
VG | |
Attr | |
LSize | |
Pool | |
Origin | |
Data%Meta% | |
Move | |
Cpy%Sync | |
Convert |
Attr 字段详解(lv_attr)格式:[-abcdijklmnopqrstuvwy],重点位:
-=普通、s=快照、m=镜像源、M=镜像日志、o=origin、p=pvmove、t=thin、T=thin pool、r=raid | |
w=可写、r=只读 | |
i=inherit、c=contiguous、l=cling、n=normal、a=anywhere | |
f=fixed(不常用) | |
a=active、s=suspended、I=invalid snapshot 等 | |
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_percentlvdisplay$ 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
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$ lvs vg_data
$ vgs vg_data
$ pvs vg_data # 这个写法也行# 取 VG 剩余空间(单位:字节)
$ vgs --noheadings --nosuffix --units b -o vg_free vg_data
5347737600Blvs 支持 -o json,方便集成:
$ lvs --reportformat json vg_data
{
"report": [
{
"lv": [
{"lv_name":"lv_demo", "vg_name":"vg_data", "lv_size":"5368709120", ...}
]
}
]
}#!/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 LV 不可用,必须监控
$ lvs -o lv_name,data_percent,metadata_percent vg_dataData% 接近 100% 时扩容 thin pool 或清理空间。
# 每秒刷新看 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'$ ls /etc/lvm
archive/ backup/ cache/ lvm.conflvm.conf:主配置backup/:最新的 VG 元数据文本副本(救命稻草)archive/:历史 VG 元数据(每次变更保留)cache/:lvm2 的内部缓存# 查看最近的 VG 配置
$ cat /etc/lvm/backup/vg_data (这个名字要根据你自已系统上的名字来,这里只是举个例子)
# 查看历史(按时间倒序)
$ ls -lt /etc/lvm/archive/vg_data_*.vgpvs / vgs / lvs | |
pvdisplay / vgdisplay / lvdisplay | |
lvscan | |
lvs -o json |
关键属性位要记牢:Attr 是 LVM 状态的"心电图"。
相关阅读: