管理卷

卷是一个可分离的块存储设备,类似于 USB 硬盘。您只能将一个卷附加到一个实例。使用 openstack 客户端命令来创建和管理卷。

创建卷

此示例创建一个基于镜像的 my-new-volume 卷。

  1. 列出镜像,并记下您想要用于卷的镜像 ID

    $ openstack image list
    +--------------------------------------+---------------------------------+
    | ID                                   | Name                            |
    +--------------------------------------+---------------------------------+
    | 8bf4dc2a-bf78-4dd1-aefa-f3347cf638c8 | cirros-0.3.5-x86_64-uec         |
    | 9ff9bb2e-3a1d-4d98-acb5-b1d3225aca6c | cirros-0.3.5-x86_64-uec-kernel  |
    | 4b227119-68a1-4b28-8505-f94c6ea4c6dc | cirros-0.3.5-x86_64-uec-ramdisk |
    +--------------------------------------+---------------------------------+
    
  2. 列出可用区,并记下您想要创建卷的可用区 ID

    $ openstack availability zone list --volume
    +-----------+-------------+
    | Zone Name | Zone Status |
    +-----------+-------------+
    | nova      | available   |
    +-----------+-------------+
    
  3. 创建一个具有 8 GiB 空间的卷,并指定可用区和镜像

    $ openstack volume create --image 8bf4dc2a-bf78-4dd1-aefa-f3347cf638c8 \
      --size 8 --availability-zone nova my-new-volume
    
    +------------------------------+--------------------------------------+
    | Property                     | Value                                |
    +------------------------------+--------------------------------------+
    | attachments                  | []                                   |
    | availability_zone            | nova                                 |
    | bootable                     | false                                |
    | consistencygroup_id          | None                                 |
    | created_at                   | 2016-09-23T07:52:42.000000           |
    | description                  | None                                 |
    | encrypted                    | False                                |
    | id                           | bab4b0e0-ce3d-4d57-bf57-3c51319f5202 |
    | metadata                     | {}                                   |
    | multiattach                  | False                                |
    | name                         | my-new-volume                        |
    | os-vol-tenant-attr:tenant_id | 3f670abbe9b34ca5b81db6e7b540b8d8     |
    | replication_status           | disabled                             |
    | size                         | 8                                    |
    | snapshot_id                  | None                                 |
    | source_volid                 | None                                 |
    | status                       | creating                             |
    | updated_at                   | None                                 |
    | user_id                      | fe19e3a9f63f4a14bd4697789247bbc5     |
    | volume_type                  | lvmdriver-1                          |
    +------------------------------+--------------------------------------+
    
  4. 要验证您的卷是否已成功创建,请列出可用的卷

    $ openstack volume list
    +--------------------------------------+---------------+-----------+------+-------------+
    | ID                                   | Name          |  Status   | Size | Attached to |
    +--------------------------------------+---------------+-----------+------+-------------+
    | bab4b0e0-ce3d-4d57-bf57-3c51319f5202 | my-new-volume | available | 8    |             |
    +--------------------------------------+---------------+-----------+------+-------------+
    

    如果您的卷已成功创建,其状态为 available。如果其状态为 error,您可能已超出您的配额。

卷类型

Cinder 支持以下三种方式来指定卷创建期间的 volume type

  1. volume_type

  2. cinder_img_volume_type(通过 glance 镜像元数据)

  3. 默认卷类型(通过项目默认值或 cinder.conf)

volume-type

用户可以在创建卷时指定 volume type

$ openstack volume create --type <volume-type> ...

cinder_img_volume_type

如果 glance 镜像具有 cinder_img_volume_type 属性,Cinder 将使用此参数来指定卷创建期间的 volume type

选择具有 cinder_img_volume_type 属性的 glance 镜像,并从该镜像创建一个卷。

