Linux命令-pvscan(扫描磁盘上的物理卷并更新缓存)
-
- [🔰 简介](#🔰 简介)
- [📖 语法](#📖 语法)
- [⚙️ 选项](#⚙️ 选项)
- [💡 示例](#💡 示例)
-
- [示例 1:基本扫描](#示例 1:基本扫描)
- [示例 2:简短输出格式](#示例 2:简短输出格式)
- [示例 3:激活所有 PV 对应的卷组](#示例 3:激活所有 PV 对应的卷组)
- [示例 4:新磁盘添加后的完整流程](#示例 4:新磁盘添加后的完整流程)
- [⚠️ 注意](#⚠️ 注意)
- [📚 相关命令](#📚 相关命令)
- [📝 总结](#📝 总结)
快速参考 :pvscan 用于扫描系统中的所有磁盘设备以发现 LVM 物理卷,并更新 LVM 缓存文件。它是在添加新磁盘后让 LVM 识别 PV 的关键命令。
🔰 简介
pvscan 负责遍历系统中的所有块设备,读取设备头部的 LVM 元数据标签,识别物理卷并将其信息写入 LVM 缓存(/etc/lvm/cache/.cache)。LVM 其他命令(如 vgs、lvs)依赖这份缓存来快速获取 PV 信息,因此当系统新增或移除磁盘后,必须先运行 pvscan 刷新缓存。
核心功能:
- 扫描所有块设备发现 LVM 物理卷
- 更新 LVM 缓存文件
- 激活/停用找到的 PV
- 创建缺失的设备节点
典型使用场景:
- 新增硬盘并执行
pvcreate后,运行pvscan让系统识别 - 系统从备份恢复或磁盘迁移后,重建 LVM 缓存
- 挂载故障排查时刷新设备状态
📖 语法
bash
pvscan [选项]
不带选项执行时,扫描所有设备并输出发现的 PV 列表,同时更新缓存。
⚙️ 选项
| 选项 | 说明 |
|---|---|
-a, --activate y/n/ay |
激活找到的卷组(y=部分激活,ay=自动激活) |
-b, --background |
后台扫描模式(配合 -a 使用) |
-d, --debug |
调试模式,输出更多诊断信息 |
-n, --novolumegroup |
不激活卷组,仅扫描 |
-s, --short |
简短输出格式 |
-u, --uuid |
显示 PV 的 UUID |
-e, --exported |
仅显示已导出的 VG |
-c, --colon |
以冒号分隔输出 |
--cache |
更新 /etc/lvm/cache/.cache 缓存 |
--ignorelockingfailure |
锁定失败时继续执行(救援模式) |
💡 示例
示例 1:基本扫描
新增磁盘或 PV 后运行,让系统识别新设备。
bash
# 基本扫描,发现所有 PV
$ pvscan
PV /dev/sda2 VG ubuntu lvm2 [238.00 GiB / 0 free]
PV /dev/sdb1 VG vg01 lvm2 [100.00 GiB / 20.00 GiB free]
PV /dev/sdc1 VG vg01 lvm2 [200.00 GiB / 50.00 GiB free]
PV /dev/sdd1 lvm2 [50.00 GiB]
Total: 4 [588.00 GiB] / in use: 3 [538.00 GiB] / in no VG: 1 [50.00 GiB]
输出解读:
- 第一行
PV /dev/sda2 VG ubuntu:该 PV 属于卷组ubuntu,总大小 238G,已用完 in use:3 个 PV 共 538G 已被卷组使用in no VG:1 个 50G 的 PV 尚未加入任何卷组
示例 2:简短输出格式
只看摘要,不展示每个 PV 的详情。
bash
# 简短输出
$ pvscan -s
PV /dev/sda2 - VG ubuntu
PV /dev/sdb1 - VG vg01
PV /dev/sdc1 - VG vg01
PV /dev/sdd1
# 结合 UUID 显示
$ pvscan -s -u
PV /dev/sda2 - VG ubuntu - UUID aBcDeF-GhIj-Kl
PV /dev/sdb1 - VG vg01 - UUID AbCdEf-GhIj-Kl
PV /dev/sdc1 - VG vg01 - UUID BcDeFg-HiJk-Lm
PV /dev/sdd1 - UUID CdEfGh-IjKl-Mn
示例 3:激活所有 PV 对应的卷组
在救援模式或系统启动后自动激活所有 VG。
bash
# 激活所有已发现的卷组
$ pvscan -a y
PV /dev/sda2 VG ubuntu lvm2 [238.00 GiB / 0 free]
PV /dev/sdb1 VG vg01 lvm2 [100.00 GiB / 20.00 GiB free]
PV /dev/sdc1 VG vg01 lvm2 [200.00 GiB / 50.00 GiB free]
Activated.
# 查看激活状态
$ lvdisplay vg01 | grep Status
Status available
# 自动激活模式(检测是否为系统根卷组)
$ pvscan --cache -a ay
示例 4:新磁盘添加后的完整流程
从物理连接到 LVM 识别的完整操作链路。
bash
# 1. 查看当前磁盘布局
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 256G 0 disk
|-sda1 8:1 0 1G 0 part /boot
|-sda2 8:2 0 238.5G 0 part /
# 2. 确认新磁盘被内核识别
$ dmesg | tail -5
[12345.678] sd 2:0:0:0: [sdb] 209715200 512-byte logical blocks: (107 GB)
[12345.679] sd 2:0:0:0: [sdb] Write Protect is off
[12345.680] sd 2:0:0:0: [sdb] Attached SCSI disk
# 3. 创建物理卷
$ pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created.
# 4. 运行 pvscan 刷新缓存
$ pvscan
PV /dev/sda2 VG ubuntu lvm2 [238.00 GiB / 0 free]
PV /dev/sdb lvm2 [100.00 GiB]
Total: 2 [338.00 GiB] / in use: 1 [238.00 GiB] / in no VG: 1 [100.00 GiB]
# 5. 扩展卷组
$ vgextend ubuntu /dev/sdb
Volume group "ubuntu" successfully extended
⚠️ 注意
缓存的重要性 :LVM 使用
/etc/lvm/cache/.cache文件存储设备发现结果。如果该文件损坏或过期,可能导致vgs/lvs显示不全。此时需要运行pvscan --cache重建缓存。
激活模式选择 :-a y激活所有能找到的 VG(如果 PV 数量足够);-a ay是自动激活模式,只有当 VG 的 PV 满足激活条件时才激活(通常用于 initramfs 中的根文件系统激活)。
--ignorelockingfailure使用场景 :当文件锁/run/lock/lvm/因系统异常而残留时,LVM 命令会因无法获取锁而失败。在确认没有并发 LVM 操作的前提下,可以用--ignorelockingfailure绕过锁定继续执行,常用于救援模式修复。
📚 相关命令
| 命令 | 关系 |
|---|---|
pvs |
简洁列出 PV 摘要信息 |
pvcreate |
创建新的物理卷 |
vgscan |
扫描并重建卷组缓存 |
lvscan |
扫描并列出逻辑卷 |
vgchange -a y |
激活卷组(替代 pvscan -a) |
📝 总结
pvscan 是 LVM 设备发现链路的入口命令。它负责扫描块设备、识别 LVM 标签、更新缓存,并可按需激活卷组。在新增磁盘、系统迁移、故障恢复等场景中,pvscan 是让 LVM 正确"看到"硬件的一步。记住:新 PV 创建后,先 pvscan 再 vgextend;系统异常后,先 pvscan --cache 再排查。
💡 提示 :使用
pvscan --help或man pvscan获取最新文档。如果扫描结果与预期不符,可使用pvscan -d查看详细扫描日志定位问题。