Linux vgs命令

vgs命令 - 报告卷组(Volume Group)的信息,是LVM(逻辑卷管理)工具的一部分。

命令简介

vgs命令用于显示卷组的详细信息,包括卷组名称、大小、可用空间、包含的物理卷数量、逻辑卷数量等。它是vgdisplay命令的简化版本,输出格式更紧凑易读,特别适合快速查看系统上的卷组状态。

语法格式

vgs [选项] [卷组名]

常用选项

选项 说明
-a, --all 显示所有卷组(包括未激活的)
-o, --options 指定输出字段
--noheadings 不显示标题行
--units 指定显示单位(bBsSkKmMgGtTpPeE)
-v, --verbose 详细模式
--separator 指定字段分隔符
-S, --select 根据条件选择卷组
--nameprefixes 在字段名前加前缀(如VG_NAME=)
--rows 以行形式输出

输出字段说明

字段 说明
VG 卷组名称
#PV 卷组中的物理卷数量
#LV 卷组中的逻辑卷数量
#SN 快照数量
Attr 卷组属性状态
VSize 卷组总大小
VFree 卷组可用空间大小
VG UUID 卷组的唯一标识符
VG Tags 卷组标签

使用示例

示例1:显示所有卷组信息

最基本的使用方式,显示系统中所有卷组的概要信息:

# 显示所有卷组
vgs

# 输出示例:
#   VG     #PV #LV #SN Attr   VSize   VFree
#   vg00     1   3   0 wz--n- 100.00g 20.00g
#   vg01     2   2   1 wz--n- 500.00g 50.00g
#   data_vg  3   5   0 wz--n-   1.50t  300.00g

示例2:以人类可读格式显示

# 以人类可读格式显示(自动选择合适单位)
vgs --units h

# 或
vgs -h

# 输出示例:
#   VG     #PV #LV #SN Attr   VSize VFree
#   vg00     1   3   0 wz--n- 100g  20g
#   vg01     2   2   1 wz--n- 500g  50g

示例3:自定义输出字段

# 只显示VG、大小和可用空间
vgs -o vg_name,vg_size,vg_free

# 显示扩展字段信息
vgs -o vg_name,vg_size,vg_free,vg_uuid,vg_tags

# 显示所有可用字段
vgs -o +vg_seqno,vg_mda_count,vg_mda_free

# 输出示例:
#   VG     VSize   VFree
#   vg00   100.00g 20.00g
#   vg01   500.00g 50.00g

示例4:不显示标题行

适用于脚本处理:

vgs --noheadings

# 或者结合自定义字段
vgs --noheadings -o vg_name,vg_size,vg_free

# 输出示例:
#   vg00 100.00g 20.00g
#   vg01 500.00g 50.00g

示例5:条件选择卷组

# 显示可用空间大于50G的卷组
vgs -S 'vg_free > 50G'

# 显示名称匹配特定模式的卷组
vgs -S 'vg_name =~ "^vg"'

# 显示有快照的卷组
vgs -S 'snap_count > 0'

# 显示包含特定逻辑卷的卷组
vgs -S 'lv_name = "root"'

示例6:以不同单位显示

# 以MB为单位显示
vgs --units m

# 以GB为单位显示(默认)
vgs --units g

# 以TB为单位显示
vgs --units t

# 以字节为单位显示(无后缀)
vgs --units b --nosuffix

# 输出示例:
#   VG     #PV #LV #SN Attr   VSize     VFree
#   vg00     1   3   0 wz--n- 104857600 20971520

示例7:使用分隔符和名称前缀

# 使用逗号作为分隔符(CSV格式)
vgs --separator ","

# 添加字段名前缀,便于脚本解析
vgs --nameprefixes -o vg_name,vg_size,vg_free

# 输出示例:
#   LVM2_VG_NAME='vg00' LVM2_VG_SIZE='100.00g' LVM2_VG_FREE='20.00g'
#   LVM2_VG_NAME='vg01' LVM2_VG_SIZE='500.00g' LVM2_VG_FREE='50.00g'

示例8:显示特定卷组

# 显示指定卷组信息
vgs vg00

# 显示多个卷组
vgs vg00 vg01

# 配合正则表达式
vgs $(sudo vgs --noheadings -o vg_name | grep "^vg")

属性状态说明

输出中的Attr字段包含6个字符,每个字符代表一种状态:

  • 第一个字符:权限
    • w:可写(Writeable)
    • r:只读(Read-only)
  • 第二个字符:可调整
    • z:可调整大小(Resizeable)
    • -:不可调整
  • 第三个字符:导出状态
    • e:已导出(Exported)
    • -:未导出
  • 第四个字符:部分
    • p:部分(Partial)
    • -:完整
  • 第五个字符:分配策略
    • c:连续分配(Contiguous)
    • l:条带化(Striped)
    • n:正常(Normal)
    • a:任意(Anywhere)
    • i:继承(Inherited)
    • c:集群(Clustered)
  • 第六个字符:集群状态
    • c:集群(Clustered)
    • -:非集群

实用技巧

使用提示
  • 使用vgs -a可以查看所有卷组,包括那些未激活的卷组
  • 结合awk命令可以提取特定信息:vgs --noheadings -o vg_name,vg_free | awk '$2 > 50'
  • 使用vgdisplay可以获得更详细的卷组信息
  • 在脚本中,使用--nameprefixes选项可以更方便地解析输出
  • 监控脚本中常用:vgs --noheadings --units g -o vg_name,vg_free | grep -v "^[[:space:]]*$"

相关命令

vgdisplay

显示卷组的详细信息

pvs

显示物理卷信息

lvs

显示逻辑卷信息

vgcreate

创建卷组

应用场景

磁盘空间监控

在监控脚本中使用vgs命令检查卷组的可用空间,当空间不足时发送告警。

#!/bin/bash
vgs --noheadings --units g -o vg_name,vg_free | while read vg free; do
    if [ $(echo "$free < 10" | bc) -eq 1 ]; then
        echo "警告: 卷组 $vg 可用空间不足, 仅剩 ${free}G"
    fi
done
自动化部署

在自动化部署脚本中检查卷组是否存在,决定是否创建新的卷组。

#!/bin/bash
VG_NAME="app_vg"

if vgs $VG_NAME &>/dev/null; then
    echo "卷组 $VG_NAME 已存在"
    echo "可用空间: $(vgs --noheadings --units g -o vg_free $VG_NAME)G"
else
    echo "创建卷组 $VG_NAME"
    vgcreate $VG_NAME /dev/sdb1 /dev/sdc1
fi