LVM - lvm
¶
LVM 是一个存储管理框架,而不是文件系统。它用于管理物理存储设备,允许您创建多个逻辑存储卷,这些卷使用和虚拟化底层的物理存储设备。
请注意,在此过程中有可能过度使用物理存储,以灵活应对并非所有可用存储都同时使用的情况。
要使用 LVM,请确保您的机器上已安装 lvm2
。
术语¶
LVM 可以将多个物理存储设备组合成一个卷组。然后,您可以从此卷组中分配不同类型的逻辑卷。
一种受支持的卷类型是精简池,它允许通过创建精简配置的卷来过度使用资源,这些卷的总允许最大大小大于可用物理存储。另一种类型是卷快照,它捕获逻辑卷的特定状态。
lvm
驱动程序在 Incus 中¶
Incus 中的 lvm
驱动程序使用逻辑卷来存放镜像,以及卷快照来存放实例和快照。
Incus 假设它可以完全控制卷组。因此,您不应在 LVM 卷组中维护任何不属于 Incus 的文件系统实体,因为 Incus 可能删除它们。但是,如果您需要重用现有卷组(例如,因为您的设置只有一个卷组),您可以通过设置 lvm.vg.force_reuse
配置来完成此操作。
默认情况下,LVM 存储池使用 LVM 精简池,并在其中为所有 Incus 存储实体(镜像、实例和自定义卷)创建逻辑卷。可以通过在创建池时将 lvm.use_thinpool
设置为 false
来更改此行为。在这种情况下,Incus 将使用“普通”逻辑卷来存放所有非快照存储实体。请注意,这会导致 lvm
驱动程序的性能和空间大幅度降低(在速度和存储使用方面,接近于 dir
驱动程序)。原因是大多数存储操作必须回退到使用 rsync
,因为不是精简池的逻辑卷不支持对快照进行快照。此外,非精简快照比精简快照占用更多的存储空间,因为它们必须在创建时为其最大大小保留空间。因此,此选项仅应在用例要求时选择。
对于实例周转率高的环境(例如,持续集成),您应该调整 /etc/lvm/lvm.conf
中的备份 retain_min
和 retain_days
设置,以避免在与 Incus 交互时出现速度下降。
lvmcluster
驱动程序在 Incus 中¶
第二个 lvmcluster
驱动程序可用于集群中。
它依赖于 lvmlockd
和 sanlock
守护进程,以在共享磁盘或一组磁盘上提供分布式锁定。
它允许使用远程共享块设备(如 FiberChannel LUN
、NVMEoF/NVMEoTCP
磁盘或 iSCSI
驱动器)作为 LVM 存储池的备份。
注意
精简配置与集群 LVM 不兼容,因此预计磁盘使用率会更高。
要在 Incus 中使用它,您必须
在所有集群成员上都提供一个共享块设备
安装与
lvm
、lvmlockd
和sanlock
相关的软件包通过在
/etc/lvm/lvm.conf
中设置use_lvmlockd = 1
来启用lvmlockd
在
/etc/lvm/lvmlocal.conf
中设置一个唯一的(在您的集群内)host_id
值确保
lvmlockd
和sanlock
守护进程都已运行
配置选项¶
以下配置选项适用于使用 lvm
驱动程序的存储池和这些池中的存储卷。
存储池配置¶
键 |
类型 |
驱动程序 |
默认值 |
描述 |
---|---|---|---|---|
|
字符串 |
|
|
创建卷的精简池 |
|
字符串 |
|
|
精简池元数据卷的大小(默认情况下,让 LVM 计算合适的大小) |
|
字符串 |
|
|
物理卷元数据空间的大小 |
|
布尔值 |
|
|
存储池是否对逻辑卷使用精简池 |
|
布尔值 |
|
|
强制使用现有的非空卷组 |
|
字符串 |
all |
池的名称 |
要创建的卷组的名称 |
|
字符串 |
all |
|
当必须使用 |
|
布尔值 |
all |
|
迁移存储池时是否使用压缩 |
|
字符串 |
|
auto(可用磁盘空间的 20%,>= 5 GiB 且 <= 30 GiB) |
创建基于循环的池时的存储池大小(以字节为单位,支持后缀,可以增加以扩大存储池) |
|
字符串 |
all |
- |
现有块设备、循环文件或 LVM 卷组的路径 |
|
布尔值 |
|
|
在创建存储池之前擦除 |
提示
除了这些配置外,您还可以设置存储卷配置的默认值。参见 为存储卷配置默认值。
存储卷配置¶
键 |
类型 |
条件 |
默认值 |
描述 |
---|---|---|---|---|
|
字符串 |
内容类型为 |
与 |
存储卷的文件系统: |
|
字符串 |
内容类型为 |
与 |
基于块的文件系统卷的挂载选项 |
|
字符串 |
与 |
用于新卷(或精简池卷)的条带数量 |
|
|
字符串 |
与 |
要使用的条带大小(至少 4096 字节,并且是 512 字节的倍数) |
|
|
布尔值 |
自定义卷 |
与 |
启用 ID 偏移覆盖(允许多个隔离的实例进行附加) |
|
布尔值 |
自定义卷 |
与 |
禁用卷的 ID 映射 |
|
布尔值 |
自定义块卷 |
与 |
启用在多个实例之间共享卷 |
|
字符串 |
与 |
存储卷的大小/配额 |
|
|
字符串 |
自定义卷 |
与 |
控制何时删除快照(需要像 |
|
字符串 |
自定义卷 |
与 |
代表快照名称的 Pongo2 模板字符串(用于计划的快照和未命名的快照)[1] |
|
字符串 |
自定义卷 |
与 |
Cron 表达式( |
存储桶配置¶
要为本地存储池驱动程序启用存储桶,并允许应用程序通过 S3 协议访问存储桶,您必须配置 core.storage_buckets_address
服务器设置。
键 |
类型 |
条件 |
默认值 |
描述 |
---|---|---|---|---|
|
字符串 |
合适的驱动程序 |
与 |
存储桶的大小/配额 |