惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
I
InfoQ
The Register - Security
The Register - Security
L
LangChain Blog
H
Help Net Security
The GitHub Blog
The GitHub Blog
S
Schneier on Security
博客园 - 【当耐特】
W
WeLiveSecurity
Attack and Defense Labs
Attack and Defense Labs
IT之家
IT之家
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Google DeepMind News
Google DeepMind News
The Cloudflare Blog
H
Heimdal Security Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Y
Y Combinator Blog
雷峰网
雷峰网
N
Netflix TechBlog - Medium
Security Archives - TechRepublic
Security Archives - TechRepublic
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
L
Lohrmann on Cybersecurity
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
The Exploit Database - CXSecurity.com
P
Privacy & Cybersecurity Law Blog
G
GRAHAM CLULEY
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
V
Visual Studio Blog
博客园 - 聂微东
PCI Perspectives
PCI Perspectives
Last Week in AI
Last Week in AI
A
Arctic Wolf
宝玉的分享
宝玉的分享
T
The Blog of Author Tim Ferriss
S
Secure Thoughts
T
Threat Research - Cisco Blogs
GbyAI
GbyAI
云风的 BLOG
云风的 BLOG
D
Darknet – Hacking Tools, Hacker News & Cyber Security
S
SegmentFault 最新的问题
SecWiki News
SecWiki News
月光博客
月光博客
大猫的无限游戏
大猫的无限游戏
Schneier on Security
Schneier on Security
P
Proofpoint News Feed
博客园 - Franky
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
AI
AI
Engineering at Meta
Engineering at Meta

码云笔记

