Linux命令-vgscan(扫描所有磁盘上的卷组并重建缓存)
快速参考:vgscan 用于扫描系统中所有已发现的物理卷,查找完整的卷组并重建 LVM 缓存文件。它是系统迁移、磁盘更换和挂载故障排查场景中的关键命令。
🔰 简介
vgscan 遍历所有已知的块设备(基于 /dev 下的设备列表和 LVM 缓存中的信息),读取每个设备上的 LVM 元数据,识别出完整的卷组(Volume Group),并将结果写入缓存文件(/etc/lvm/cache/.cache)。
核心功能:
- 扫描所有块设备发现卷组
- 重建 LVM 卷组缓存
- 创建缺失的
/dev/VG名/设备节点 - 更新设备映射关系
典型使用场景:
- 系统迁移或磁盘更换后重建 LVM 缓存
- 挂载故障排查——VG 未激活
- 磁盘重新连接后让系统识别
- 从备份恢复后重建设备映射
📖 语法
vgscan [选项]
不带选项时,扫描所有设备并输出发现的卷组信息。
⚙️ 选项
| 选项 | 说明 |
|---|---|
-m, --mknodes | 在 /dev 下创建缺失的设备节点 |
--cache | 仅更新缓存,不扫描新设备 |
--ignorelockingfailure | 锁定失败时继续执行(救援模式) |
-v, --verbose | 显示详细扫描过程 |
-d, --debug | 调试模式,输出更多诊断信息 |
-P, --partial | 即使卷组不完整(缺少 PV),也尝试处理 |
💡 示例
示例 1:基本扫描——发现卷组
系统启动后或磁盘重新连接后的标准操作。
# 扫描并发现卷组
$ vgscan
Found volume group "ubuntu" using metadata type lvm2
Found volume group "vg01" using metadata type lvm2
Found volume group "vg_data" using metadata type lvm2
# 验证缓存已更新
$ vgs
VG #PV #LV #SN Attr VSize VFree
ubuntu 1 2 0 wz--n- 238.00g 0
vg01 2 3 0 wz--n- 300.00g 70.00g
vg_data 1 1 0 wz--n- 500.00g 200.00g
# 检查缓存文件
$ ls -la /etc/lvm/cache/.cache
-rw------- 1 root root 4096 Jun 14 10:30 /etc/lvm/cache/.cache
示例 2:创建缺失的设备节点
磁盘更换或系统迁移后,/dev/VG名/ 目录可能不存在。
# 症状:卷组已识别但设备节点不存在
$ vgs
VG #PV #LV #SN Attr VSize VFree
vg01 2 3 0 wz--n- 300.00g 70.00g
$ ls /dev/vg01/
ls: cannot access '/dev/vg01/': No such file or directory
# 扫描并创建缺失的设备节点
$ vgscan --mknodes
Found volume group "vg01" using metadata type lvm2
Creating volume group device nodes for vg01
# 验证设备节点已创建
$ ls /dev/vg01/
data_lv log_lv backup_lv
# 逻辑卷现在可以正常挂载
$ mount /dev/vg01/data_lv /mnt/data
示例 3:仅更新缓存
已知设备状态未变,只需刷新缓存。
# 手动刷新缓存(不扫描新设备)
$ vgscan --cache
Reading volume groups from cache.
Found volume group "ubuntu" using metadata type lvm2
Found volume group "vg01" using metadata type lvm2
# 配合激活使用
$ vgscan --cache -a y
# 更新缓存并激活所有找到的 VG
示例 4:救援模式——绕过锁定故障
系统异常重启后,LVM 锁文件可能残留,导致后续命令失败。
# 正常 vgscan 可能因锁文件被阻塞
$ vgscan
/run/lock/lvm/V_ubuntu:aux: open failed: Permission denied
Can't get lock for ubuntu
# 救援模式(确认没有其他 LVM 进程在运行后)
$ vgscan --ignorelockingfailure
WARNING: Locking disabled. Be careful! This could corrupt metadata.
Found volume group "ubuntu" using metadata type lvm2
Found volume group "vg01" using metadata type lvm2
# 注意:救援模式绕过锁定保护,确保操作环境安全
$ ps aux | grep lvm
# 确认没有其他 LVM 进程在运行
# 操作完成后重启恢复正常锁定
$ reboot
示例 5:部分 VG 处理
当一个 VG 的 PV 丢失导致卷组不完整时。
# 场景:一块磁盘故障,VG 中缺少一个 PV
$ vgscan
Couldn't find device with uuid XxYyZz-....
Found volume group "vg01" using metadata type lvm2
# 使用部分模式
$ vgscan -P
Couldn't find device with uuid XxYyZz-....
Found volume group "vg01" using metadata type lvm2
WARNING: Volume group "vg01" is missing a physical volume
# 查看缺失情况
$ vgs -o +pv_missing
VG #PV #LV #SN Attr VSize VFree Missing PV
vg01 3 3 0 wz--n- 310.00g 10.00g /dev/sdd1
# 激活不完整的 VG(尽力使用可用 PV)
$ vgchange -a y --partial vg01
⚠️ 注意
缓存文件:LVM 使用
/etc/lvm/cache/.cache缓存设备扫描结果。如果该文件损坏,vgs/lvs/pvs等命令可能显示过期或错误的信息。通常删除缓存文件后重新vgscan即可解决:rm -f /etc/lvm/cache/.cache vgscan
--mknodes的必要性:在 LiveCD 或救援环境中,/dev通常是 tmpfs,重启后所有设备节点丢失。必须先运行vgscan --mknodes创建节点,后续的mount操作才能正常执行。
锁定故障排查:如果
vgscan因锁定问题卡住,首先检查是否有其他 LVM 进程在运行(ps aux | grep lvm)。如果确认无并发操作,可以安全地使用--ignorelockingfailure。但注意这绕过了 LVM 的元数据保护机制,操作完成后应尽快重启恢复正常状态。
扫描性能:在拥有大量磁盘的系统中,
vgscan可能需要较长时间。可以通过配置/etc/lvm/lvm.conf中的filter选项限制扫描范围来加速:filter = [ "a|^/dev/sd[a-z]$|", "r|.*|" ]
📚 相关命令
| 命令 | 关系 |
|---|---|
pvscan | 扫描物理卷(更底层) |
lvscan | 扫描并列出逻辑卷 |
vgs | 查看卷组列表 |
vgdisplay | 查看卷组详细信息 |
vgchange -a y | 激活卷组 |
dmsetup ls | 查看设备映射器状态 |
📝 总结
vgscan 是 LVM 卷组发现和缓存管理的核心命令。在系统迁移、磁盘更换和救援恢复三大场景中,vgscan --mknodes 是挂载 LVM 逻辑卷前的必须步骤。当遇到 “volume group not found” 或 “device not found” 错误时,先运行 vgscan 刷新缓存,往往能解决大部分问题。
💡 提示:使用
vgscan --help或man vgscan获取最新文档。救援环境中记住三个步骤:vgscan --mknodes→vgchange -a y→mount。
&spm=1001.2101.3001.5002&articleId=163946112&d=1&t=3&u=63bb40c4733249ba9a16eb1c64c7a95b)
462

被折叠的 条评论
为什么被折叠?



