Linux命令-pvscan(扫描磁盘上的物理卷并更新缓存)

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 其他命令(如 vgslvs)依赖这份缓存来快速获取 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 创建后,先 pvscanvgextend;系统异常后,先 pvscan --cache 再排查。

💡 提示 :使用 pvscan --helpman pvscan 获取最新文档。如果扫描结果与预期不符,可使用 pvscan -d 查看详细扫描日志定位问题。