如何管理存储卷¶
有关如何创建、配置、查看和调整大小 存储卷 的说明,请参见以下部分。
创建自定义存储卷¶
创建实例时,Incus 会自动创建一个用作实例根磁盘的存储卷。
您可以向实例添加自定义存储卷。此类自定义存储卷独立于实例,这意味着可以单独备份它们,并且保留直到您删除它们。内容类型为 filesystem
的自定义存储卷也可以在不同的实例之间共享。
有关详细信息,请参见 存储卷。
创建卷¶
使用以下命令在存储池中创建类型为 block
或 filesystem
的自定义存储卷
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 基存储池(ceph
和 cephfs
)和集群 LVM(lvmcluster
)的行为有所不同,其中卷可从任何集群成员访问。
要创建类型为 iso
的自定义存储卷,请使用 import
命令而不是 create
命令
incus storage volume import <pool_name> <iso_path> <volume_name> --type=iso
将卷附加到实例¶
创建自定义存储卷后,您可以将其作为 磁盘设备 添加到一个或多个实例。
适用以下限制
内容类型 为
block
或iso
的自定义存储卷不能附加到容器,而只能附加到虚拟机。为避免数据损坏,内容类型 为
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.read
、limits.write
或limits.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>
。
然后,此值将用于池中的所有新存储卷,除非为卷或实例显式设置了此值。通常,在卷创建之前在存储池级别设置的默认值可以通过卷配置覆盖,而卷配置可以通过实例配置覆盖(对于类型为container
或virtual-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/c1
或virtual-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
的存储卷。