pvs是lvm中查看物理卷信息的核心命令,显示设备路径、所属卷组、总容量、空闲空间等;默认不显示未分配pv,需加-a选项,依赖lvm2包。

在 Linux 中,pvs 命令本身不直接提供“物理硬盘总容量”与“PV 已分配空间”的差值,因为 PV(Physical Volume)只是硬盘或分区的一部分,且底层设备可能有未用于 LVM 的空间、保留扇区、RAID 元数据、对齐填充等。但你可以通过组合命令,分步获取物理设备总大小、PV 大小、PV 已用空间,再手动计算差值。
1. 查看 PV 对应的底层物理设备及大小
pvs -o pvname,vgname,pvsize,pvfree,pvused --units g 显示 PV 名称、所属卷组、总大小、空闲大小、已用大小(单位 GB)。但 pvs 中的 PV Size 是 LVM 初始化时识别并使用的容量(即 pvcreate 时实际写入元数据后可用的空间),通常略小于底层块设备的总大小。
要查底层设备真实大小,先确认 PV 路径(如 /dev/sdb2),再用:
-
lsblk -d -o name,size /dev/sdb2—— 显示设备原始大小(含所有扇区) -
blockdev --getsize64 /dev/sdb2—— 返回字节数,可除以 1024³ 得 GiB -
cat /sys/block/sdb2/size—— 输出扇区数(512 字节/扇区),乘以 512 即为字节数
2. 理解 PV Size 为何小于物理设备大小
LVM 在创建 PV 时会预留空间用于元数据(默认 2048 扇区 ≈ 1 MiB),并按 PE(Physical Extent)大小对齐(如默认 4 MiB)。因此:
PV Size = floor((device_bytes - metadata_offset) / pe_size) × pe_size- 例如:200 GiB 分区 → 实际
PV Size可能是 199.99 GiB(取决于对齐) - 这个差值不是“未分配”,而是 LVM 主动放弃的底层空间
3. 计算“物理设备总容量 − PV 已分配空间”差值
这是你关心的“还能从该盘额外划出多少非 LVM 空间”。步骤如下:
- 取底层设备总字节数:
blockdev --getsize64 /dev/sdb2 - 取 PV 已用字节数:
pvs -o pvused --units b --noheadings /dev/sdb2 | tr -d ' ' - 相减得剩余裸空间字节数,再换算成易读单位
一行示例(输出 GiB):
echo $(echo "scale=2; ($(blockdev --getsize64 /dev/sdb2) - $(pvs -o pvused --units b --noheadings /dev/sdb2 | tr -d ' ')) / (1024^3)" | bc)4. 注意事项与常见误区
- PV 可以跨多个设备(如 RAID 或多磁盘 PV),此时需分别计算每个底层设备
- 如果 PV 建在整盘(如
/dev/sdb)而非分区,lsblk会显示盘大小,但需注意 BIOS/UEFI 保护区域(如最后 1MiB)通常不可用 -
pvs -o dev_size并不存在;pvs没有dev_size字段,官方字段列表中只有pvsize(即 PV 容量) - 想看整个磁盘是否还有未分区空间?用
fdisk -l /dev/sdb或parted /dev/sdb print free