$ openstack image list
+--------------------------------------+---------------------------------+--------+
| ID                                   | Name                            | Status |
+--------------------------------------+---------------------------------+--------+
| 376bd633-c9c9-4c5d-a588-342f4f66d086 | cirros-0.3.5-x86_64-uec         | active |
| 2c20fce7-2e68-45ee-ba8d-beba27a91ab5 | cirros-0.3.5-x86_64-uec-ramdisk | active |
| a5752de4-9faf-4c47-acbc-78a5efa7cc6e | cirros-0.3.5-x86_64-uec-kernel  | active |
+--------------------------------------+---------------------------------+--------+

$ openstack image show 376bd633-c9c9-4c5d-a588-342f4f66d086
+------------------------+------------------------------------------------------+
| Field                  | Value                                                |
+------------------------+------------------------------------------------------+
| checksum               | eb9139e4942121f22bbc2afc0400b2a                      |
| cinder_img_volume_type | nfstype                                              |
| container_format       | ami                                                  |
| created_at             | 2016-10-13T03:28:55Z                                 |
| disk_format            | ami                                                  |
| file                   | /v2/images/376bd633-c9c9-4c5d-a588-342f4f66d086/file |
| id                     | 376bd633-c9c9-4c5d-a588-342f4f66d086                 |
| min_disk               | 0                                                    |
| min_ram                | 0                                                    |
| name                   | cirros-0.3.5-x86_64-uec                              |
| owner                  | 88ba456e3a884c318394737765e0ef4d                     |
| properties             | kernel_id='a5752de4-9faf-4c47-acbc-78a5efa7cc6e',    |
|                        | ramdisk_id='2c20fce7-2e68-45ee-ba8d-beba27a91ab5'    |
| protected              | False                                                |
| schema                 | /v2/schemas/image                                    |
| size                   | 25165824                                             |
| status                 | active                                               |
| tags                   |                                                      |
| updated_at             | 2016-10-13T03:28:55Z                                 |
| virtual_size           | None                                                 |
| visibility             | public                                               |
+------------------------+------------------------------------------------------+

$ openstack volume create --image 376bd633-c9c9-4c5d-a588-342f4f66d086 \
    --size 1 --availability-zone nova test
+---------------------+--------------------------------------+
| Field               | Value                                |
+---------------------+--------------------------------------+
| attachments         | []                                   |
| availability_zone   | nova                                 |
| bootable            | false                                |
| consistencygroup_id | None                                 |
| created_at          | 2016-10-13T06:29:53.688599           |
| description         | None                                 |
| encrypted           | False                                |
| id                  | e6e6a72d-cda7-442c-830f-f306ea6a03d5 |
| multiattach         | False                                |
| name                | test                                 |
| properties          |                                      |
| replication_status  | disabled                             |
| size                | 1                                    |
| snapshot_id         | None                                 |
| source_volid        | None                                 |
| status              | creating                             |
| type                | nfstype                              |
| updated_at          | None                                 |
| user_id             | 33fdc37314914796883706b33e587d51     |
+---------------------+--------------------------------------+

默认卷类型

如果未设置上述参数,Cinder 在卷创建期间将使用默认卷类型。

可以使用以下命令检查有效的默认卷类型(无论是项目默认值还是 default_volume_type)

$ openstack volume type list --default

有两种方法可以设置默认卷类型

  1. 项目特定默认值

  2. default_volume_type 定义在 cinder.conf 中

项目特定默认值(自 mv 3.62 或更高版本起可用)

可以使用 默认卷类型 API 来管理项目特定默认值。它基于每个项目进行设置,并且优先级高于在 cinder.conf 中定义的 default_volume_type。

default_volume_type

如果未设置项目特定默认值,则 cinder.conf 中配置的 default_volume_type 用于创建卷。

示例 cinder.conf 文件配置。

[default]
default_volume_type = lvmdriver-1

