pvresize 命令详解

一、命令概述

pvresizeLVM(Logical Volume Manager,逻辑卷管理)工具集中的物理卷(PV)大小调整工具,核心功能是扩大或缩小已创建的物理卷容量,使其与底层存储设备(如磁盘分区、RAID 设备)的实际大小匹配。

其核心特性与适用场景:

  1. 双向调整
    • 扩容:底层设备(如分区)扩大后,同步扩大 PV 容量,使其可用空间增加(自动检测新大小,无需手动指定);
    • 缩容:需手动指定新大小(--setphysicalvolumesize),且严格限制——PV 上已分配的物理扩展(PE)不能超出新大小(否则拒绝缩容,避免数据丢失);
  2. 在线操作:支持调整已加入卷组(VG)且包含活跃逻辑卷(LV)的 PV(无需卸载 LV,不中断业务);
  3. 底层依赖:调整 PV 前需先调整底层存储设备大小(如用 parted/fdisk 扩大/缩小分区,用 mdadm 调整 RAID 容量),PV 大小不能超过底层设备容量。

二、命令语法

pvresize 语法简洁,必须指定待调整的 PV,选项仅需在“缩容”或“特殊场景”时使用:

pvresize [OPTION]... PV...
  • 参数说明
    • PV...:必填,待调整的物理卷设备路径(可多个,用空格分隔),如 /dev/sda1/dev/mapper/raid-pv
    • OPTION:可选,仅核心选项 --setphysicalvolumesize 用于缩容,其他为通用选项(如调试、测试、输出格式)。

三、选项详解

pvresize 选项按功能分为 核心大小控制输出与调试LVM 通用选项 三类,核心选项仅 --setphysicalvolumesize 需重点关注(缩容必用),表格含详细说明与实用示例:

