如何计算 Linux 物理卷和卷组元数据开销?

如何计算 Linux 物理卷和卷组元数据开销?

我正在尝试使用 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 并检查使用的值。但出于您的目的,仅使用较大的值进行计算可能就足够了。

相关内容