pvs -o dev_size,pv_free,pv_used,pv_name 是查看PV设备大小及已用/空闲容量的正确命令;dev_size表示LVM可用的净空间,小于硬盘标称容量,差值主要来自元数据开销、PE对齐间隙和分区边界限制。

pvs -o dev_size,pv_free,pv_used,pv_name 是查看物理卷(PV)设备大小与已用/空闲容量差异的正确方式。你提到的 pvs -O Dev_Size 写法不标准(-O 用于排序,不是输出字段;且字段名应为小写 dev_size),实际无法按需显示所需信息。
确认 PV 对应的底层设备及总容量
每个 PV 都绑定到一个块设备(如 /dev/sdb、/dev/nvme0n1p1)。dev_size 显示的是该设备被 LVM 识别并可用于 PV 的**原始字节数**(即 LVM 可用的净空间,已扣除 MBR/GPT 头、对齐填充等开销,但未扣除 RAID 元数据或磁盘坏区屏蔽等底层因素)。
要对比“硬盘标称容量”和“PV 实际可用容量”,可结合:
-
lsblk -b /dev/sdX:看设备总大小(含所有扇区) -
pvs -o pv_name,dev_size,pe_start --units b:看 LVM 实际使用的起始偏移(pe_start)和最终分配空间 -
fdisk -l /dev/sdX或parted /dev/sdX unit b print:检查分区表占用、对齐间隙(如 1MiB 对齐导致前 1048576 字节不可用)
计算 PV 分配有效容量与设备总容量的差值
差值主要来自三部分:
- 元数据开销:LVM 在 PV 开头写入 label 和 metadata(通常约 256KiB~1MiB)
-
PE 对齐保留空间:若 PV 创建时指定
--dataalignment或自动对齐(如 4MiB),开头会预留对齐间隙 -
分区边界限制:若 PV 建在分区上(如
/dev/sdb1),则受限于分区起始/结束位置,而非整盘
例如:lsblk -b /dev/sdb 显示 SIZE = 1000204886016(≈931.5GiB)pvs -o pv_name,dev_size --units b /dev/sdb 输出 dev_size = 1000203837440
差值 = 1000204886016 − 1000203837440 = 1,048,576 字节 = 1MiB → 很可能就是 1MiB 对齐预留空间。
查看当前 PV 的详细布局(验证差值来源)
用 pvdisplay -m 可看到物理区域(PE)的起始地址和总数:
-
PV Name:设备路径 -
PV Size:LVM 报告的 PV 总容量(= dev_size) -
PE Start:第一个 PE 起始偏移(单位字节),从设备开头算起 -
Total PE / Free PE:换算成字节即Total PE × PE size,应等于PV Size
若 PE Start > 0,差值至少包含这部分;再对比 lsblk 中的 START 扇区 × 512,即可定位是否由分区表或对齐导致。
小结:关键命令组合
要快速获取“硬盘物理总容量”、“LVM 可用设备容量”、“已分配容量”、“空闲容量”四者关系,执行:
pvs -o pv_name,vg_name,dev_size,pv_used,pv_free,pe_start --units h<br>lsblk -bdo NAME,SIZE,START,TYPE /dev/sdX
将两行输出对照,就能清晰看出每一层的容量损耗位置和大小。不需要额外脚本,核心是理解 dev_size 是 LVM 视角的“可用设备空间”,它天然小于硬件裸盘容量,差值反映的是存储栈中各层的设计取舍。