选项 功能描述 关键说明与示例
### 1. 核心大小控制选项 仅用于缩容,扩容无需此选项(自动检测底层设备新大小)
--setphysicalvolumesize Size[m|UNIT] 手动指定 PV 的新大小(缩容必用),需满足:
- 新大小 ≤ 底层设备实际大小;
- PV 上所有已分配 PE 的结束位置 ≤ 新大小(否则拒绝缩容);
单位支持 b(字节)、k(KB)、m(MB)、g(GB)等(2 的幂,如 k=1024)。
示例:将 /dev/sda1 缩容至 40GB(需先确保底层分区已缩容至 ≥40GB,且无 PE 超出 40GB)
pvresize --setphysicalvolumesize 40G /dev/sda1
### 2. 输出与调试选项 调整操作结果的输出形式,或排查调整失败原因
--reportformat basic|json 指定输出格式:
- basic(默认):文本格式,显示调整前后的 PV 大小;
- json:JSON 格式,便于脚本解析(含调整后的所有属性,如大小、PE 数量)。
示例:以 JSON 格式输出 /dev/sda1 调整结果
pvresize --reportformat json /dev/sda1
-v, --verbose ... 启用 详细输出模式(级别 1-4),显示调整过程(如“检测到底层设备大小为 100GB”“更新 PV 元数据至 100GB”)和关键结果(如“PV 扩容成功”)。 示例:详细查看 /dev/sda1 的扩容过程
pvresize -v 2 /dev/sda1
-d, --debug ... 启用 调试模式(级别 1-6),输出元数据读取、设备大小检测、PE 校验等细节(如“检查 PE 256 是否超出新大小 40GB”),用于排查调整失败(如缩容被拒绝的原因)。 示例:调试 /dev/sda1 缩容失败问题
pvresize -d 3 --setphysicalvolumesize 40G /dev/sda1
-q, --quiet 抑制输出(包括正常信息和警告),仅返回退出码(0=成功,非0=失败),适合脚本自动化调整。 示例:脚本中静默扩容 /dev/sda1,仅判断结果
`pvresize -q /dev/sda1 && echo “PV 扩容成功”
### 3. 测试与安全选项 模拟调整操作,避免误修改数据
-t, --test 测试模式:仅模拟调整流程(如检测设备大小、校验 PE 位置、生成调整计划),不实际修改 PV 元数据,用于验证调整可行性(如缩容是否会触发数据风险)。 示例:测试将 /dev/sda1 缩容至 40GB,不实际执行
pvresize -t --setphysicalvolumesize 40G /dev/sda1
### 4. LVM 通用选项 控制配置、权限、帮助等通用行为,与其他 LVM 工具(如 pvcreate)一致
-h, --help/--longhelp 显示帮助信息:
- -h:简短帮助(选项列表与语法);
--longhelp:完整帮助(含示例与缩容限制说明)。
示例:查看缩容的详细限制说明
pvresize --longhelp
--config String 临时覆盖 lvm.conf 配置(如指定设备扫描路径),格式与 lvm.conf 一致(如 devices/filter=[\"a/sda1/\"])。 示例:仅扫描 /dev/sda1 并调整大小
pvresize --config "devices/filter=[\"a/sda1/\", \"r/.*/\"]" /dev/sda1
--version 输出 pvresize 版本信息(如 LVM version 2.03.11),确认工具兼容性(不同版本缩容校验逻辑可能差异)。 示例:查看版本
pvresize --version

四、关键变量说明

pvresize 中的变量(如 PVSize[UNIT])需遵循 LVM 规范,错误输入会导致调整失败:

变量名 含义与格式说明 示例
PV 待调整的物理卷设备路径(必须是已通过 pvcreate 初始化的设备),支持指定 PE 范围(仅用于特殊场景,如局部调整,日常无需使用):
- 范围格式:PV[:PE-PE](如 /dev/sda1:100-200,仅调整该 PE 范围对应的容量,极少用)。
示例:调整整个 PV
/dev/sda1
示例:(特殊)调整 PE 100-200 对应的容量
/dev/sda1:100-200
Size[UNIT] 尺寸参数(仅 --setphysicalvolumesize 用),单位为 2 的幂(如 k=1024m=1024²),支持:
- 基础单位:b(字节)、s(扇区,512 字节);
- 常用单位:k(KB)、m(MB)、g(GB)、t(TB)。
示例:40GB 大小
40G40960M(两种写法等价)
String 文本参数(如配置字符串、格式类型),含空格需用引号包裹(如 --config "global/debug_level=3")。 示例:含空格的配置字符串
--config "devices/filter=[\"a/sda1/\"]"

五、常用示例(覆盖扩容与缩容核心场景)

示例 1:PV 扩容(底层分区已扩大)

需求:用 parted/dev/sda1 分区从 50GB 扩大到 100GB 后,同步扩大 PV 容量:

# 1. (前置步骤)用 parted 扩大底层分区(略,需确保分区大小已更新)
# 2. 确认底层设备新大小(如 /dev/sda1 已为 100GB)
lsblk /dev/sda1  # 查看分区大小

# 3. 扩容 PV(自动检测底层新大小,无需额外选项)
pvresize /dev/sda1

# 4. 验证结果(查看 PV 大小是否更新为 100GB)
pvs -o name,size,free /dev/sda1
# 输出示例:
#   PV         Size  Free 
#   /dev/sda1  100.00g 50.00g  # 扩容后空闲空间增加

示例 2:PV 缩容(需严格校验)

需求:将 /dev/sda1 PV 从 100GB 缩容到 40GB(需先确保:① 底层分区已缩容至 ≥40GB;② 无已分配 PE 超出 40GB):

# 1. (关键)确认 PV 上已分配 PE 的最大位置 ≤ 40GB
# 方法1:查看 PV 详细信息,获取“已分配 PE 的结束位置”
pvdisplay /dev/sda1 | grep -E "Allocated PE|PE Size"
# 假设 PE Size=4MB,Allocated PE=9999 → 已分配最大位置=9999×4MB=39.996GB ≤40GB,可缩容

# 方法2:用 pvmove 迁移超出 40GB 的 PE(若存在)
# 若已分配 PE 超出 40GB,需先迁移到其他 PV:
pvmove /dev/sda1:10000-24999 /dev/sdb1  # 迁移 PE 10000+(对应 40GB+)到 /dev/sdb1

# 2. (前置步骤)用 parted 缩小底层分区至 40GB(略,需确保分区大小 ≥40GB)

# 3. 缩容 PV(指定新大小为 40GB)
pvresize --setphysicalvolumesize 40G /dev/sda1

# 4. 验证结果(查看 PV 大小是否更新为 40GB)
pvs -o name,size,used /dev/sda1
# 输出示例:
#   PV         Size  Used 
#   /dev/sda1  40.00g 39.99g  # 缩容后大小与已用空间匹配

示例 3:测试缩容可行性(避免误操作)

需求:测试将 /dev/sda1 缩容到 30GB 是否可行(不实际修改):

# 测试缩容,输出详细校验过程(-v 2)
pvresize -t -v 2 --setphysicalvolumesize 30G /dev/sda1

# 若输出“PV 上已分配 PE 超出新大小”,则需先迁移超出的 PE;若无错误,则可执行实际缩容

六、注意事项(核心风险点)

  1. 缩容的严格限制
    pvresize 拒绝任何“已分配 PE 超出新大小”的缩容请求(避免数据丢失),必须先通过 pvmove 将超出的 PE 迁移到其他 PV,再执行缩容。

  2. 底层设备大小优先

    • 扩容时:PV 大小不能超过底层设备大小(pvresize 自动检测,超出则取设备实际大小);
    • 缩容时:PV 新大小不能超过底层设备大小(否则报错“设备空间不足”)。
  3. 数据备份优先
    缩容前建议手动备份卷组元数据(vgcfgbackup <VG名>),避免因 PE 迁移错误或底层设备调整失误导致数据损坏。

  4. 在线操作的影响
    支持调整活跃 PV,但缩容前的 pvmove 会占用磁盘 IO,建议在业务低峰期执行,避免影响服务性能。

  5. 权限要求
    所有操作需 root 权限(或 sudo),普通用户无权限修改 PV 元数据和底层设备。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