Linux系统之pvresize 命令详解
pvresize 是 LVM(Logical Volume Manager,逻辑卷管理)工具集中的物理卷(PV)大小调整工具,核心功能是扩大或缩小已创建的物理卷容量,使其与底层存储设备(如磁盘分区、RAID 设备)的实际大小匹配。
pvresize 命令详解
一、命令概述
pvresize 是 LVM(Logical Volume Manager,逻辑卷管理)工具集中的物理卷(PV)大小调整工具,核心功能是扩大或缩小已创建的物理卷容量,使其与底层存储设备(如磁盘分区、RAID 设备)的实际大小匹配。
其核心特性与适用场景:
- 双向调整:
- 扩容:底层设备(如分区)扩大后,同步扩大 PV 容量,使其可用空间增加(自动检测新大小,无需手动指定);
- 缩容:需手动指定新大小(
--setphysicalvolumesize),且严格限制——PV 上已分配的物理扩展(PE)不能超出新大小(否则拒绝缩容,避免数据丢失);
- 在线操作:支持调整已加入卷组(VG)且包含活跃逻辑卷(LV)的 PV(无需卸载 LV,不中断业务);
- 底层依赖:调整 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 中的变量(如 PV、Size[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=1024、m=1024²),支持:- 基础单位: b(字节)、s(扇区,512 字节);- 常用单位: k(KB)、m(MB)、g(GB)、t(TB)。 |
示例:40GB 大小40G、40960M(两种写法等价) |
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;若无错误,则可执行实际缩容
六、注意事项(核心风险点)
-
缩容的严格限制:
pvresize拒绝任何“已分配 PE 超出新大小”的缩容请求(避免数据丢失),必须先通过pvmove将超出的 PE 迁移到其他 PV,再执行缩容。 -
底层设备大小优先:
- 扩容时:PV 大小不能超过底层设备大小(
pvresize自动检测,超出则取设备实际大小); - 缩容时:PV 新大小不能超过底层设备大小(否则报错“设备空间不足”)。
- 扩容时:PV 大小不能超过底层设备大小(
-
数据备份优先:
缩容前建议手动备份卷组元数据(vgcfgbackup <VG名>),避免因 PE 迁移错误或底层设备调整失误导致数据损坏。 -
在线操作的影响:
支持调整活跃 PV,但缩容前的pvmove会占用磁盘 IO,建议在业务低峰期执行,避免影响服务性能。 -
权限要求:
所有操作需root权限(或sudo),普通用户无权限修改 PV 元数据和底层设备。
更多推荐

所有评论(0)