Pinia v4 发布:Vue 状态管理进入新时代 Java中wait()与sleep()方法的不同点是什么? Bonsai27B 重磅落地!27B 大模型实现手机本地运行 ES2026 第 17 版新增的 5 个新特性 高德重磅上线 ABot‑World Studio,消费级显卡就能搭建专属 3D 虚拟世界 Java中final、finally和finalize的区别是什么? 怎么修改Ollama及其模型的默认路径?Ollama路径修改、迁移与重启的操作教程 iOS27 公开测试版正式上线!AI Siri 与液态玻璃成最大看点 Yuku正式发布!比 Vite+ 快 5.4 倍的前端工具链 Linux lsof 命令详解:进程与文件监控实战 Claude Code CLI命令手册 代码审查重构Bug修复场景化工作流 OpenClaw中连接并使用本地Ollama模型的操作教程 GPT-5.6 今天正式上线:OpenAI 掏出”太阳系”全家桶,Sol / Terra / Luna 齐发,打的却是一张”效率牌” Nacos MySQL持久化部署完整教程 GPT-5.6系列正式上线:OpenAI以效能与性价比重塑AI行业竞争格局 Java中序列化与反序列化的概念是什么? 如何在HTML中实现字体颜色根据背景自动变化? JDK动态代理与CGLIB动态代理的区别是什么? OpenClaw数据加密敏感信息保护的完整教程 砸超亿美元算力!亚马逊秘密启动Moonraker项目,Alexa迎来颠覆性升级 PHP 最轻量、结构化 .docx 到 Markdown 转换器 Elephant TypeScript 7.0 正式发布 蚂蚁灵波开源全球首款 MoE 具身视频大模型 LingBot-Video,为机器人世界模型搭建新底座 SpaceX AI联合Cursor推出Grok 4.5 搅动专业AI赛道格局 英伟达Vera CPU落地商用,改写AI代理时代算力竞争规则 什么是端点检测与响应(EDR)以及它的工作原理介绍 Anime.js 已经 10 岁了!作者查出脑瘤,V5 将开始收费! 星链开启全面升级!SpaceX申请十万颗卫星,构建AI时代全球天基基建 PHP 通用表达式语言 CEL-PHP 2.0.0 正式发布! WordPress 7.0 下载,支持AI建站 Docker Desktop(windows)版本下载 详解 Linux 端口监听检查工具:ss、netstat、lsof 京东 JoyAI 上线 UGC 数字人功能,普通人一键打造专属虚拟分身 Java中Integer缓存池的作用是什么? 应对劳动力短缺 日本加码布局AI机器人产业,2040年拟千万台机器人落地各行各业 Java中深拷贝与浅拷贝的区别是什么? Claude旗舰模型收费规则大变:订阅权益取消,转为按量计费 MySQL中的分布式架构和复制策略 如何在 MySQL 中处理 BLOB 和 CLOB 数据类型? 如何在 MySQL 中处理和优化长时间运行的查询? git提交信息分别用什么icon好? Composer安装与配置教程 35岁华为员工偷偷面试,被面试官嘲讽:你是被淘汰的吧?他的回怼让面试官当场闭嘴 谷歌Nano Banana 2 Lite正式上线:4秒极速出图,大幅降低AI生图成本 锐捷交换机运维配置完全参考手册 Vue 3.5:Effect Scope 与响应式污染隔离机制 IS-IS协议基本概念、工作原理与扩展应用 美团LongCat-2.0重磅开源!国产万亿参数大模型解锁超长上下文新能力 LangChain4j 和 LangGraph4j 区别是什么?哪个更好? Claude Code 的聊天和配置可以一键搬进 Codex 了 码云笔记详解Markdown格式兼容性、图片显示失效与同步冲突解决 python实现自动爬取某论坛帖子并导出到Word文档的实战教程 高德低调内测 AI 零代码工具“袋马”,切入小微商家轻量化应用开发赛道 一文看懂OSPF:基础概念、工作原理和应用场景 PHP (Yii2) 接入企业级 SSO 单点登录实战教程 Google终于支持修改Gmail邮箱了?实测告诉你哪些能改,哪些不能改!(附详细教程+FAQ) UCloud 4.6 元 / 月服务器是真的吗? 2026 云服务器完整选购攻略 Webiny:无服务器应用程序框架 Fyrox:现代化的 Rust 游戏引擎 千问发布全球首个原生语言世界模型Qwen-AgentWorld,AI智能体迈入全环境实操新时代 火山引擎上新豆包音频生成模型1.0,AI音频生成实现一键全流程创作 使用Claude Code经常遇到的10个问题 如何批量清理wordpress所有文章和标签,保留设置,保留分类? 谷歌 NotebookLM 内测文献综述矩阵工具,Gemini3.5 赋能 AI 学术结构化研究 京东开源JoyAI-VL-Interaction模型 解锁AI实时视频视觉交互新形态 破解中小商家海报设计难题!MeiGen-AI开源闭环AI设计方案落地 详解Bash set 命令:set -e、set -x 和 set -u 完全指南 Node Plus ?比 pnpm 快 24 倍! Plan-Execute-Replan 和 ReAct 的区别是什么? Anthropic最新报告揭秘:AI编程人机协作成开发者主流工作模式 详解PostgreSQL 18 逻辑复制冲突检测与解决方法 JDK动态代理与CGLIB动态代理的区别是什么? 详解 Linux 中 localhost、127.0.0.1 与 Loopback(回环地址) OpenAI Codex新手入门教程 安装配置AGENTS.md与MCP全流程详解 程序员必备AGENTS.md配置指南 规避AI编码修改乱象 使用 Codex 必装的 12 个插件,你值得拥有! macOS AI CLI工具安装与避坑指南 OpenClaw Gemini Claude报错全套解决方案 智谱AI正式开源GLM-5. 2 模型:主打1M无损上下文与长程代码任务 小米 MiMo Claw 正式版上线 轻量化 Agent 打通金山办公生态 如何定义 Vue 的动态路由?如何获取传过来的动态参数? 记录Claude Code Router 接入过程遇到问题及解决方法 千问AI眼镜凭硬核实力领跑2026智能穿戴赛道 程序员特有的习惯你占了几条! 郝景芳新作半数内容由AI创作,文坛郝景芳AI写作争议再起 使用 iftop、nload、bmon、vnstat 监控 Linux 网络带宽 现代富文本编辑器为什么最终都会抛弃 DOM? Vue 的 v-cloak 和 v-pre 指令有什么作用? 去哪里买抖音号?抖音小号在线购买-抖音小号出售批发 实名闲鱼小号出售|闲鱼账号批发|咸鱼发布账号|出售闲鱼发布账号 zfb号购买-支付宝小号购买-实名支付宝购买号-企业支付宝购买-支付宝小号批发 个人支付宝实名账号出售|v2/v3支付宝账号出售|实名支付宝小号购买 闲鱼账号哪里有卖-闲鱼实名账号购买的途径 Java注解的实现原理是什么? Agentation MemPalace 《置身钉内》之好词好句好段摘抄 AI有声书革命!万象有声全自动生产线,7元/万字颠覆网文有声化行业 详解CentOS 7跨版本迁移Rocky Linux9 生产环境安全升级教程 Java中序列化与反序列化的含义是什么? 18. Python 标准库之 Json 模块
Linux LVM:故障排查与数据恢复指南
巫小巫 普通 · 2026-07-16 · via 码云笔记

