vgs -o 无法获取磁盘物理健康状态,仅输出lvm逻辑层信息;物理盘健康需用smartctl从pv设备路径采集,容量预警则基于vgs/pvs字段解析,巡检脚本需分lvm容量分析和底层smart检测两层实现。

直接用 vgs -O 无法获取磁盘物理健康状态(如 SMART 信息),它只输出 LVM 逻辑层信息(卷组、PV 数量、空闲空间等)。物理盘健康需依赖 smartctl,容量预警则可基于 vgs 或 pvs 的字段提取。所以“自动化巡检 + 容量预警”脚本需分两层:LVM 层容量分析 + 底层物理盘健康采集。
一、用 vgs -O 提取关键容量字段(精准控制输出)
vgs -O 的 -O 是过滤选项(如 -O vg_free),不是格式化输出;真正控制字段输出的是 <code>-o(小写 o)。常用组合:
-
vgs -o vg_name,vg_size,vg_free,vg_extent_size,pv_count --units g --noheadings --separator ','→ CSV 格式,适合脚本解析 vgs -o vg_name,vg_free_rate --units % --noheadings | awk '$2+0 → 快速预警低于 10% 空闲率的 VG- 若要关联 PV 物理路径,加
pvs -o pv_name,vg_name,pe_count,pe_alloc --units g --noheadings补充映射
二、获取物理盘健康状态(SMART 不在 LVM 范围内)
LVM 不感知硬盘 SMART,必须从 PV 设备路径(如 /dev/sdb)出发调用 smartctl:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 先查 PV 对应设备:
pvs -o pv_name,vg_name --noheadings | awk '{print $1}' | grep -E '^/dev/(sd|nvme)' | sort -u - 逐个检测:
smartctl -H /dev/sdb | grep "SMART overall-health",返回PASSED或FAILED - 增强判断可加温度、重映射扇区:
smartctl -A /dev/sdb | awk '/Temperature_Celsius|Reallocated_Sector|Pending_Sector/{print}'
三、合成巡检脚本(含邮件预警与日志)
以下为轻量级 shell 脚本核心逻辑(保存为 lvm_health_check.sh):
<font size="2"><pre class="brush:php;toolbar:false;">#!/bin/bash
LOG="/var/log/lvm-health-$(date +\%F).log"
EMAIL="admin@example.com"
<h1>--- LVM 容量预警 ---</h1><p>echo "=== LVM Volume Group Capacity ===" >> "$LOG"
vgs -o vg_name,vg_size,vg_free,vg_free_rate --units g --noheadings --separator ' | ' | \
while IFS=' | ' read -r vg sz fr free_pct; do
free_pct=${free_pct%\%}; [ "$free_pct" -lt 15 ] && echo "ALERT: $vg free only ${free_pct}% ($fr)" | tee -a "$LOG"
done</p><h1>--- 物理盘健康检查 ---</h1><p>echo -e "\n=== Physical Disk SMART Health ===" >> "$LOG"
pvs --noheadings -o pv_name | grep -E '^/dev/(sd|nvme)' | sort -u | while read dev; do
if smartctl -i "$dev" >/dev/null 2>&1; then
health=$(smartctl -H "$dev" 2>/dev/null | grep "overall-health" | awk '{print $NF}')
[ "$health" != "PASSED" ] && echo "CRITICAL: $dev health=$health" | tee -a "$LOG"
else
echo "WARN: $dev not accessible or no SMART support" >> "$LOG"
fi
done</p><h1>--- 发送告警(仅当有 ALERT/CRITICAL)---</h1><p>if grep -q -E "(ALERT|CRITICAL)" "$LOG"; then
mail -s "LVM Health Alert on $(hostname)" "$EMAIL" </p>
添加定时任务:0 3 * * * /path/to/lvm_health_check.sh(每天凌晨 3 点执行)
四、注意事项与增强建议
-
vgs -O是过滤(filter),vgs -o才是字段输出(output)——别混淆大小写 - SMART 需 root 权限,脚本用 cron 运行时确保以 root 用户注册(
sudo crontab -e) - NVMe 盘用
smartctl -a -d nvme /dev/nvme0n1,普通 SATA/SAS 用默认模式 - 生产环境建议接入 Prometheus + node_exporter + custom textfile collector,实现可视化趋势与阈值告警










