Linux lvs命令

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

命令简介

lvs命令用于显示逻辑卷的详细信息,包括逻辑卷名称、所属卷组、大小、类型、挂载点、快照关系等。它是lvdisplay命令的简化版本,输出格式更紧凑易读,适合快速查看系统上的逻辑卷状态。

注意:不要与Linux Virtual Server(LVS,负载均衡器)混淆,这是完全不同的工具。

语法格式

lvs [选项] [逻辑卷名]

常用选项

选项 说明
-a, --all 显示所有逻辑卷(包括快照、隐藏卷等)
-o, --options 指定输出字段
--noheadings 不显示标题行
--units 指定显示单位(bBsSkKmMgGtTpPeE)
-v, --verbose 详细模式
--separator 指定字段分隔符
-S, --select 根据条件选择逻辑卷
--nameprefixes 在字段名前加前缀(如LV_NAME=)
--rows 以行形式输出
--reportformat 指定报告格式(basic/json)

输出字段说明

字段 说明
LV 逻辑卷名称
VG 所属卷组名称
Attr 逻辑卷属性状态
LSize 逻辑卷大小
Pool 所属精简池(thin pool)
Origin 原始卷(对于快照)
Data% 精简卷使用百分比
Meta% 元数据使用百分比
Move 正在迁移的目标
Log 日志设备
Cpy%Sync 镜像同步百分比
Convert 转换类型

使用示例

示例1:显示所有逻辑卷信息

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

# 显示所有逻辑卷
lvs

# 输出示例:
#   LV     VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
#   root   centos -wi-ao----  50.00g
#   swap   centos -wi-ao----   4.00g
#   home   centos -wi-ao---- 100.00g
#   var    centos -wi-ao----  20.00g
#   backup vg01   Vwi-a-tz--  50.00g tp01        25.50
#   snap1  vg01   swi-a-s---  10.00g      backup 0.01

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

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

# 或
lvs -h

# 输出示例:
#   LV   VG     Attr       LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
#   root centos -wi-ao---- 50g
#   home centos -wi-ao---- 100g

示例3:自定义输出字段

# 只显示LV、VG、大小和属性
lvs -o lv_name,vg_name,lv_size,lv_attr

# 显示精简卷信息
lvs -o lv_name,vg_name,lv_size,pool_lv,data_percent,metadata_percent

# 显示所有可用字段
lvs -o +lv_uuid,lv_tags,segtype,stripes,stripe_size

# 显示快照信息
lvs -o lv_name,vg_name,origin,lv_size,snap_percent

示例4:条件选择逻辑卷

# 显示大于50G的逻辑卷
lvs -S 'lv_size > 50G'

# 显示特定类型的逻辑卷(如精简卷)
lvs -S 'lv_layout = "thin"'

# 显示特定卷组中的逻辑卷
lvs -S 'vg_name = "centos"'

# 显示使用率超过80%的逻辑卷
lvs -S 'data_percent > 80'

# 显示所有快照卷
lvs -S 'lv_attr =~ "^s"'

示例5:显示特定逻辑卷

# 显示指定逻辑卷信息
lvs /dev/centos/root

# 显示多个逻辑卷
lvs /dev/centos/root /dev/centos/home