AI 概述

本文梳理Linux‑LVM常见故障,包含VG丢失、LV激活失败、PV缺失、thin‑pool占满、快照失效等问题,给出pvs、vgs、dmesg等排查指令。重点讲解vgcfgrestore恢复元数据、误删PV与LV的修复步骤,配套故障排查流程。制定生产环境应急操作清单,强调优先备份元数据再执行修复;建议定时备份元数据、开启lvm2‑monitor服务、监控磁盘状态,减少故障发生,保障业务磁盘稳定运行。

目录

文章目录隐藏

  1. 一、LVM 排查的”急救箱”
  2. 二、常见故障速查表
  3. 三、诊断流程图
  4. 四、备份恢复前的关键操作
  5. 五、lvm 配置文件
  6. 六、vgcfgrestore 救命的命令
  7. 七、PV 误删的恢复
  8. 八、LV 误删的恢复
  9. 九、生产环境故障应急清单
  10. 十、预防胜于救援
  11. 十一、本篇小结
  12. 结语

Linux LVM:故障排查与数据恢复指南

LVM 是 Linux 系统核心磁盘管理工具,运维过程中常出现 VG 丢失、LV 激活失败、PV 异常、快照失效、磁盘只读等各类故障,极易影响业务运行。本文整理全套 LVM 运维排错方案,汇总排查命令、常见故障修复流程、元数据备份恢复方法,同时提供应急操作清单与常态化预防策略,适配生产环境各类突发问题。

# 看 PV 状态
$ pvs
$ pvdisplay
$ pvs -a   # 包括 missing 的

# 看 VG 状态
$ vgs
$ vgdisplay
$ vgscan

# 看 LV 状态
$ lvs
$ lvs -a   # 包括隐藏的 internal LV
$ lvscan

# 看内核级 device-mapper 状态
$ dmsetup info
$ dmsetup ls
$ dmsetup table

# 看系统日志
$ dmesg | grep -i lvm
$ dmesg | grep -i dm-
$ journalctl -u lvm2-monitor

二、常见故障速查表

故障 1:VG 找不到 / “Volume group not found”

$ vgscan
  Reading all physical volumes.  This may take a while...
  No volume groups found

诊断:

# 1. 设备还在吗?
$ ls -l /dev/sdb
$ fdisk -l /dev/sdb

# 2. PV 元数据在吗?
$ pvcreate --uuid <uuid> --restorefile /etc/lvm/backup/vg_data /dev/sdb

# 3. 看备份
$ ls /etc/lvm/backup/
$ cat /etc/lvm/backup/vg_data

修复:请参考后面会讲到的 vgcfgrestore 命令。

故障 2:LV 无法激活 “Failed to activate”

$ lvchange -ay vg_data/lv_db
  Failed to activate lv_db

诊断:

# 1. 看是否有 VG 缺失 PV
$ vgs --partial --verbose vg_data

# 2. 检查 PV
$ pvdisplay /dev/sdb

# 3. 强制激活(危险,可能丢数据)
$ lvchange -ay --partial vg_data/lv_db

故障 3:thin pool 满了,所有 thin LV 只读

$ touch /mnt/thin/test
  touch: cannot touch '/mnt/thin/test': Read-only file system

修复:

# 1. 看占用率
$ lvs -o lv_name,data_percent,metadata_percent vg_data

# 2. 清理大快照
$ lvremove /dev/vg_data/lv_old_snap

# 3. 扩 pool
$ lvextend -l +100%FREE vg_data/tp_data

# 4. thin LV 自动恢复可写

故障 4:device-mapper busy,无法卸载/激活

$ umount /mnt/lv_demo
  umount: /mnt/lv_demo: target is busy

诊断:

# 看谁在用
$ lsof /mnt/lv_demo
$ fuser -m /mnt/lv_demo

# 看打开数
$ lvs -o lv_name,lv_attr vg_data
  # 第六位 'o' = open

修复:

# 1. 杀掉进程
$ fuser -km /mnt/lv_demo

# 2. 强制卸载(仅 ext 系列,xfs 不支持)
$ umount -l /mnt/lv_demo

故障 5:PV 显示 “missing”

