Linux命令-pvchange(修改物理卷属性)

Linux命令-pvchange(修改物理卷属性)

    • [🔰 简介](#🔰 简介)
    • [📖 语法](#📖 语法)
    • [⚙️ 选项](#⚙️ 选项)
    • [💡 示例](#💡 示例)
      • [示例 1:禁止 PV 分配(维修前锁定)](#示例 1:禁止 PV 分配(维修前锁定))
      • [示例 2:恢复 PV 分配权限](#示例 2:恢复 PV 分配权限)
      • [示例 3:重新生成 PV UUID](#示例 3:重新生成 PV UUID)
      • [示例 4:条件筛选批量修改](#示例 4:条件筛选批量修改)
    • [⚠️ 注意](#⚠️ 注意)
    • [📚 相关命令](#📚 相关命令)
    • [📝 总结](#📝 总结)

快速参考pvchange 用于修改 LVM 物理卷的属性,最常用于切换 PV 的分配权限(允许/禁止从中分配 PE),也可用于重新生成 PV 的 UUID。这是 PV 维护的重要命令,特别是在需要临时隔离某个 PV 时。


🔰 简介

pvchange 允许管理员在不删除、不重建 PV 的情况下修改其运行时属性。两个核心用途:一是通过 -x y/n 控制 PV 的 Allocatable 状态,实现 PV 的在线隔离与恢复;二是通过 -u 重新生成 UUID,解决 UUID 冲突问题。

核心功能

  • 切换 PV 的分配权限(Allocatable 属性)
  • 生成新的 PV UUID
  • 批量修改或条件筛选修改

典型使用场景

  • 磁盘出现 I/O 错误,临时禁止分配以进行维护
  • 有计划地更换磁盘,先锁定旧 PV 再迁移数据
  • PV UUID 冲突(如克隆虚拟机后)导致 LVM 无法正常识别

📖 语法

bash 复制代码
pvchange [选项] [PV路径...]

不指定 PV 路径时,默认作用于所有 PV。使用 --select 可精确筛选目标 PV。


⚙️ 选项

选项 说明
-x, --allocatable y/n 允许(y)或禁止(n)从此 PV 分配 PE
-u, --uuid 生成新的随机 UUID 分配给 PV
-a, --all 应用于所有 PV
-S, --select 按条件筛选目标 PV
-v, --verbose 显示详细执行过程
-t, --test 测试模式,不实际执行
-A, --autobackup y/n 是否自动备份元数据(默认 y)
--metadatacopies 0/1/2 设置元数据副本数

💡 示例

示例 1:禁止 PV 分配(维修前锁定)

在计划更换或维修一块磁盘前,先锁定它,防止新数据写入。

bash 复制代码
# 当前状态:PV 可分配
$ pvs /dev/sdb1
  PV         VG   Fmt  Attr PSize   PFree
  /dev/sdb1  vg01 lvm2 a--  100.00g 20.00g
#                       ^^^ a-- 表示可分配

# 禁止分配
$ pvchange -x n /dev/sdb1
  Physical volume "/dev/sdb1" changed
  1 physical volume changed / 0 physical volumes not changed

# 验证状态变化
$ pvs /dev/sdb1
  PV         VG   Fmt  Attr PSize   PFree
  /dev/sdb1  vg01 lvm2 ---  100.00g 20.00g
#                       ^^^ --- 表示不可分配

# 迁移已有数据(PV 上仍有分配的空间)
$ pvmove /dev/sdb1
  /dev/sdb1: Moved: 30.00%
  /dev/sdb1: Moved: 65.00%
  /dev/sdb1: Moved: 100.00%

# 确认数据已清空
$ pvs -o pv_name,pv_used /dev/sdb1
  PV         PUsed
  /dev/sdb1      0

# 从 VG 中安全移除
$ vgreduce vg01 /dev/sdb1
  Removed "/dev/sdb1" from volume group "vg01"

# 删除 LVM 标签(如需要)
$ pvremove /dev/sdb1
  Labels on physical volume "/dev/sdb1" successfully wiped.

示例 2:恢复 PV 分配权限

维护完成后,重新启用 PV。

bash 复制代码
# 维护前状态(假设正在维护中,不可分配)
$ pvs /dev/sdb1
  PV         VG   Fmt  Attr PSize   PFree
  /dev/sdb1  vg01 lvm2 ---  100.00g 80.00g

# 恢复分配权限
$ pvchange -x y /dev/sdb1
  Physical volume "/dev/sdb1" changed
  1 physical volume changed / 0 physical volumes not changed

# 验证
$ pvs /dev/sdb1
  PV         VG   Fmt  Attr PSize   PFree
  /dev/sdb1  vg01 lvm2 a--  100.00g 80.00g
#                       ^^^ 已恢复为可分配状态

# 创建新 LV 验证可用性
$ lvcreate -L 10G -n test_lv vg01 /dev/sdb1
  Logical volume "test_lv" created.

示例 3:重新生成 PV UUID

当 PV UUID 冲突时(常见于克隆虚拟机或磁盘镜像后),需要生成新的 UUID。

bash 复制代码
# 克隆虚拟机后,发现 UUID 冲突报错
$ pvs
  WARNING: Duplicate UUID XxYyZz-... on /dev/sdb1 and /dev/sdc1
  PV         VG   Fmt  Attr PSize   PFree
  /dev/sdb1  vg01 lvm2 a--  100.00g 20.00g
  /dev/sdc1  vg01 lvm2 a--  100.00g 20.00g

# 查看当前 UUID
$ pvs -o pv_name,pv_uuid /dev/sdc1
  PV         PV UUID
  /dev/sdc1  XxYyZz-AaBb-CcDd-EeFf-GgHh-IiJj-KkLlMm

# 生成新的随机 UUID
$ pvchange -u /dev/sdc1
  Physical volume "/dev/sdc1" changed
  1 physical volume changed / 0 physical volumes not changed

# 验证新 UUID
$ pvs -o pv_name,pv_uuid /dev/sdc1
  PV         PV UUID
  /dev/sdc1  NnOoPp-QqRr-SsTt-UuVv-WwXx-YyZz-112233

# UUID 冲突警告消失
$ pvs
  PV         VG   Fmt  Attr PSize   PFree
  /dev/sdb1  vg01 lvm2 a--  100.00g 20.00g
  /dev/sdc1  vg01 lvm2 a--  100.00g 20.00g

示例 4:条件筛选批量修改

使用 --select 批量修改满足条件的 PV。

bash 复制代码
# 当前环境 PV 状态
$ pvs -o pv_name,pv_size,pv_free,vg_name
  PV         PSize   PFree VG
  /dev/sda2  238.00g     0  ubuntu
  /dev/sdb1  100.00g  5.00g vg01
  /dev/sdc1  200.00g 50.00g vg01
  /dev/sdd1  500.00g 100.00g vg01

# 锁定所有剩余空间不足 10G 的 PV
$ pvchange -x n --select "pv_free < 10g"
  Physical volume "/dev/sdb1" changed
  1 physical volume changed / 0 physical volumes not changed

# 验证
$ pvs -o pv_name,pv_free,pv_attr
  PV         PFree  Attr
  /dev/sdb1   5.00g ---
  /dev/sdc1  50.00g a--
  /dev/sdd1 100.00g a--

⚠️ 注意

-x n 的影响范围 :将 PV 设为不可分配后,已分配在该 PV 上的现有数据不受影响(仍可读写)。该操作仅阻止未来在此 PV 上分配新的 PE(如创建新 LV 或扩展现有 LV)。
-x n 可能阻止 LV 创建:如果 VG 中所有 PV 都被设为不可分配,则无法创建新的 LV 或扩展现有 LV。

bash 复制代码
# 提前检查
$ pvs -o pv_name,pv_allocatable --select allocatable=allocatable

UUID 冲突的风险 :两个 PV 具有相同的 UUID 会导致 LVM 行为不可预测------可能某些命令只看到一个 PV,或者在激活 VG 时随机选择一个。UUID 冲突必须立即解决。
-u 不修改数据pvchange -u 只修改 LVM 元数据中的 UUID 字段,不会影响设备上任何用户数据,操作是安全的。


📚 相关命令

命令 关系
pvs 查看 PV 属性列表
pvdisplay 查看 PV 详细属性
pvcreate --uuid 创建时指定 UUID
pvmove 迁移 PV 上的数据
vgchange 修改卷组属性

📝 总结

pvchange 是 LVM 运维中精细化管理 PV 的关键命令。-x n 用于磁盘维护前的安全锁定,-u 用于解决克隆带来的 UUID 冲突。掌握这两个核心场景,能在不中断服务的情况下安全地管理 PV 生命周期。

💡 提示 :使用 pvchange --helpman pvchange 获取最新文档。操作前先用 pvchange -t 测试,确认目标 PV 正确。