# 使用通配符
lvs /dev/centos/*

# 显示特定卷组的所有逻辑卷
lvs centos

示例6:详细模式和扩展信息

# 详细模式
lvs -v

# 显示迁移信息
lvs -o +lv_name,move_pv,move_pe_count

# 显示条带化信息
lvs -o +stripes,stripe_size

# 显示镜像信息
lvs -o +mirror_log,copy_percent,sync_percent

示例7:JSON格式输出

# 以JSON格式输出(便于脚本解析)
lvs --reportformat json

# 选择特定字段的JSON输出
lvs --reportformat json -o lv_name,vg_name,lv_size

# 输出示例:
# {
#   "report": [
#     {
#       "lv": [
#         {"lv_name":"root", "vg_name":"centos", "lv_size":"50.00g"},
#         {"lv_name":"swap", "vg_name":"centos", "lv_size":"4.00g"}
#       ]
#     }
#   ]
# }

示例8:显示精简池信息

# 显示所有精简池
lvs -S 'lv_layout = "thin" && lv_role = "thin pool"'

# 显示精简池及其精简卷
lvs -a -o name,vg_name,attr,size,pool_lv,data_percent,metadata_percent

# 监控精简池使用率
lvs -o name,vg_name,data_percent,metadata_percent -S 'lv_layout = "thin" && lv_role = "thin pool"'

属性状态说明

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

  • 第一个字符:卷类型
    • -:普通逻辑卷
    • t:精简卷(thin)
    • V:精简卷(thin volume)
    • s:快照(snapshot)
    • S:精简快照(thin snapshot)
    • p:精简池(thin pool)
    • v:虚拟(virtual)
    • m:镜像(mirrored)
    • M:镜像(未同步)
    • r:RAID
    • R:RAID(未同步)
  • 第二个字符:权限
    • w:可写(Writeable)
    • r:只读(Read-only)
    • R:只读激活(Read-only activated)
  • 第三个字符:分配策略
    • i:继承(Inherited)
    • a:任意(Anywhere)
    • c:连续(Contiguous)
    • l:条带化(Striped)
    • n:正常(Normal)
    • u:未管理(Unmanaged)
  • 第四、五个字符:次要编号
    • -:固定次要编号
    • m:无次要编号
    • 数字:固定次要编号
  • 第六个字符:激活状态
    • a:激活(Active)
    • s:已挂载(Suspended)
    • I:无效(Invalid)
    • -:未激活
  • 第七个字符:设备打开
    • o:打开(Open)
    • X:未知(Unknown)
    • -:未打开
  • 第八个字符:目标类型
    • m:镜像(mirror)
    • r:RAID
    • t:精简(thin)
    • u:未知(unknown)
    • v:虚拟(virtual)
    • -:普通
  • 第九个字符:零设置
    • z:新空间归零(zero)
    • -:新空间未归零

逻辑卷类型

普通逻辑卷

基本的线性逻辑卷,数据连续存储。

lvs -o lv_name,lv_size,segtype
精简逻辑卷

按需分配空间的逻辑卷,适合虚拟化环境。

lvs -S 'lv_layout = "thin"'
快照卷

用于创建卷的快照,支持时间点恢复。

lvs -S 'lv_attr =~ "^s"'

实用技巧

使用提示
  • 使用lvs -a可以查看所有逻辑卷,包括快照和精简池
  • 结合df -h命令可以查看逻辑卷的实际使用情况:df -h | grep -E "^/dev/mapper"
  • 使用lvdisplay可以获得更详细的逻辑卷信息
  • 监控脚本中常用:lvs --noheadings --units g -o lv_name,vg_name,lv_size,data_percent
  • 使用JSON格式输出便于程序解析:lvs --reportformat json
  • 检查快卷健康状态:lvs -S 'lv_attr =~ "^s"' -o lv_name,vg_name,snap_percent

相关命令

lvdisplay

显示逻辑卷的详细信息

pvs

显示物理卷信息

vgs

显示卷组信息

lvcreate

创建逻辑卷

应用场景

逻辑卷监控脚本
#!/bin/bash
# 监控逻辑卷使用率
echo "检查逻辑卷使用情况..."
lvs --noheadings --units g -o lv_name,vg_name,data_percent | \
while read lv vg usage; do
    usage_int=${usage%.*}
    if [ $usage_int -gt 80 ]; then
        echo "警告: 逻辑卷 $lv (卷组: $vg) 使用率达到 $usage%"
    fi
done

# 检查快照空间使用
echo -e "\n检查快照状态..."
lvs --noheadings -S 'lv_attr =~ "^s"' -o lv_name,vg_name,snap_percent | \
while read lv vg usage; do
    usage_int=${usage%.*}
    if [ $usage_int -gt 90 ]; then
        echo "警告: 快照 $lv (卷组: $vg) 使用率达到 $usage%,可能需要删除或扩展"
    fi
done
逻辑卷信息导出
#!/bin/bash
# 导出逻辑卷信息到CSV文件
OUTPUT_FILE="lvm_report_$(date +%Y%m%d).csv"

# 创建CSV文件头
echo "逻辑卷,卷组,大小,类型,使用率%,挂载点" > $OUTPUT_FILE

# 获取逻辑卷信息并追加到CSV
lvs --noheadings --units g -o lv_name,vg_name,lv_size,lv_attr,data_percent | \
while read lv vg size attr usage; do
    # 判断卷类型
    if [[ $attr == t* ]]; then
        type="精简卷"
    elif [[ $attr == s* ]]; then
        type="快照"
    elif [[ $attr == V* ]]; then
        type="精简卷"
    else
        type="普通卷"
    fi

    # 获取挂载点
    mount_point=$(df -h /dev/mapper/${vg}-${lv} 2>/dev/null | tail -1 | awk '{print $6}')
    [ -z "$mount_point" ] && mount_point="未挂载"

    echo "$lv,$vg,$size,$type,$usage,$mount_point" >> $OUTPUT_FILE
done

echo "报告已生成: $OUTPUT_FILE"