$ pvs
  PV         VG      Fmt  Attr PSize  PFree
  /dev/sdb   vg_data lvm2 a--  500.00g 0
  [unknown]  vg_data lvm2 a-m  500.00g 500.00g    # ← 缺失!

诊断:

# 设备名变了?
$ ls -l /dev/sd*
$ dmesg | tail

# 找 LVM 元数据
$ pvscan
$ blkid | grep LVM2

修复:

# 1. 如果盘还在但设备名变了
$ pvcreate --uuid "原 UUID" /dev/sdc    # 用新设备名恢复元数据

# 2. 找回 VG(详见后续章节)
$ vgcfgrestore vg_data

# 3. 移除 missing PV
$ vgreduce --removemissing --force vg_data

故障 6:快照 invalid

$ lvs
  LV            Attr       LSize   
  lv_demo_snap  swi-I-s--- 1.00g    # ← I = invalid

原因:snapshot area 写满。

修复:

# 1. 删除失效快照
$ lvremove -f /dev/vg_data/lv_demo_snap

# 2. 重建
$ lvcreate -L 2G -s -n lv_demo_snap /dev/vg_data/lv_demo

三、诊断流程图

业务报错(如 FS 只读、LV 无法挂载)
│
├─ 看 dmesg / journalctl → 硬件层错误?
│   └─ 是:换盘 / 修复硬件
│
├─ pvs / vgs / lvs → LVM 状态异常?
│   ├─ missing PV → vgcfgrestore / vgreduce --removemissing
│   ├─ thin pool 满 → 扩 pool / 删快照
│   ├─ LV 不存在 → lvcreate 恢复
│   └─ 全部正常 → 检查 FS(见下方)
│
└─ df / mount → FS 错误?
    ├─ ext4: e2fsck 修复
    └─ xfs: xfs_repair 修复(必须先卸载)

四、备份恢复前的关键操作

# 1. 先备份 metadata(重要!)
$ vgcfgbackup vg_data    # 备份到默认位置

# 2. 把当前状态记录下来
$ pvs > /tmp/pvs.bak
$ vgs > /tmp/vgs.bak
$ lvs > /tmp/lvs.bak
$ lvs -a > /tmp/lvs-a.bak

# 3. 看 metadata 历史
$ ls -lt /etc/lvm/archive/vg_data_*.vg

# 4. 不要立刻操作!先看清楚

五、lvm 配置文件

/etc/lvm/lvm.conf中关键字段:

# 备份路径
backup = 1
backup_dir = "/etc/lvm/backup"
archive_dir = "/etc/lvm/archive"

# 设备过滤器(经常出错!)
# 允许所有设备:
filter = [ "a|.*|" ]
# 拒绝 loop 设备:
# filter = [ "r|/dev/loop.*|", "a|.*|" ]

修改后必须重启或:

$ lvmetad -f   # 强制刷新(较老版本)

现代 lvm2 用 lvmpolld 或直接重启服务。

六、vgcfgrestore 救命的命令

这是 LVM 排错的”杀手锏”。

6.1 看历史 metadata

$ ls -lt /etc/lvm/archive/vg_data_*.vg | head
-rw------- 1 root root 4096 Jun 23 02:00 vg_data_00010-1234567.vg
-rw------- 1 root root 4096 Jun 22 18:00 vg_data_00009-1234567.vg
-rw------- 1 root root 4096 Jun 21 12:00 vg_data_00008-1234567.vg

文件格式:vgname_<seq>-<uuid>.vg

6.2 看指定版本的 metadata

# 看 3 个改动前的版本
$ less /etc/lvm/archive/vg_data_00007-1234567.vg

内容是文本,类似:

contents = "Text Format Volume Group"
version = 1
description = "Created *before* executing 'lvextend...'"
creation_host = "server01"
creation_time = 1700000000
...
physical_volumes {
    pv0 {
        device = "/dev/sdb"
        ...
    }
    pv1 {
        device = "/dev/sdc"
        ...
    }
}
logical_volumes {
    lv_db {
        ...
    }
}

6.3 恢复到指定版本

# 1. 确认要恢复的版本
$ head -1 /etc/lvm/archive/vg_data_00007-1234567.vg
contents = "Text Format Volume Group"
version = 1
description = "Created *before* executing 'lvreduce /dev/vg_data/lv_db...'"

# 2. 恢复
$ vgcfgrestore -f /etc/lvm/archive/vg_data_00007-1234567.vg vg_data
  Restored volume group vg_data.

# 3. 激活
$ vgchange -ay vg_data

