![如何计算 Linux 物理卷和卷组元数据开销?](https://linux22.com/image/123491/%E5%A6%82%E4%BD%95%E8%AE%A1%E7%AE%97%20Linux%20%E7%89%A9%E7%90%86%E5%8D%B7%E5%92%8C%E5%8D%B7%E7%BB%84%E5%85%83%E6%95%B0%E6%8D%AE%E5%BC%80%E9%94%80%EF%BC%9F.png)
我正在尝试使用 kickstart 文件安装 CentOS 7.4 系统,但收到以下错误:“新 lv 太大,无法容纳可用空间”
还有一条附加消息表明需要 752.85MiB。
以下是 kickstart 文件的相关部分:
part pv.00 --size=77824 --asprimary
volgroup vg00 pv.00
logvol / --fstype=ext4 --name=lv_root --vgname=vg00 --size=40960
logvol /tmp --fstype=ext4 --name=lv_tmp --vgname=vg00 --size=16384 --fsoptions="nodev,noexec,nosuid"
logvol /var --fstype=ext4 --name=lv_var --vgname=vg00 --size=16384 --fsoptions="nodev,nosuid"
logvol swap --name=lv_swap --vgname=vg00 --size=4096
如您所见,逻辑卷的总大小等于物理卷的大小:40960 + 16384 + 16384 + 4096 = 77824
显然,存在一些开销或元数据占用了物理卷或卷组的一部分,但尚不清楚这是如何计算的。
我花了一上午的时间在谷歌上搜索这个内容,但找不到任何信息,甚至在 RedHat 的高级 LVM 配置指南中也是如此。
出于本答案的目的,假设 --grow 不是一个选项,我需要知道确切的计算(在这个物理卷之后还有另一个需要增长的物理卷,因此这个物理卷需要是固定大小)。
答案1
默认情况下,LVM2 元数据为每个物理卷 1 MiB。您可以用来
pvs -o +pe_start
找出有效负载的确切起始位置。卷组和逻辑卷没有元数据开销;只有物理卷携带元数据。
同样默认情况下,LVM 使用 4 MiB 的物理范围。
最终结果是,如果出于美观原因您想pvdisplay
显示“ not usable 0
”,那么您必须:
要么使每个物理卷为 4 MiB + 1 MiB 的倍数,
或者您使用 , 创建卷组
-s 1m
,使其物理范围为 1 MiB。
资料来源:
数据区域的默认对齐方式(反映在有效负载区域的起始扇区中
pvs -o +pe_start
)为 1 MiB,符合这次提交。这实际上是一个可配置的参数,请参阅手册页lvm.conf
;当然可以在物理卷创建时按物理卷进行控制。默认物理范围大小记录在手册页中
vgcreate
:-s,--物理范围大小 物理范围大小[
bBsSkKmMgGtTpPeE
]
设置该卷组的物理卷上的物理盘区大小。大小后缀(k
从千字节到t
兆字节)是可选的,如果不存在后缀,则默认为兆字节。对于 LVM2 格式,该值必须至少为 1 个扇区(其中扇区大小是 VG 中当前使用的 PV 的最大扇区大小),对于 LVM1 格式,该值必须至少为 8KiB,并且必须是 2 的幂。默认值为 4 MiB。
答案2
该命令dmsetup table
显示 LV 在其 PV 内的起始位置。对于旧系统上的 PV,最低偏移量是 384:
start cmd: # dmsetup table | grep '\b384$'
storage-images: 0 62914560 linear 9:9 384
linux0-home: 0 2097152 linear 9:0 384
不过,在较新的系统上,偏移量更大:
linuxbackup-rootfs: 0 18874368 linear 9:1 2048
这可能意味着根据 LVM 版本(或特定于发行版的配置),前 384 或 2048 个扇区是为 PV 和 VG 元数据保留的。 PV 末尾也可能有元数据(如果您强制执行的话)。
如果你想知道你的相关值,那么你可以简单地创建一个 VG 并检查使用的值。但出于您的目的,仅使用较大的值进行计算可能就足够了。