pvdisplay -c 输出紧凑列格式,字段顺序为pv、vg、fmt、attr、psize、pfree,空格分隔且空值为“-”;推荐用awk清洗空格并过滤空行,或改用pvs命令获取更稳定的管道分隔输出。

直接使用 pvdisplay -C 即可输出紧凑列格式,但需注意字段顺序、分隔符及空值处理,才能稳定用于监控脚本的正则解析。
理解 pvdisplay -C 的输出结构
pvdisplay -C 以固定列宽、空格分隔、无表头/边框的方式输出物理卷信息,典型字段顺序为:
- PV(物理卷设备路径,如
/dev/sdb1) - VG(所属卷组名)
- Fmt(LVM格式,如
lvm2) - Attr(属性,如
lwi---) - PSize(总大小,带单位,如
10.00g) - PFree(空闲空间,如
2.50g)
字段间用**一个或多个空格**分隔,不含制表符;若某字段为空(如未分配VG),对应位置显示为短横线 -。
适配脚本解析的关键技巧
为避免因空格数量变化或字段内容含空格(极少见但可能)导致切割错误,推荐以下方式:
- 用
awk按多空格分割:pvdisplay -C | awk '{$1=$1; print}'—— 强制重排字段,将多空格转为单空格,再按默认空白切分 - 跳过表头行(虽无显式表头,但部分LVM版本可能输出空行或注释行):
pvdisplay -C | awk 'NF && !/^$/ {print}' - 提取特定PV的空闲率:例如获取
/dev/sdc1的 PFree / PSize 比值(需单位统一,建议先转为MB)
实用监控示例(Shell + awk)
判断所有PV空闲率是否低于10%:
pvdisplay -C | awk 'NF && $1 != "PV" {
# 提取大小数值(去除单位字母,保留小数点)
gsub(/[a-zA-Z]/, "", $5); gsub(/[a-zA-Z]/, "", $6)
if ($5 != 0 && ($6/$5) 说明:该脚本自动清洗单位字符(如 g、m),安全做浮点计算;$1 != "PV" 排除旧版可能残留的标题行。
替代方案:更稳定的字段化输出
若环境支持较新LVM(≥2.02.110),优先使用 pvs 命令,它原生支持自定义格式且更可靠:
pvs --noheadings --separator '|' -o pv_name,vg_name,pv_fmt,pv_attr,pv_size,pv_free- 输出为管道分隔,无空格干扰,正则或cut解析零误差
- 配合
--units m --nosuffix可统一输出为整数MB,免去单位转换











