67.13. 控制 LVM 分配
默认情况下,卷组使用 normal
分配策略。这会根据常识性规则分配物理扩展,如不在同一个物理卷上放置并行条带。您可以使用 vgcreate
命令的 --alloc
参数指定不同的分配策略(contiguous
、anywhere
或 cling
)。通常,只在特殊情况下需要指定非通常或非标准扩展分配时,才需要不同于 normal
的分配策略。
67.13.1. 从指定设备分配扩展
您可以使用命令行末尾的 device 参数以及 lvcreate
和 lvconvert
命令来限制从特定的设备分配。您可以为每个设备指定实际的扩展范围,以提供更多控制。命令通过使用指定的物理卷(PV)作为参数,来只为新逻辑卷(LV)分配扩展。它使用每个 PV 的可用扩展,直到它们耗尽,然后使用列出的下一个 PV 中的扩展。如果所有列出的 PV 上没有足够的空间用于请求的 LV 大小,则命令失败。请注意,命令只从指定的 PV 分配。RAID LV 对单独的 raid 镜像或单独的条带使用顺序 PV 。如果 PV 对于整个 raid 镜像不够大,则生成的设备使用不是完全可预测的。
流程
创建卷组(VG):
# vgcreate <vg_name> <PV> ...
其中:
-
<vg_name>
是 VG 的名称。 -
<PV>
是 PV。
-
您可以分配 PV 来创建不同的卷类型,如 linear 或 raid :
分配扩展以创建线性卷:
# lvcreate -n <lv_name> -L <lv_size> <vg_name> [ <PV> ... ]
其中:
-
<lv_name>
是 LV 的名称。 -
<lv_size>
是 LV 的大小。默认单位是 MB。 -
<vg_name>
是 VG 的名称。 [ <PV …> ]
是 PV。您可以在命令行上指定其中一个 PV、所有 PV 或 none :
如果您指定一个 PV,则会从其中为那个 LV 分配扩展。
注意如果 PV 对于整个 LV 没有足够的空闲扩展,则
lvcreate
失败。- 如果您指定了两个 PV,则将从其中一个 PV 或两者的组合为那个 LV 分配扩展。
如果没有指定任何 PV,则将从 VG 中的一个 PV 或者 VG 中所有 PV 的组合分配扩展。
注意在这些情况下,LVM 可能无法使用所有命名的 PV 或可用的 PV。如果第一个 PV 对于整个 LV 有足够的空闲扩展,则可能不会使用其他 PV。但是,如果第一个 PV 没有一组空闲扩展的分配大小,则 LV 可能会从第一个 PV 中分配一部分,从第二个 PV 中分配一部分。
例 67.10. 从一个 PV 中分配扩展
在这个示例中,
lv1
扩展将从sda
分配。# lvcreate -n lv1 -L1G vg /dev/sda
例 67.11. 从两个 PV 中分配扩展
在这个示例中,
lv2
扩展将从sda
或sdb
或两者的组合中分配。# lvcreate -n lv2 L1G vg /dev/sda /dev/sdb
例 67.12. 分配扩展,而不指定 PV
在本例中,
lv3
扩展将从 VG 中的一个 PV 或 VG 中所有 PV 的组合中分配。# lvcreate -n lv3 -L1G vg
or
-
分配扩展以创建 raid 卷:
# lvcreate --type <segment_type> -m <mirror_images> -n <lv_name> -L <lv_size> <vg_name> [ <PV> ... ]
其中:
-
<segment_type>
是指定的片段类型(如raid5
、mirror
、snapshot
)。 -
<mirror_images>
使用创建一个带有指定的镜像数的raid1
或镜像 LV。例如,-m 1
会产生一个带有两个镜像的raid1
LV。 -
<lv_name>
是 LV 的名称。 -
<lv_size>
是 LV 的大小。默认单位是 MB。 -
<vg_name>
是 VG 的名称。 <[PV …]>
是 PV。第一个 raid 镜像将从第一个 PV 中分配,第二个 raid 镜像将从第二个 PV 中分配,以此类推。
例 67.13. 从两个 PV 中分配 raid 镜像
在这个示例中,
lv4
第一个 raid 镜像将从sda
中分配,第二个镜像将从sdb
中分配。# lvcreate --type raid1 -m 1 -n lv4 -L1G vg /dev/sda /dev/sdb
例 67.14. 从三个 PV 中分配 raid 镜像
在本例中,
lv5
第一个 raid 镜像将从sda
中分配,第二个镜像将从sdb
中分配,第三个镜像将从sdc
中分配。# lvcreate --type raid1 -m 2 -n lv5 -L1G vg /dev/sda /dev/sdb /dev/sdc
-
其他资源
-
系统中
lvcreate (8)
,lvconvert (8)
, 和lvmraid (7)
man page
67.13.2. LVM 分配策略
当 LVM 操作必须为一个或多个逻辑卷(LV)分配物理扩展时,分配过程如下:
- 生成卷组中的未分配物理扩展的完整集以供考虑。如果您在命令行末尾提供了任何范围的物理扩展,则只考虑指定物理卷(PV)上此范围内未分配的物理扩展。
-
每个分配策略依次尝试,从最严格的策略(
contiguous
)开始,以使用--alloc
选项指定的分配策略结束,或者设为特定 LV 或卷组(VG)的默认分配策略。对于每个策略,从需要填充的空 LV 空间的最低编号的逻辑扩展开始工作,根据分配策略施加的限制,来分配尽可能多的空间。如果需要更多空间,LVM 会进入下一个策略。
分配策略的限制如下:
contiguous
策略要求任何逻辑扩展的物理位置紧挨着前一个逻辑扩展的物理位置,但 LV 的第一个逻辑扩展除外。当 LV 为条带或镜像时,
contiguous
分配限制将独立应用于每个需要空间的条带或 raid 镜像。-
cling
分配策略要求将用于任何逻辑扩展的 PV 添加到现有 LV 中,该 LV 之前已被该 LV 中至少一个逻辑扩展使用。 -
normal
分配策略不会选择一个共享同一 PV 的物理扩展,因为逻辑扩展已分配给在那个并行 LV 中相同偏移处的一个并行 LV(即,不同的条带或 raid 镜像)。 -
如果有足够的空闲扩展来满足分配请求,但
normal
分配策略将不使用它们,而anywhere
分配策略将使用它们,即使这通过在同一 PV 上放置两个条带降低了性能。
您可以使用 vgchange
命令更改分配策略。
未来的更新可能会根据定义的分配策略在布局行为中引入代码更改。例如:如果您在命令行中提供两个空物理卷,它们有相同数量的可用物理扩展可用于分配,LVM 当前会以它们列出的顺序处理它们,但不保证在将来的版本中这个行为不会有变化。如果您需要特定 LV 的一个特定布局,请通过 lvcreate
和 lvconvert
步骤序列构建它,这样应用到每个步骤的分配策略就不会让 LVM 自行决定布局。
67.13.3. 防止在物理卷中分配
您可以使用 pvchange
命令防止在一个或多个物理卷的空闲空间上分配物理扩展。如果有磁盘错误或者要删除物理卷,则可能需要这样做。
流程
使用以下命令禁止在
device_name
上分配物理扩展:# pvchange -x n /dev/sdk1
您还可以使用
pvchange
命令的-xy
参数允许之前被禁止的分配。
其他资源
-
系统中
pvchange (8)
手册页