# 4. 验证
$ lvs vg_data

6.4 找不到正确的 backup?

# 看 metadata 的位置和 UUID
$ cat /etc/lvm/backup/vg_data | grep -i uuid

也可以从未损坏的 PV 里恢复:

# 1. 看 PV 上的 metadata
$ pvs --verbose /dev/sdb

# 2. 用 PV 恢复
$ pvcreate --restorefile /etc/lvm/backup/vg_data --uuid <pv-uuid> /dev/sdb

七、PV 误删的恢复

# 场景:vgreduce 误删了 PV,VG 数据"消失"
# 1. 看 backup
$ ls /etc/lvm/backup/

# 2. 看 PV 上是否有残留的 metadata
$ strings /dev/sdb | grep -A 2 "LVM2"

如果 PV 上 metadata 还在:

# 用 metadata 重建 PV
$ pvcreate --uuid <原 UUID> --restorefile /etc/lvm/backup/vg_data /dev/sdb

# 恢复 VG
$ vgcfgrestore vg_data

# 激活
$ vgchange -ay vg_data

八、LV 误删的恢复

LV 删除后理论上无法恢复,但:

8.1 立刻做(关键!)

# 1. 立刻停掉所有可能写入的进程
$ umount /mnt/lv_demo

# 2. 不要做 fsck,不要做 resize

# 3. 不要对底层 PV 做任何操作

8.2 看 metadata 备份

$ ls /etc/lvm/archive/vg_data_*.vg

找到删除前的版本。

8.3 恢复 VG metadata

# 用备份恢复 VG
$ vgcfgrestore -f /etc/lvm/archive/vg_data_00005-1234567.vg vg_data

# 检查 LV 是否回来
$ lvs vg_data

8.4 文件系统层修复

LV 回来了,但文件系统可能不一致:

# ext4
$ e2fsck -f /dev/vg_data/lv_demo

# xfs
$ xfs_repair /dev/vg_data/lv_demo

8.5 实在恢复不了怎么办?

  • 从备份恢复(这是为什么备份重要);
  • 用 testdisk / photorec 尝试扫描底层 block;
  • 找专业数据恢复公司。

九、生产环境故障应急清单

把这份清单打印出来贴墙上:

  1. 立刻:停止写入,umount 所有相关 LV
  2. 不要:立刻重做 LVM 操作、立刻 fsck
  3. 收集:dmesg、pvs、vgs、lvs -a、pvdisplay、lvdisplay
  4. 备份:cp /etc/lvm/backup/* /safe/path/
  5. 检查:metadata 历史 (ls /etc/lvm/archive/)
  6. 恢复:vgcfgrestore
  7. 验证:e2fsck / xfs_repair
  8. 挂载:mount
  9. 通知:相关业务方恢复情况

十、预防胜于救援

# 1. 每天备份 metadata 到安全位置
$ crontab -e
0 3 * * * cp -a /etc/lvm/backup/* /backup/lvm-metadata/

# 2. 监控 metadata 序列号变化
$ vgs -o vg_name,vg_mda_count,vg_seqno

# 3. 启用 lvmetad 自动缓存(性能更好)
$ lvmconf | grep use_lvmetad
use_lvmetad=1

# 4. 启用 lvm2-monitor 服务(自动检测)
$ systemctl enable lvm2-monitor
$ systemctl start lvm2-monitor

十一、本篇小结

LVM 排错的核心思路:

  1. 不要慌,先收集信息(pvs/vgs/lvs -a/dmesg);
  2. 不要立刻操作,先备份当前状态;
  3. /etc/lvm/backup//etc/lvm/archive/恢复;
  4. vgcfgrestore是救命稻草。

三大日常预防措施:

  1. 定期备份 metadata;
  2. 启用 lvm2-monitor 服务;
  3. 监控 SMART 提前换盘。

结语

本文系统梳理了 LVM 各类典型故障的诊断逻辑与恢复方案,明确了以信息收集、状态备份、元数据恢复为核心的排错思路,重点讲解了 vgcfgrestore 核心恢复命令。规范的应急操作流程可高效解决绝大多数 LVM 故障,同时常态化备份、监控巡检等预防手段,能从根源降低生产环境 LVM 故障发生率。

以上关于Linux LVM:故障排查与数据恢复指南的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。

「点点赞赏,手留余香」

12

给作者打赏,鼓励TA抓紧创作!

微信微信 支付宝支付宝

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » Linux LVM:故障排查与数据恢复指南