如何管理存储卷

有关如何创建、配置、查看和调整大小 存储卷 的说明,请参见以下部分。

创建自定义存储卷

创建实例时,Incus 会自动创建一个用作实例根磁盘的存储卷。

您可以向实例添加自定义存储卷。此类自定义存储卷独立于实例,这意味着可以单独备份它们,并且保留直到您删除它们。内容类型为 filesystem 的自定义存储卷也可以在不同的实例之间共享。

有关详细信息,请参见 存储卷

创建卷

使用以下命令在存储池中创建类型为 blockfilesystem 的自定义存储卷

incus storage volume create <pool_name> <volume_name> [configuration_options...]

有关每个驱动程序可用的存储卷配置选项列表,请参见 存储驱动程序 文档。

默认情况下,自定义存储卷使用 filesystem 内容类型。要创建内容类型为 block 的自定义存储卷,请添加 --type 标志

incus storage volume create <pool_name> <volume_name> --type=block [configuration_options...]

要在集群成员上添加自定义存储卷,请添加 --target 标志

incus storage volume create <pool_name> <volume_name> --target=<cluster_member> [configuration_options...]

注意

对于大多数存储驱动程序,自定义存储卷不会在集群中复制,并且仅存在于为其创建的成员上。Ceph 基存储池(cephcephfs)和集群 LVM(lvmcluster)的行为有所不同,其中卷可从任何集群成员访问。

要创建类型为 iso 的自定义存储卷,请使用 import 命令而不是 create 命令

incus storage volume import <pool_name> <iso_path> <volume_name> --type=iso

将卷附加到实例

创建自定义存储卷后,您可以将其作为 磁盘设备 添加到一个或多个实例。

适用以下限制

  • 内容类型blockiso 的自定义存储卷不能附加到容器,而只能附加到虚拟机。

  • 为避免数据损坏,内容类型block 的存储卷永远不要同时附加到多个虚拟机。

  • 内容类型iso 的存储卷始终为只读,因此可以同时附加到多个虚拟机而不会损坏数据。

  • 文件系统存储卷在运行时不能附加到虚拟机。

对于内容类型为 filesystem 的自定义存储卷,请使用以下命令,其中 <location> 是在实例内访问存储卷的路径(例如,/data

incus storage volume attach <pool_name> <filesystem_volume_name> <instance_name> <location>

内容类型为 block 的自定义存储卷不使用位置

incus storage volume attach <pool_name> <block_volume_name> <instance_name>

默认情况下,自定义存储卷会使用卷名称作为 设备 名称添加到实例。如果要使用不同的设备名称,可以将其添加到命令中

incus storage volume attach <pool_name> <filesystem_volume_name> <instance_name> <device_name> <location>
incus storage volume attach <pool_name> <block_volume_name> <instance_name> <device_name>

将卷作为设备挂载

incus storage volume attach 命令是将磁盘设备添加到实例的快捷方式。或者,您可以按照常规方式为存储卷添加磁盘设备。

incus config device add <instance_name> <device_name> disk pool=<pool_name> source=<volume_name> [path=<location>]

使用这种方式时,如果需要,可以向命令添加更多配置。有关所有可用的设备选项,请参阅磁盘设备

配置 I/O 限制

将存储卷作为磁盘设备挂载到实例时,可以为其配置 I/O 限制。为此,请将limits.readlimits.writelimits.max属性设置为相应的限制。有关更多信息,请参阅类型:磁盘参考。

这些限制通过 Linux blkio cgroup 控制器应用,这使得可以限制磁盘级别的 I/O(但不能比这更细粒度)。

注意

由于限制适用于整个物理磁盘而不是分区或路径,因此适用以下限制

  • 限制不适用于由虚拟设备(例如设备映射器)支持的文件系统。

  • 如果文件系统由多个块设备支持,则每个设备将获得相同的限制。

  • 如果两个由同一磁盘支持的磁盘设备连接到同一实例,则这两个设备的限制将取平均值。

所有 I/O 限制仅适用于实际的块设备访问。因此,在设置限制时,请考虑文件系统自身的开销。对缓存数据的访问不受限制的影响。

将卷用于备份或镜像

除了将自定义卷作为磁盘设备挂载到实例外,还可以将其用作一种特殊类型的卷来存储备份镜像

为此,必须设置相应的服务器配置

  • 使用自定义卷存储备份 tarball

    incus config set storage.backups_volume <pool_name>/<volume_name>
    
  • 使用自定义卷存储镜像 tarball

    incus config set storage.images_volume <pool_name>/<volume_name>
    

配置存储卷设置

有关每个存储驱动程序的可用配置选项,请参阅存储驱动程序文档。

使用以下命令为存储卷设置配置选项

incus storage volume set <pool_name> [<volume_type>/]<volume_name> <key> <value>

默认的存储卷类型custom,因此在配置自定义存储卷时,可以省略<volume_type>/

例如,要将自定义存储卷my-volume的大小设置为 1 GiB,请使用以下命令

incus storage volume set my-pool my-volume size=1GiB

要将虚拟机my-vm的快照过期时间设置为一个月,请使用以下命令

incus storage volume set my-pool virtual-machine/my-vm snapshots.expiry 1M

您还可以使用以下命令编辑存储卷配置

incus storage volume edit <pool_name> [<volume_type>/]<volume_name>

为存储卷配置默认值

您可以为存储池定义默认的卷配置。为此,请使用volume前缀设置存储池配置,因此volume.<VOLUME_CONFIGURATION>=<VALUE>

然后,此值将用于池中的所有新存储卷,除非为卷或实例显式设置了此值。通常,在卷创建之前在存储池级别设置的默认值可以通过卷配置覆盖,而卷配置可以通过实例配置覆盖(对于类型containervirtual-machine的存储卷)。

例如,要为存储池设置默认卷大小,请使用以下命令

incus storage set [<remote>:]<pool_name> volume.size <value>

查看存储卷

您可以显示存储池中所有可用存储卷的列表并检查其配置。

要列出存储池中所有可用的存储卷,请使用以下命令

incus storage volume list <pool_name>

要显示所有项目(不仅是默认项目)的存储卷,请添加--all-projects标志。

结果表包含池中每个存储卷的存储卷类型内容类型

注意

自定义存储卷可能与实例卷使用相同的名称(例如,您可能有一个名为c1的容器,其中包含一个名为c1的容器存储卷和一个名为c1的自定义存储卷)。因此,为了区分实例存储卷和自定义存储卷,所有实例存储卷都必须在命令中称为<volume_type>/<volume_name>(例如,container/c1virtual-machine/vm)。

要显示有关特定卷的详细配置信息,请使用以下命令

incus storage volume show <pool_name> [<volume_type>/]<volume_name>

要显示有关特定卷的状态信息,请使用以下命令

incus storage volume info <pool_name> [<volume_type>/]<volume_name>

在这两个命令中,默认的存储卷类型custom,因此在显示有关自定义存储卷的信息时,可以省略<volume_type>/

调整存储卷大小

如果卷需要更多存储空间,可以增加存储卷的大小。在某些情况下,也可以减小存储卷的大小。

要调整存储卷的大小,请设置其大小配置

incus storage volume set <pool_name> <volume_name> size <new_size>

重要

  • 扩展存储卷通常有效(如果存储池有足够的存储空间)。

  • 缩小存储卷仅适用于内容类型为filesystem的存储卷。但这不能保证有效,因为您无法将存储缩小到其当前使用大小以下。

  • 无法缩小内容类型为block的存储卷。