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_minretain_days 设置,以避免在与 Incus 交互时出现速度下降。

lvmcluster 驱动程序在 Incus 中

第二个 lvmcluster 驱动程序可用于集群中。

它依赖于 lvmlockdsanlock 守护进程,以在共享磁盘或一组磁盘上提供分布式锁定。

它允许使用远程共享块设备(如 FiberChannel LUNNVMEoF/NVMEoTCP 磁盘或 iSCSI 驱动器)作为 LVM 存储池的备份。

注意

精简配置与集群 LVM 不兼容,因此预计磁盘使用率会更高。

要在 Incus 中使用它,您必须

  • 在所有集群成员上都提供一个共享块设备

  • 安装与 lvmlvmlockdsanlock 相关的软件包

  • 通过在 /etc/lvm/lvm.conf 中设置 use_lvmlockd = 1 来启用 lvmlockd

  • /etc/lvm/lvmlocal.conf 中设置一个唯一的(在您的集群内)host_id

  • 确保 lvmlockdsanlock 守护进程都已运行

配置选项

以下配置选项适用于使用 lvm 驱动程序的存储池和这些池中的存储卷。

存储池配置

类型

驱动程序

默认值

描述

lvm.thinpool_name

字符串

lvm

IncusThinPool

创建卷的精简池

lvm.thinpool_metadata_size

字符串

lvm

0(自动)

精简池元数据卷的大小(默认情况下,让 LVM 计算合适的大小)

lvm.metadata_size

字符串

lvm

0(自动)

物理卷元数据空间的大小

lvm.use_thinpool

布尔值

lvm

true

存储池是否对逻辑卷使用精简池

lvm.vg.force_reuse

布尔值

lvm

false

强制使用现有的非空卷组

lvm.vg_name

字符串

all

池的名称

要创建的卷组的名称

rsync.bwlimit

字符串

all

0(无限制)

当必须使用 rsync 来传输存储实体时,对套接字 I/O 设置的上限

rsync.compression

布尔值

all

true

迁移存储池时是否使用压缩

size

字符串

lvm

auto(可用磁盘空间的 20%,>= 5 GiB 且 <= 30 GiB)

创建基于循环的池时的存储池大小(以字节为单位,支持后缀,可以增加以扩大存储池)

source

字符串

all

-

现有块设备、循环文件或 LVM 卷组的路径

source.wipe

布尔值

lvm

false

在创建存储池之前擦除 source 中指定的块设备

提示

除了这些配置外,您还可以设置存储卷配置的默认值。参见 为存储卷配置默认值

存储卷配置

类型

条件

默认值

描述

block.filesystem

字符串

内容类型为 filesystem 的基于块的卷

volume.block.filesystem 相同

存储卷的文件系统:btrfsext4xfs(如果没有设置,则为 ext4

block.mount_options

字符串

内容类型为 filesystem 的基于块的卷

volume.block.mount_options 相同

基于块的文件系统卷的挂载选项

lvm.stripes

字符串

volume.lvm.stripes 相同

用于新卷(或精简池卷)的条带数量

lvm.stripes.size

字符串

volume.lvm.stripes.size 相同

要使用的条带大小(至少 4096 字节,并且是 512 字节的倍数)

security.shifted

布尔值

自定义卷

volume.security.shiftedfalse 相同

启用 ID 偏移覆盖(允许多个隔离的实例进行附加)

security.unmapped

布尔值

自定义卷

volume.security.unmappedfalse 相同

禁用卷的 ID 映射

security.shared

布尔值

自定义块卷

volume.security.sharedfalse 相同

启用在多个实例之间共享卷

size

字符串

volume.size 相同

存储卷的大小/配额

snapshots.expiry

字符串

自定义卷

volume.snapshots.expiry 相同

控制何时删除快照(需要像 1M 2H 3d 4w 5m 6y 这样的表达式)

snapshots.pattern

字符串

自定义卷

volume.snapshots.patternsnap%d 相同

代表快照名称的 Pongo2 模板字符串(用于计划的快照和未命名的快照)[1]

snapshots.schedule

字符串

自定义卷

volume.snapshots.schedule 相同

Cron 表达式(<minute> <hour> <dom> <month> <dow>)、一个以逗号分隔的调度别名列表(@hourly@daily@midnight@weekly@monthly@annually@yearly)或空字符串以禁用自动快照(默认)

存储桶配置

要为本地存储池驱动程序启用存储桶,并允许应用程序通过 S3 协议访问存储桶,您必须配置 core.storage_buckets_address 服务器设置。

类型

条件

默认值

描述

size

字符串

合适的驱动程序

volume.size 相同

存储桶的大小/配额