将卷附加到实例

  1. 将您的卷附加到服务器,指定服务器 ID 和卷 ID

    $ openstack server add volume 84c6e57d-a6b1-44b6-81eb-fcb36afd31b5 \
      573e024d-5235-49ce-8332-be1576d323f8 --device /dev/vdb
    
  2. 显示您的卷的信息

    $ openstack volume show 573e024d-5235-49ce-8332-be1576d323f8
    

    输出显示该卷已附加到 ID 为 84c6e57d-a6b1-44b6-81eb-fcb36afd31b5 的服务器,位于 nova 可用区,并且可以引导。

    +------------------------------+-----------------------------------------------+
    | Field                        | Value                                         |
    +------------------------------+-----------------------------------------------+
    | attachments                  | [{u'device': u'/dev/vdb',                     |
    |                              |        u'server_id': u'84c6e57d-a             |
    |                              |           u'id': u'573e024d-...               |
    |                              |        u'volume_id': u'573e024d...            |
    | availability_zone            | nova                                          |
    | bootable                     | true                                          |
    | consistencygroup_id          | None                                          |
    | created_at                   | 2016-10-13T06:08:07.000000                    |
    | description                  | None                                          |
    | encrypted                    | False                                         |
    | id                           | 573e024d-5235-49ce-8332-be1576d323f8          |
    | multiattach                  | False                                         |
    | name                         | my-new-volume                                 |
    | properties                   |                                               |
    | replication_status           | disabled                                      |
    | size                         | 8                                             |
    | snapshot_id                  | None                                          |
    | source_volid                 | None                                          |
    | status                       | in-use                                        |
    | type                         | lvmdriver-1                                   |
    | updated_at                   | 2016-10-13T06:08:11.000000                    |
    | user_id                      | 33fdc37314914796883706b33e587d51              |
    +------------------------------+-----------------------------------------------+
    

从实例分离卷

  1. 分离您的卷,指定服务器 ID 和卷 ID

    $ openstack server remove volume 84c6e57d-a6b1-44b6-81eb-fcb36afd31b5 \
      573e024d-5235-49ce-8332-be1576d323f8
    
  2. 显示您的卷的信息

    $ openstack volume show 573e024d-5235-49ce-8332-be1576d323f8
    

    输出显示该卷不再附加到服务器

    +------------------------------+-----------------------------------------------+
    | Field                        | Value                                         |
    +------------------------------+-----------------------------------------------+
    | attachments                  | []                                            |
    | availability_zone            | nova                                          |
    | bootable                     | true                                          |
    | consistencygroup_id          | None                                          |
    | created_at                   | 2016-10-13T06:08:07.000000                    |
    | description                  | None                                          |
    | encrypted                    | False                                         |
    | id                           | 573e024d-5235-49ce-8332-be1576d323f8          |
    | multiattach                  | False                                         |
    | name                         | my-new-volume                                 |
    | properties                   |                                               |
    | replication_status           | disabled                                      |
    | size                         | 8                                             |
    | snapshot_id                  | None                                          |
    | source_volid                 | None                                          |
    | status                       | in-use                                        |
    | type                         | lvmdriver-1                                   |
    | updated_at                   | 2016-10-13T06:08:11.000000                    |
    | user_id                      | 33fdc37314914796883706b33e587d51              |
    +------------------------------+-----------------------------------------------+
    

删除卷

  1. 要删除您的卷,您必须先将其从服务器分离。要分离服务器上的卷并检查现有卷的列表,请参阅步骤 1 和 2 在 Resize_a_volume

    使用卷名称或 ID 删除卷

    $ openstack volume delete my-new-volume
    

    此命令不提供任何输出。

  2. 再次列出卷,并注意您的卷的状态为 deleting

    $ openstack volume list
    +----------------+-----------------+-----------+------+-------------+
    |       ID       |   Name          |  Status   | Size | Attached to |
    +----------------+-----------------+-----------+------+-------------+
    | 573e024d-52... |  my-new-volume  |  deleting |  8   |             |
    | bd7cf584-45... | my-bootable-vol | available |  8   |             |
    +----------------+-----------------+-----------+------+-------------+
    

    当卷完全删除时,它将从卷列表中消失

    $ openstack volume list
    +----------------+-----------------+-----------+------+-------------+
    |       ID       |   Name          |  Status   | Size | Attached to |
    +----------------+-----------------+-----------+------+-------------+
    | bd7cf584-45... | my-bootable-vol | available |  8   |             |
    +----------------+-----------------+-----------+------+-------------+
    

调整卷大小

  1. 要调整您的卷大小,您必须先将其从服务器分离,如果卷驱动程序不支持使用中的扩展。(请参阅 Extend_attached_volume。)要从服务器分离卷,请将服务器 ID 和卷 ID 传递给以下命令

    $ openstack server remove volume 84c6e57d-a6b1-44b6-81eb-fcb36afd31b5 573e024d-5235-49ce-8332-be1576d323f8
    

    此命令不提供任何输出。

  2. 列出卷

    $ openstack volume list
    +----------------+-----------------+-----------+------+-------------+
    |       ID       |   Name          |  Status   | Size | Attached to |
    +----------------+-----------------+-----------+------+-------------+
    | 573e024d-52... |  my-new-volume  | available |  8   |             |
    | bd7cf584-45... | my-bootable-vol | available |  8   |             |
    +----------------+-----------------+-----------+------+-------------+
    

    请注意,该卷现在可用。

  3. 通过传递卷 ID 和新大小(大于旧大小的值)作为参数来调整卷大小

    $ openstack volume set 573e024d-5235-49ce-8332-be1576d323f8 --size 10
    

    此命令不提供任何输出。注意:卷状态 reserved 不是扩展操作的有效状态。

    注意

    在扩展使用快照的 LVM 卷时,该卷将被停用。除非在 lvm.conf 中定义了 auto_activation_volume_list,否则重新激活是自动的。有关更多信息,请参阅 lvm.conf

扩展附加卷

从 microversion 3.42 开始,也可以扩展状态为 in-use 的附加卷,具体取决于策略设置和后端存储的功能。必须存在足够的存储空间才能扩展卷。

  1. 通过传递 microversion、卷 ID 和新大小(大于旧大小的值)作为参数来调整卷大小

    $ openstack --os-volume-api-version 3.42 volume set 573e024d-5235-49ce-8332-be1576d323f8 --size 10
    

    此命令不提供任何输出。

迁移卷

作为管理员,您可以以对用户和工作负载透明的方式将卷及其数据从一个位置迁移到另一个位置。您只能迁移未附加卷且没有快照的卷。

数据迁移的可能用例包括

  • 为了维护,关闭物理存储设备而不会中断工作负载。

  • 修改卷的属性。

  • 释放稀疏配置后端中的空间。

使用以下示例中的 openstack volume migrate 命令迁移卷

$ openstack volume migrate [-h] --host <host> [--force-host-copy]
                                  [--lock-volume] <volume>

此命令的参数是

host

格式为 host@backend-name#pool 的目标主机。

volume

要迁移的卷的 ID。

force-host-copy

禁用任何驱动程序优化,并强制主机复制数据。

lock-volume

防止其他进程中止迁移。

注意

如果卷具有快照,则指定的宿主目标无法接受该卷。如果用户不是管理员,则迁移将失败。

转移卷

您可以使用 openstack volume transfer request create 命令将卷从一个所有者转移到另一个所有者。卷捐赠者(原始所有者)创建一个转移请求,并将创建的转移 ID 和授权密钥发送给卷接收者。卷接收者(新所有者)使用 ID 和密钥接受转移。

从 Rocky 版本开始,Cinder 更改了 v2 和 v3 API 到 microversion 3.55 的 API 行为。快照将默认与卷一起转移。这意味着如果卷具有一些快照,当用户将卷从一个所有者转移到另一个所有者时,这些快照也将随卷一起转移。

从 microversion 3.55 及更高版本开始,Cinder 支持在不使用快照的情况下转移卷。如果用户不想转移快照,他们需要指定新的可选参数 –no-snapshots

从 microversion 3.70 及更高版本开始,Cinder 支持转移加密卷。快照必须与卷一起转移。

注意

卷转移过程适用于云中同一项目的两个项目(卷捐赠者和接收者)。

用例包括

  • 创建一个可引导卷或具有大型数据集的卷,并将其转移给客户。

  • 为了批量导入数据到云端,数据摄取系统创建一个新的块存储卷,从物理设备复制数据,并将设备所有权转移给最终用户。

创建卷转移请求

  1. 以卷捐赠者的身份登录,列出可用的卷

    $ openstack volume list
    +-----------------+-----------------+-----------+------+-------------+
    |       ID        |   Name          |  Status   | Size | Attached to |
    +-----------------+-----------------+-----------+------+-------------+
    | 72bfce9f-cac... |       None      |   error   |  1   |             |
    | a1cdace0-08e... |       None      | available |  1   |             |
    +-----------------+-----------------+-----------+------+-------------+
    
  2. 作为卷捐赠者,为特定卷请求卷转移授权码

    $ openstack volume transfer request create [--no-snapshots] <volume>
    

要传递的参数是

<volume> 要转移的卷的名称或 ID。

--no-snapshots 不带快照转移卷。

卷必须处于 available 状态,否则请求将被拒绝。如果转移请求在数据库中有效(即,未过期或已删除),则该卷将置于 awaiting-transfer 状态。例如

$ openstack volume transfer request create a1cdace0-08e4-4dc7-b9dc-457e9bcfe25f

输出在 id 行中显示卷转移 ID 和授权密钥。

+------------+--------------------------------------+
| Field      | Value                                |
+------------+--------------------------------------+
| auth_key   | 0a59e53630f051e2                     |
| created_at | 2016-11-03T11:49:40.346181           |
| id         | 34e29364-142b-4c7b-8d98-88f765bf176f |
| name       | None                                 |
| volume_id  | a1cdace0-08e4-4dc7-b9dc-457e9bcfe25f |
+------------+--------------------------------------+

注意

您可以选择使用 --name transferName 参数为转移指定名称。

注意

虽然 auth_key 属性在 openstack volume transfer request create VOLUME_ID 的输出中可见,但它在后续的 openstack volume transfer request show TRANSFER_ID 命令中将不可用。

  1. 将卷转移 ID 和授权密钥发送给新所有者(例如,通过电子邮件)。

  2. 查看待处理的转移

    $ openstack volume transfer request list
    +--------------------------------------+--------------------------------------+------+
    |               ID                     |             Volume                   | Name |
    +--------------------------------------+--------------------------------------+------+
    | 6e4e9aa4-bed5-4f94-8f76-df43232f44dc | a1cdace0-08e4-4dc7-b9dc-457e9bcfe25f | None |
    +--------------------------------------+--------------------------------------+------+
    
  3. 在卷接收者(新所有者)接受转移后,您可以看到转移不再可用

    $ openstack volume transfer request list
    +----+-----------+------+
    | ID | Volume ID | Name |
    +----+-----------+------+
    +----+-----------+------+
    

接受卷转移请求

  1. 作为卷接收者,您必须首先从原始所有者处获取转移 ID 和授权密钥。

  2. 接受请求

    $ openstack volume transfer request accept transferID authKey
    

    例如

    $ openstack volume transfer request accept 6e4e9aa4-bed5-4f94-8f76-df43232f44dc b2c8e585cbc68a80
    +-----------+--------------------------------------+
    |  Property |                Value                 |
    +-----------+--------------------------------------+
    |     id    | 6e4e9aa4-bed5-4f94-8f76-df43232f44dc |
    |    name   |                 None                 |
    | volume_id | a1cdace0-08e4-4dc7-b9dc-457e9bcfe25f |
    +-----------+--------------------------------------+
    

    注意

    如果您没有足够的转移配额,则转移将被拒绝。

删除卷转移

  1. 列出可用卷及其状态

    $ openstack volume list
    +-----------------+-----------------+-----------------+------+-------------+
    |       ID        |   Name          |      Status     | Size | Attached to |
    +-----------------+-----------------+-----------------+------+-------------+
    | 72bfce9f-cac... |       None      |      error      |  1   |             |
    | a1cdace0-08e... |       None      |awaiting-transfer|  1   |             |
    +-----------------+-----------------+-----------------+------+-------------+
    
  2. 找到匹配的转移 ID

    $ openstack volume transfer request list
    +--------------------------------------+--------------------------------------+------+
    |               ID                     |             VolumeID                 | Name |
    +--------------------------------------+--------------------------------------+------+
    | a6da6888-7cdf-4291-9c08-8c1f22426b8a | a1cdace0-08e4-4dc7-b9dc-457e9bcfe25f | None |
    +--------------------------------------+--------------------------------------+------+
    
  3. 删除卷

    $ openstack volume transfer request delete <transfer>
    
    <transfer>

    要删除的转移的名称或 ID。

    例如

    $ openstack volume transfer request delete a6da6888-7cdf-4291-9c08-8c1f22426b8a
    
  4. 验证转移列表现在为空,并且该卷再次可用于转移

    $ openstack volume transfer request list
    +----+-----------+------+
    | ID | Volume ID | Name |
    +----+-----------+------+
    +----+-----------+------+
    
    $ openstack volume list
    +-----------------+-----------------+-----------------+------+-------------+
    |       ID        |   Name          |      Status     | Size | Attached to |
    +-----------------+-----------------+-----------------+------+-------------+
    | 72bfce9f-cac... |       None      |      error      |  1   |             |
    | a1cdace0-08e... |       None      |    available    |  1   |             |
    +-----------------+-----------------+-----------------+------+-------------+
    

管理和取消管理快照

快照是卷的某个时间点的版本。作为管理员,您可以管理和取消管理快照。

管理快照

使用 openstack volume snapshot set 命令管理快照

$ openstack volume snapshot set [-h]
                                [--name <name>]
                                [--description <description>]
                                [--no-property]
                                [--property <key=value>]
                                [--state <state>]
                                <snapshot>

要传递的参数是

--name <name>

新的快照名称

--description <description>

新的快照描述

--no-property

删除 <snapshot> 的所有属性(同时指定 –no-property 和 –property 以在设置新属性之前删除当前属性)。

--property <key=value>

要添加或修改此快照的属性(重复选项以设置多个属性)

--state <state>

新的快照状态。(“available”、“error”、“creating”、“deleting”或“error_deleting”)(仅限管理员)(此选项只是更改数据库中快照的状态,不考虑实际状态,使用时请谨慎)

<snapshot>

要修改的快照(名称或 ID)

$ openstack volume snapshot set my-snapshot-id

取消管理快照

使用 openstack volume snapshot unset 命令取消管理快照

$ openstack volume snapshot unset [-h]
                                  [--property <key>]
                                  <snapshot>

要传递的参数是

--property <key>

要从快照中删除的属性(重复选项以删除多个属性)

<snapshot>

要修改的快照(名称或 ID)。

以下示例取消管理 my-snapshot-id 镜像

$ openstack volume snapshot unset my-snapshot-id

在服务列表中报告后端状态

每个 Cinder 服务都报告一个状态和一个状态。分别是管理状态和运行时状态。

要获取所有 Cinder 服务及其状态的列表,请运行以下命令

$ openstack volume service list
+------------------+-------------------+------+---------+-------+----------------------------+
| Binary           | Host              | Zone | Status  | State | Updated At                 |
+------------------+-------------------+------+---------+-------+----------------------------+
| cinder-scheduler | tower             | nova | enabled | up    | 2018-03-30T21:16:11.000000 |
| cinder-volume    | tower@lvmdriver-1 | nova | enabled | up    | 2018-03-30T21:16:15.000000 |
| cinder-backup    | tower             | nova | enabled | up    | 2018-03-30T21:16:14.000000 |
+------------------+-------------------+------+---------+-------+----------------------------+