Red Hat Training

A Red Hat training course is available for RHEL 8

第 11 章 为虚拟机管理存储

您可以使用 CLIweb 控制台管理虚拟机存储。

本文档提供了有关如何使用 virsh 命令管理虚拟机存储的信息。

11.1. 了解虚拟机存储

以下小节提供有关虚拟机(VM)存储的信息,包括存储池、存储卷以及如何用于为虚拟机提供存储的信息。

11.1.1. 虚拟机存储

以下提供了有关如何使用存储池和存储卷为虚拟机创建存储的信息。

存储池是主机管理并留置供虚拟机使用的存储数量。可使用存储池中的空间创建存储卷。每个存储卷都可作为块设备(如磁盘)在客户机总线中分配到虚拟机。

存储池和卷使用 libvirt 管理。使用 libvirt 远程协议,您可以管理虚拟机存储的所有方面。这些操作可以在远程主机上执行。因此,使用 libvirt 的管理应用程序(如 RHEL web 控制台)可以用来执行所有必要的任务来为虚拟机配置存储。

libvirt API 可以用来查询存储池中的卷列表,或者获取存储池中容量、分配和可用存储的信息。可能会查询存储池中的存储卷以获取分配和容量等信息,稀疏卷可能会有所不同。

对于支持它的存储池,可以使用 libvirt API 来创建、克隆、调整和删除存储卷。API 还可用于将数据上传到存储卷,从存储卷下载数据或从存储卷中下载数据。

启动存储池后,可以使用存储池名称和存储卷名称将存储卷分配给虚拟机,而不是虚拟机 XML 配置文件中的主机路径。

11.1.2. 存储池

存储池是一个文件、目录或存储设备,由 libvirt 管理,用来为虚拟机(VM)提供存储。存储池被分成存储虚拟机镜像或作为额外存储附加到虚拟机的存储卷。多个虚拟机可以共享同一存储池,从而更好地分配存储资源。

存储池可以是持久的或临时的:

  • 主机系统重启后,持久性存储池会保留下来。
  • 临时存储池仅在主机重启前存在。

virsh pool-define 命令用于创建持久性存储池,virsh pool-create 命令用于创建临时存储池。

存储池存储类型

存储池可以是本地的也可以基于网络的(共享):

  • 本地存储池

    本地存储池直接附加到主机服务器。它们包括本地设备中的本地目录、直接附加磁盘、物理分区以及逻辑卷管理(LVM)卷组。

    本地存储池对不需要迁移或大量虚拟机的部署非常有用。

  • 联网的(共享)存储池

    联网的存储池包括使用标准协议通过网络共享的存储设备。

存储池使用示例

要演示管理存储池的可用选项,下面描述了使用 mount -t nfs nfs.example.com:/path/to/share /path/to/data 的 NFS 服务器示例。

存储管理员可以在虚拟化主机上定义 NFS 存储池,以描述导出的服务器路径和客户端目标路径。这可允许 libvirtlibvirt 启动时或根据需要在 libvirt 运行时自动执行挂载。NFS 服务器导出目录的文件在 NFS 存储池中被列为存储卷。

当存储卷添加到虚拟机时,管理员不需要为卷添加目标路径。它们只需要根据名称添加存储池和存储卷。因此,如果目标客户端路径改变,它不会影响虚拟机。

启动存储池时,libvirt 将共享挂载到指定目录中,就像系统管理员登录并执行 mount nfs.example.com:/path/to/share /vmdata 一样。如果存储池被配置为自动启动(autostart),libvirt 可确保将 NFS 共享磁盘挂载到 libvirt 启动时指定的目录中。

启动存储池后, NFS 共享磁盘中的文件会作为存储卷报告,并且可能使用 libvirt API 对存储卷的路径进行查询。然后可将存储卷的路径复制到虚拟机 XML 定义的部分,该部分描述了虚拟机块设备的源存储。对于 NFS,使用 libvirt API 的应用程序可以在存储池中创建和删除存储卷(NFS 共享中的文件)到池大小的限制(共享的存储容量)。

停止(销毁)存储池会删除数据的提取,但保持数据不受影响。

并非所有存储池类型都支持创建和删除卷。停止存储池(pool-destroy)会取消启动操作,在本例中卸载 NFS 共享。销毁操作不会修改共享中的数据,即使该命令的名称看似象要删除。如需了解更多详细信息,请参阅 man virsh

支持和不支持的存储池类型

以下是 RHEL 支持的存储池类型列表:

  • 基于目录的存储池
  • 基于磁盘的存储池
  • 基于分区的存储池
  • glusterfs 存储池
  • 基于 iSCSI 的存储池
  • 基于 LVM 的存储池
  • 基于 NFS 的存储池
  • 使用 vHBA 设备基于 SCSI 的存储池
  • 基于多路径的存储池
  • 基于 RBD 的存储池

以下是 RHEL 不支持的 libvirt 存储池类型的列表:

  • 基于 Sheepdog 的存储池
  • 基于 Vstorage 的存储池
  • 基于 ZFS 的存储池

11.1.3. 存储卷

存储池被分成不同的 storage volumes。存储卷是物理分区、LVM 逻辑卷、基于文件的磁盘镜像,以及 libvirt 处理的其他存储类型抽象。无论底层硬件是什么,存储卷都以本地存储设备(如磁盘)的形式出现在虚拟机中。

在主机机器上,存储卷由它的名称和生成该存储池的存储池标识符来引用。在 virsh 命令行中,格式为 --pool storage_pool volume_name

例如:要在 guest_images 池中显示名为 firstimage 的卷信息。

# virsh vol-info --pool guest_images firstimage
  Name:             firstimage
  Type:             block
  Capacity:         20.00 GB
  Allocation:       20.00 GB

11.2. 使用 CLI 管理虚拟机存储

以下文档提供了有关如何使用 virsh 命令行实用程序管理虚拟机(VM)存储的信息。

使用 virsh,您可以添加、删除和修改虚拟机存储,以及查看有关虚拟机存储的信息。

注意

在很多情况下,虚拟机的存储会在创建虚拟机时同时创建。因此,以下信息主要与虚拟机存储的高级管理相关。

11.2.1. 使用 CLI 查看虚拟机存储信息

以下提供了有关使用 CLI 查看存储池和存储卷的信息。

11.2.1.1. 使用 CLI 查看存储池信息

通过 CLI,您可以查看所有存储池的列表,其中包含有关存储池的有限或完整详情。您还可以过滤列出的存储池。

流程

  • 使用 virsh pool-list 命令查看存储池信息。

    # virsh pool-list --all --details
     Name                State    Autostart  Persistent    Capacity  Allocation   Available
     default             running  yes        yes          48.97 GiB   23.93 GiB   25.03 GiB
     Downloads           running  yes        yes         175.62 GiB   62.02 GiB  113.60 GiB
     RHEL8-Storage-Pool  running  yes        yes         214.62 GiB   93.02 GiB  168.60 GiB

其它资源

  • 如需可用 virsh pool-list 选项的信息,请使用 virsh pool-list --help 命令。

11.2.1.2. 使用 CLI 查看存储卷信息

以下提供了有关查看存储池的信息。您可以查看指定存储池中的所有存储池列表,以及指定存储池的详情。

流程

  1. 使用 virsh vol-list 命令列出指定存储池中的存储卷。

    # virsh vol-list --pool RHEL8-Storage-Pool --details
     Name                Path                                               Type   Capacity  Allocation
    ---------------------------------------------------------------------------------------------
     .bash_history       /home/VirtualMachines/.bash_history       file  18.70 KiB   20.00 KiB
     .bash_logout        /home/VirtualMachines/.bash_logout        file    18.00 B    4.00 KiB
     .bash_profile       /home/VirtualMachines/.bash_profile       file   193.00 B    4.00 KiB
     .bashrc             /home/VirtualMachines/.bashrc             file   1.29 KiB    4.00 KiB
     .git-prompt.sh      /home/VirtualMachines/.git-prompt.sh      file  15.84 KiB   16.00 KiB
     .gitconfig          /home/VirtualMachines/.gitconfig          file   167.00 B    4.00 KiB
     RHEL8_Volume.qcow2  /home/VirtualMachines/RHEL8_Volume.qcow2  file  60.00 GiB   13.93 GiB
  2. 使用 virsh vol-info 命令列出指定存储池中的存储卷。

    # vol-info --pool RHEL8-Storage-Pool --vol RHEL8_Volume.qcow2
    Name:           RHEL8_Volume.qcow2
    Type:           file
    Capacity:       60.00 GiB
    Allocation:     13.93 GiB

11.2.2. 使用 CLI 为虚拟机创建并分配存储

以下是为虚拟机(VM)创建和分配存储的高级别流程:

  1. 创建存储池

    从可用存储介质创建一个或多个存储池。如需支持的存储池类型列表,请参阅存储池类型

    • 要创建持久性存储池,使用 virsh pool-define-asvirsh pool-define 命令。

      virsh pool-define-as 命令将选项放在命令行中。virsh pool-define 命令在池选项中使用 XML 文件。

    • 要创建临时存储池,使用 virsh pool-createvirsh pool-create-as 命令。

      virsh pool-create-as 命令将选项放在命令行中。virsh pool-create 命令在池选项中使用 XML 文件。

  1. 创建存储卷

    从可用存储池创建一个或多个存储卷

  2. 为虚拟机分配存储设备

    将从存储卷中提取的一个或多个存储设备分配给虚拟机。

以下小节提供有关使用 CLI 创建和分配存储的信息:

11.2.2.1. 使用 CLI 为虚拟机创建并分配基于目录的存储

以下提供了有关创建基于目录的存储池和存储卷以及将卷分配给虚拟机的信息。

11.2.2.1.1. 使用 CLI 创建基于目录的存储池

以下提供了创建基于目录的存储池的说明。

先决条件

  • 确定您的管理程序支持目录存储池:

    # virsh pool-capabilities | grep "'dir' supported='yes'"

    如果命令显示任何输出结果,则代表支持目录池。

流程

  1. 创建存储池

    使用 virsh pool-define-as 命令定义并创建目录类型存储池。例如,要创建一个名为 guest_images_dir 的、使用 /guest_images 目录的存储池:

    # virsh pool-define-as guest_images_dir dir --target "/guest_images"
    Pool guest_images_dir defined

    如果您已经有要创建的存储池的 XML 配置,,也可以根据 XML 定义池。详情请查看 第 11.2.2.1.2 节 “基于目录的存储池参数”

  2. 创建存储池目标路径

    使用 virsh pool-build 命令为预格式的文件系统存储池创建存储池目标路径,初始化存储源设备并定义数据格式。

    # virsh pool-build guest_images_dir
      Pool guest_images_dir built
    
    # ls -la /guest_images
      total 8
      drwx------.  2 root root 4096 May 31 19:38 .
      dr-xr-xr-x. 25 root root 4096 May 31 19:38 ..
  3. 验证是否已创建池

    使用 virsh pool-list 命令验证池是否已创建。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_dir     inactive   no
  4. 启动存储池

    使用 virsh pool-start 命令挂载存储池。

    # virsh pool-start guest_images_dir
      Pool guest_images_dir started
    注意

    virsh pool-start 命令只适用于持久性存储池。临时存储池创建时会自动启动。

  5. [可选]自动启动过程

    默认情况下,使用 virsh 命令定义的存储池不会被设置为在每次 libvirtd 启动时自动启动。使用 virsh pool-autostart 命令将存储池配置为 autostart。

    # virsh pool-autostart guest_images_dir
      Pool guest_images_dir marked as autostarted

验证

  1. 使用 virsh pool-list 命令验证 Autostart 状态。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_dir     inactive   yes
  2. 验证存储池是否已正确创建,报告的大小与预期相同,状态报告为 running

    # virsh pool-info guest_images_dir
      Name:           guest_images_dir
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB
11.2.2.1.2. 基于目录的存储池参数

这部分提供了基于目录的存储池所需的 XML 参数以及示例。

您可以根据指定文件中的 XML 配置来定义一个存储池。例如:

# virsh pool-define ~/guest_images.xml
  Pool defined from guest_images_dir

参数

下表提供了基于目录的存储池 XML 文件所需的参数列表。

表 11.1. 基于目录的存储池参数

描述XML

存储池的类型

<pool type='dir'>

存储池的名称

<name>name</name>

指定目标的路径。这将是用于存储池的路径。

<target>
   <path>target_path</path>
</target>

示例

以下是基于 /guest_images 目录的存储池的 XML 文件示例:

<pool type='dir'>
  <name>dirpool</name>
  <target>
    <path>/guest_images</path>
  </target>
</pool>

其它资源

有关创建基于目录的存储池的详情,请参考 第 11.2.2.1.1 节 “使用 CLI 创建基于目录的存储池”

11.2.2.2. 使用 CLI 为虚拟机创建并分配基于磁盘的存储

以下提供了有关创建基于磁盘的存储池和存储卷以及将卷分配给虚拟机的信息。

11.2.2.2.1. 使用 CLI 创建基于磁盘的存储池

以下提供了创建基于磁盘存储池的说明。

建议

在创建基于磁盘的存储池前请注意以下几点:

  • 根据使用的 libvirt 版本,将磁盘分配给存储池可能会重新格式化并删除所有当前存储在磁盘设备中的数据。强烈建议您在创建存储池前备份存储设备中的数据。
  • 虚拟机不应该被授予整个磁盘或者块设备的写入权限(例如: /dev/sdb)。使用分区(例如 /dev/sdb1)或者 LVM 卷。

    如果您将整个块设备传递给虚拟机,VM 可能会对该设备进行分区或者创建自己的 LVM 组。这可能导致主机机器检测到这些分区或者 LVM 组并导致错误。

先决条件

  • 确定您的管理程序支持基于磁盘的存储池:

    # virsh pool-capabilities | grep "'disk' supported='yes'"

    如果命令显示任何输出结果,则代表支持基于磁盘的池。

流程

  1. 创建存储池

    使用 virsh pool-define-as 命令定义并创建磁盘类型存储池。例如:要创建一个名为 guest_images_disk 的、使用 /dev/sdb1 分区并挂载到 /dev 目录中的存储池:

    # virsh pool-define-as guest_images_disk disk gpt --source-dev=/dev/sdb1 --target /dev
    Pool guest_images_disk defined

    如果您已经有要创建的存储池的 XML 配置,,也可以根据 XML 定义池。详情请查看 第 11.2.2.2.2 节 “基于磁盘的存储池参数”

  2. 创建存储池目标路径

    使用 virsh pool-build 命令为预格式的文件系统存储池创建存储池目标路径,初始化存储源设备,并定义数据格式。

    # virsh pool-build guest_images_disk
      Pool guest_images_disk built
    注意

    只有基于磁盘、文件系统和逻辑存储池才需要构建目标路径。如果 libvirt 检测到源存储设备的数据格式与所选存储池类型不同,则构建会失败,除非指定了 overwrite 选项。

  3. 验证是否已创建池

    使用 virsh pool-list 命令验证池是否已创建。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_disk    inactive   no
  4. 启动存储池

    使用 virsh pool-start 命令挂载存储池。

    # virsh pool-start guest_images_disk
      Pool guest_images_disk started
    注意

    virsh pool-start 命令只适用于持久性存储池。临时存储池创建时会自动启动。

  5. [可选]自动启动过程

    默认情况下,使用 virsh 命令定义的存储池不会被设置为在每次 libvirtd 启动时自动启动。使用 virsh pool-autostart 命令将存储池配置为 autostart。

    # virsh pool-autostart guest_images_disk
      Pool guest_images_disk marked as autostarted

验证

  1. 使用 virsh pool-list 命令验证 Autostart 状态。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_disk    inactive   yes
  2. 验证存储池是否已正确创建,报告的大小与预期相同,状态报告为 running

    # virsh pool-info guest_images_disk
      Name:           guest_images_disk
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB
11.2.2.2.2. 基于磁盘的存储池参数

这部分提供了基于磁盘存储池所需的 XML 参数以及示例。

您可以根据指定文件中的 XML 配置来定义一个存储池。例如:

# virsh pool-define ~/guest_images.xml
  Pool defined from guest_images_disk

参数

下表提供了基于磁盘存储池的 XML 文件所需的参数列表。

表 11.2. 基于磁盘的存储池参数

描述XML

存储池的类型

<pool type='disk'>

存储池的名称

<name>name</name>

指定存储设备的路径。例如: /dev/sdb

<source>
   <path>source_path</path>
</source>

指定目标设备的路径。这将是用于存储池的路径。

<target>
   <path>target_path</path>
</target>

示例

以下是基于磁盘存储池的 XML 文件示例:

<pool type='disk'>
  <name>phy_disk</name>
  <source>
    <device path='/dev/sdb'/>
    <format type='gpt'/>
  </source>
  <target>
    <path>/dev</path>
  </target>
</pool>

其它资源

有关创建基于磁盘的存储池的详情,请参考 第 11.2.2.2.1 节 “使用 CLI 创建基于磁盘的存储池”

11.2.2.3. 使用 CLI 为虚拟机创建并分配基于文件系统的存储

以下提供了有关创建基于文件系统的存储池和存储卷以及将卷分配给虚拟机的信息。

11.2.2.3.1. 使用 CLI 创建基于文件系统的存储池

以下提供了创建基于文件系统的存储池的说明。

建议

不要使用这个步骤将整个磁盘分配为存储池(例如 /dev/sdb)。不应该为虚拟机授予对整个磁盘或块设备的写入权限。这个方法应该只用于为存储池分配分区(例如 /dev/sdb1)。

先决条件

  • 确保您的管理程序支持基于文件系统的存储池:

    # virsh pool-capabilities | grep "'fs' supported='yes'"

    如果该命令显示任何输出结果,则代表支持基于文件的池。

流程

  1. 创建存储池

    使用 virsh pool-define-as 命令定义并创建文件系统类型的存储池。例如:要创建一个名为 guest_images_fs 的、使用 /dev/sdc1 分区并挂载到 /guest_images 目录中的存储池:

    # virsh pool-define-as guest_images_fs fs --source-dev /dev/sdc1 --target /guest_images
    Pool guest_images_fs defined

    如果您已经有要创建的存储池的 XML 配置,,也可以根据 XML 定义池。详情请查看 第 11.2.2.3.2 节 “基于文件系统的存储池参数”

  2. 定义存储池目标路径

    使用 virsh pool-build 命令为预格式的文件系统存储池创建存储池目标路径,初始化存储源设备,并定义数据格式。

    # virsh pool-build guest_images_fs
      Pool guest_images_fs built
    
    # ls -la /guest_images
      total 8
      drwx------.  2 root root 4096 May 31 19:38 .
      dr-xr-xr-x. 25 root root 4096 May 31 19:38 ..
  3. 验证是否已创建池

    使用 virsh pool-list 命令验证池是否已创建。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_fs      inactive   no
  4. 启动存储池

    使用 virsh pool-start 命令挂载存储池。

    # virsh pool-start guest_images_fs
      Pool guest_images_fs started
    注意

    virsh pool-start 命令只适用于持久性存储池。临时存储池创建时会自动启动。

  5. [可选]自动启动过程

    默认情况下,使用 virsh 命令定义的存储池不会被设置为在每次 libvirtd 启动时自动启动。使用 virsh pool-autostart 命令将存储池配置为 autostart。

    # virsh pool-autostart guest_images_fs
      Pool guest_images_fs marked as autostarted
  6. 验证 Autostart 状态

    使用 virsh pool-list 命令验证 Autostart 状态。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_fs      inactive   yes
  7. 验证存储池

    验证存储池是否已正确创建,报告的大小与预期相同,状态报告为 running。验证文件系统的目标路径中存在 lost+found 目录,这代表挂载了该设备。

    # virsh pool-info guest_images_fs
      Name:           guest_images_fs
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB
    
    # mount | grep /guest_images
      /dev/sdc1 on /guest_images type ext4 (rw)
    
    # ls -la /guest_images
      total 24
      drwxr-xr-x.  3 root root  4096 May 31 19:47 .
      dr-xr-xr-x. 25 root root  4096 May 31 19:38 ..
      drwx------.  2 root root 16384 May 31 14:18 lost+found
11.2.2.3.2. 基于文件系统的存储池参数

以下提供了有关基于文件系统的存储池和示例所需的参数的信息。

您可以根据指定文件中的 XML 配置来定义一个存储池。例如:

# virsh pool-define ~/guest_images.xml
  Pool defined from guest_images_fs

参数

下表提供了基于文件系统的存储池 XML 文件所需的参数列表。

表 11.3. 基于文件系统的存储池参数

描述XML

存储池的类型

<pool type='fs'>

存储池的名称

<name>name</name>

指定分区的路径。例如: /dev/sdc1

<source>
   <device path=device_path />

文件系统类型,例如 ext4

    <format type=fs_type />
</source>

指定目标的路径。这将是用于存储池的路径。

<target>
    <path>path-to-pool</path>
</target>

示例

以下是基于 /dev/sdc1 分区的存储池的 XML 文件示例:

<pool type='fs'>
  <name>guest_images_fs</name>
  <source>
    <device path='/dev/sdc1'/>
    <format type='auto'/>
  </source>
  <target>
    <path>/guest_images</path>
  </target>
</pool>

其它资源

有关创建基于文件系统的存储池的详情,请参考 第 11.2.2.3.1 节 “使用 CLI 创建基于文件系统的存储池”

11.2.2.4. 使用 CLI 为虚拟机创建并分配 GlusterFS 存储

以下提供了有关创建基于 GlusterFS 的存储池和存储卷以及将卷分配给虚拟机的信息。

11.2.2.4.1. 使用 CLI 创建基于 GlusterFS 的存储池

Glusterfs 是一个用户空间文件系统,它在 Userspace(FUSE)中使用文件系统。以下提供了创建基于 GlusterFS 的存储池的说明。

先决条件

  • 在主机上创建基于 GlusterFS 的存储池前,先准备 Gluster。

    1. 使用以下命令列出 Gluster 服务器的状态来获取 Gluster 服务器的 IP 地址:

      # gluster volume status
      Status of volume: gluster-vol1
      Gluster process                           Port	Online	Pid
      ------------------------------------------------------------
      Brick 222.111.222.111:/gluster-vol1       49155	  Y    18634
      
      Task Status of Volume gluster-vol1
      ------------------------------------------------------------
      There are no active volume tasks
    2. 如果没有安装,请安装 glusterfs-fuse 软件包。
    3. 如果没有启用,请启用 virt_use_fusefs 布尔值。检查是否已启用。

      # setsebool virt_use_fusefs on
      # getsebool virt_use_fusefs
      virt_use_fusefs --> on
  • 确保您的管理程序支持基于 GlusterFS 的存储池:

    # virsh pool-capabilities | grep "'gluster' supported='yes'"

    如果命令显示任何输出结果,则支持基于 GlusterFS 的池。

流程

  1. 创建存储池

    使用 virsh pool-define-as 命令定义并创建基于 GlusterFS 的存储池。例如,要创建一个名为 guest_images_glusterfs 的存储池,它使用名为 gluster-vol1 的 Gluster 服务器,使用 IP 111.222.111.222,并挂载到 Gluster 服务器的根目录中:

    # virsh pool-define-as --name guest_images_glusterfs --type gluster --source-host 111.222.111.222 --source-name gluster-vol1 --source-path /
    Pool guest_images_glusterfs defined

    如果您已经有要创建的存储池的 XML 配置,,也可以根据 XML 定义池。详情请查看 第 11.2.2.4.2 节 “glusterfs 基于存储池参数”

  2. 验证是否已创建池

    使用 virsh pool-list 命令验证池是否已创建。

    # virsh pool-list --all
    
      Name                    State      Autostart
      --------------------------------------------
      default                 active     yes
      guest_images_glusterfs  inactive   no
  3. 启动存储池

    使用 virsh pool-start 命令挂载存储池。

    # virsh pool-start guest_images_glusterfs
      Pool guest_images_glusterfs started
    注意

    virsh pool-start 命令只适用于持久性存储池。临时存储池创建时会自动启动。

  4. [可选]自动启动过程

    默认情况下,使用 virsh 命令定义的存储池不会被设置为在每次 libvirtd 启动时自动启动。使用 virsh pool-autostart 命令将存储池配置为 autostart。

    # virsh pool-autostart guest_images_glusterfs
      Pool guest_images_glusterfs marked as autostarted

验证

  1. 使用 virsh pool-list 命令验证 Autostart 状态。

    # virsh pool-list --all
    
      Name                    State      Autostart
      --------------------------------------------
      default                 active     yes
      guest_images_glusterfs  inactive   yes
  2. 验证存储池是否已正确创建,报告的大小与预期相同,状态报告为 running

    # virsh pool-info guest_images_glusterfs
      Name:           guest_images_glusterfs
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB
11.2.2.4.2. glusterfs 基于存储池参数

以下提供了有关基于 GlusterFS 的存储池和示例所需的参数的信息。

您可以根据指定文件中的 XML 配置来定义一个存储池。例如:

# virsh pool-define ~/guest_images.xml
  Pool defined from guest_images_glusterfs

参数

下表提供了基于 GlusterFS 的存储池 XML 文件所需的参数列表。

表 11.4. glusterfs 基于存储池参数

描述XML

存储池的类型

<pool type='gluster'>

存储池的名称

<name>name</name>

Gluster 服务器的主机名或 IP 地址

<source>
   <name=gluster-name />

用于存储池的 Gluster 服务器上的路径。

    <dir path=gluster-path />
</source>

示例

以下是基于 111.222.111.222 Gluster 文件系统的存储池 XML 文件示例:

<pool type='gluster'>
  <name>Gluster_pool</name>
  <source>
    <host name='111.222.111.222'/>
    <dir path='/'/>
    <name>gluster-vol1</name>
  </source>
</pool>

有关创建基于文件系统的存储池的详情,请参考 第 11.2.2.4.1 节 “使用 CLI 创建基于 GlusterFS 的存储池”

11.2.2.5. 使用 CLI 为虚拟机创建并分配基于 iSCSI 的存储

以下提供了有关创建基于 iSCSI 的存储池和存储卷的信息,使用 libvirt secret 保护基于 iSCSI 的存储池,并将卷分配给虚拟机。

建议

Internet Small Computer System Interface(iSCSI)是用于共享存储设备的网络协议。iSCSI 通过 IP 层使用 SCSI 指令连接到目标(存储服务器)。

使用基于 iSCSI 的设备存储虚拟机可提供更灵活的存储选项,比如使用 iSCSI 作为块存储设备。iSCSI 设备使用 Linux-IO(LIO)目标。这是 Linux 的多协议 SCSI 目标。除了 iSCSI,LIO 还支持使用以太网(FCoE)的光纤通道和光纤通道。

如果您需要阻止对 iSCSI 存储池的访问,您可以使用 libvirt secret 来保护它。

先决条件
  • 在创建基于 iSCSI 的存储池前,您必须创建 iSCSI 对象。您可以使用 targetcli 软件包创建 iSCSI 目标,该软件包为创建软件支持的 iSCSI 目标提供了一个命令集。

    有关创建 iSCSI 对象的详情请参考管理存储设备文档

11.2.2.5.1. 使用 CLI 创建基于 iSCSI 的存储池

以下提供了创建基于 iSCSI 的存储池的说明。

先决条件

  • 确定您的管理程序支持基于 iSCSI 的存储池:

    # virsh pool-capabilities | grep "'iscsi' supported='yes'"

    如果该命令显示任何输出结果,则代表支持基于 iSCSI 的池。

流程

  1. 创建存储池

    使用 virsh pool-define-as 命令定义并创建 iSCSI 类型的存储池。例如,要创建一个名为 guest_images_iscsi 的存储池,它使用 server1.example.com 上的 iqn.2010-05.com.example.server1:iscsirhel7guest IQN,并挂载到 /dev/disk/by-path 路径上:

    # virsh pool-define-as --name guest_images_iscsi --type iscsi --source-host server1.example.com --source-dev iqn.2010-05.com.example.server1:iscsirhel7guest --target /dev/disk/by-path
    Pool guest_images_iscsi defined

    如果您已经有要创建的存储池的 XML 配置,也可以根据 XML 定义池。详情请查看 第 11.2.2.5.2 节 “基于 iSCSI 的存储池参数”

  2. 验证是否已创建池

    使用 virsh pool-list 命令验证池是否已创建。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_iscsi   inactive   no
  3. 启动存储池

    使用 virsh pool-start 命令挂载存储池。

    # virsh pool-start guest_images_iscsi
      Pool guest_images_iscsi started
    注意

    virsh pool-start 命令只适用于持久性存储池。临时存储池创建时会自动启动。

  4. [可选]自动启动过程

    默认情况下,使用 virsh 命令定义的存储池不会被设置为在每次 libvirtd 启动时自动启动。使用 virsh pool-autostart 命令将存储池配置为 autostart。

    # virsh pool-autostart guest_images_iscsi
      Pool guest_images_iscsi marked as autostarted

验证

  1. 使用 virsh pool-list 命令验证 Autostart 状态。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_iscsi   inactive   yes
  2. 验证存储池是否已正确创建,报告的大小与预期相同,状态报告为 running。验证文件系统的目标路径中存在 lost+found 目录,这代表挂载了该设备。

    # virsh pool-info guest_images_iscsi
      Name:           guest_images_iscsi
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB
11.2.2.5.2. 基于 iSCSI 的存储池参数

以下提供了有关基于 iSCSI 存储池和示例所需的参数的信息。

您可以根据指定文件中的 XML 配置来定义一个存储池。例如:

# virsh pool-define ~/guest_images.xml
  Pool defined from guest_images_iscsi

参数

下表提供了基于 iSCSI 存储池的 XML 文件所需的参数列表。

表 11.5. 基于 iSCSI 的存储池参数

描述XML

存储池的类型

<pool type='iscsi'>

存储池的名称

<name>name</name>

主机的名称

<source>
  <host name=hostname />

iSCSI IQN

    <device path= iSCSI_IQN />
</source>

指定目标的路径。这将是用于存储池的路径。

<target>
   <path>/dev/disk/by-path</path>
</target>

[可选] iSCSI initiator 的 IQN。只有 ACL 将 LUN 限制为特定发起方时才需要。

<initiator>
   <iqn name='initiator0' />
</initiator>

注意

iSCSI initiator 的 IQN 可使用 virsh find-storage-pool-sources-as iscsi 命令确定。

示例

以下是基于指定 iSCSI 设备的存储池的 XML 文件示例:

<pool type='iscsi'>
  <name>iSCSI_pool</name>
  <source>
    <host name='server1.example.com'/>
    <device path='iqn.2010-05.com.example.server1:iscsirhel7guest'/>
  </source>
  <target>
    <path>/dev/disk/by-path</path>
  </target>
</pool>

其它资源

有关创建基于 iSCSCI 的存储池的详情,请参考 第 11.2.2.5.1 节 “使用 CLI 创建基于 iSCSI 的存储池”

11.2.2.5.3. 使用 libvirt secret 保护 iSCSI 存储池

可以使用 virsh 配置用户名和密码参数来保护 iSCSI 存储池的安全。您可以在定义池之前或之后配置它,但必须启动池才能使验证设置生效。

以下提供了使用 libvirt secret 保护基于 iSCSI 的存储池的说明。

注意

如果在创建 iSCSI 目标时定义了 user_IDpassword,则需要这个过程。

流程

  1. 创建一个带有 challenge-handshake 验证协议(CHAP)用户名的 libvirt secret 文件。例如:

    <secret ephemeral='no' private='yes'>
        <description>Passphrase for the iSCSI example.com server</description>
        <usage type='iscsi'>
            <target>iscsirhel7secret</target>
        </usage>
    </secret>
  2. 使用 virsh secret-define 命令定义 libvirt secret。

    # virsh secret-define secret.xml

  3. 使用 virsh secret-list 命令验证 UUID。

    # virsh secret-list
    UUID                                  Usage
    -------------------------------------------------------------------
    2d7891af-20be-4e5e-af83-190e8a922360  iscsi iscsirhel7secret
  4. 使用 virsh secret-set-value 命令为上一步输出中的 UUID 分配 secret。这样可保证 CHAP 用户名和密码位于由 libvirt 控制的 secret 列表中。例如:

    # virsh secret-set-value --interactive 2d7891af-20be-4e5e-af83-190e8a922360
    Enter new value for secret:
    Secret value set
  5. 使用 virsh edit 命令在存储池的 XML 文件中添加身份验证条目,并添加 <auth> 元素,指定 authentication typeusernamesecret usage

    例如:

    <pool type='iscsi'>
      <name>iscsirhel7pool</name>
        <source>
           <host name='192.168.122.1'/>
           <device path='iqn.2010-05.com.example.server1:iscsirhel7guest'/>
           <auth type='chap' username='redhat'>
              <secret usage='iscsirhel7secret'/>
           </auth>
        </source>
      <target>
        <path>/dev/disk/by-path</path>
      </target>
    </pool>
    注意

    <auth> 子元素存在于虚拟机 <pool><disk> XML 元素的不同位置。对于 <pool>, <auth><source> 元素中指定,因为这描述了在哪里查找池源,因为身份验证是某些池源(iSCSI 和 RBD)的属性。对于 <disk> (域的子元素),对 iSCSI 或 RBD 磁盘的验证是磁盘的属性。另外,磁盘的 <auth> 子元素与存储池的不同。

    <auth username='redhat'>
      <secret type='iscsi' usage='iscsirhel7secret'/>
    </auth>
  6. 要激活更改,激活存储池。如果池已启动,停止并重启存储池:

    # virsh pool-destroy iscsirhel7pool
    # virsh pool-start iscsirhel7pool

11.2.2.6. 使用 CLI 为虚拟机创建并分配基于 LVM 的存储

以下提供了有关创建基于 LVM 的存储池和存储卷以及将卷分配给虚拟机的信息。

11.2.2.6.1. 使用 CLI 创建基于 LVM 的存储池

以下提供了创建基于 LVM 的存储池的说明。

建议

在创建基于 LVM 的存储池前请注意以下几点:

  • 基于 LVM 的存储池不能为 LVM 提供完整的灵活性。
  • libvirt 支持精简逻辑卷,但不提供精简存储池的功能。
  • 基于 LVM 的存储池是卷组。您可以使用逻辑卷管理器命令或 virsh 命令创建卷组。要使用 virsh 接口管理卷组,使用 virsh 命令创建卷组。

    有关卷组的详情,请参阅 Red Hat Enterprise Linux Logical Volume Manager Administration Guide

  • 基于 LVM 的存储池需要一个完整磁盘分区。如果用这些步骤激活新分区或设备,分区将被格式化并删除所有数据。如果使用主机已有的卷组(VG),则不会删除任何问题。建议您在启动前备份存储设备。

先决条件

  • 确定您的管理程序支持基于 LVM 的存储池:

    # virsh pool-capabilities | grep "'logical' supported='yes'"

    如果命令显示任何输出结果,则支持基于 LVM 的池。

流程

  1. 创建存储池

    使用 virsh pool-define-as 命令定义并创建 LVM 类型的存储池。例如:下面创建了一个名为 guest_images_logical 的存储池,它使用挂载到 /dev/sdc 中的 libvirt_lvm LVM 设备。创建的存储池挂载为 /dev/libvirt_lvm

    # virsh pool-define-as guest_images_logical logical --source-dev=/dev/sdc --source-name libvirt_lvm --target /dev/libvirt_lvm
    Pool guest_images_logical defined

    如果您已经有要创建的存储池的 XML 配置,也可以根据 XML 定义池。详情请查看 第 11.2.2.6.2 节 “基于 LVM 的存储池参数”

  2. 验证是否已创建池

    使用 virsh pool-list 命令验证池是否已创建。

    # virsh pool-list --all
    
      Name                   State      Autostart
      -------------------------------------------
      default                active     yes
      guest_images_logical   inactive   no
  3. 启动存储池

    使用 virsh pool-start 命令挂载存储池。

    # virsh pool-start guest_images_logical
      Pool guest_images_logical started
    注意

    virsh pool-start 命令只适用于持久性存储池。临时存储池创建时会自动启动。

  4. [可选]自动启动过程

    默认情况下,使用 virsh 命令定义的存储池不会被设置为在每次 libvirtd 启动时自动启动。使用 virsh pool-autostart 命令将存储池配置为 autostart。

    # virsh pool-autostart guest_images_logical
      Pool guest_images_logical marked as autostarted

验证

  1. 使用 virsh pool-list 命令验证 Autostart 状态。

    # virsh pool-list --all
    
      Name                   State      Autostart
      -------------------------------------------
      default                active     yes
      guest_images_logical   inactive   yes
  2. 验证存储池是否已正确创建,报告的大小与预期相同,状态报告为 running

    # virsh pool-info guest_images_logical
      Name:           guest_images_logical
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB
11.2.2.6.2. 基于 LVM 的存储池参数

以下提供了有关基于 LVM 的存储池和示例所需的参数的信息。

您可以根据指定文件中的 XML 配置来定义一个存储池。例如:

# virsh pool-define ~/guest_images.xml
  Pool defined from guest_images_logical

参数

下表提供了基于 LVM 的存储池 XML 文件所需的参数列表。

表 11.6. 基于 LVM 的存储池参数

描述XML

存储池的类型

<pool type='logical'>

存储池的名称

<name>name</name>

存储池设备的路径

<source>
   <device path='device_path' />`

卷组名称

    <name>VG-name</name>

虚拟组格式

    <format type='lvm2' />
</source>

目标路径

<target>
   <path=target_path />
</target>

注意

如果逻辑卷组由多个磁盘分区组成,则可能会列出多个源设备。例如:

<source>
  <device path='/dev/sda1'/>
  <device path='/dev/sdb3'/>
  <device path='/dev/sdc2'/>
  ...
</source>

示例

以下是基于指定 LVM 的存储池的 XML 文件示例:

<pool type='logical'>
  <name>guest_images_lvm</name>
  <source>
    <device path='/dev/sdc'/>
    <name>libvirt_lvm</name>
    <format type='lvm2'/>
  </source>
  <target>
    <path>/dev/libvirt_lvm</path>
  </target>
</pool>

其它资源

有关创建基于 iSCSCI 的存储池的详情,请参考 第 11.2.2.6.1 节 “使用 CLI 创建基于 LVM 的存储池”

11.2.2.7. 使用 CLI 为虚拟机创建并分配基于网络的存储

以下提供了有关创建基于网络的存储池和存储卷并将卷分配给虚拟机的信息。

先决条件

  • 要创建基于网络文件系统(NFS)的存储池,应该已经将 NFS 服务器配置为主机机器使用。有关 NFS 的详情,请参考 Red Hat Enterprise Linux Storage Administration Guide
  • 确定在主机上安装了您要使用的文件系统所需的工具。例如:通用互联网文件系统(CIFS)为 cifs-utils,或用于 GlusterFS 的 glusterfs.fuse
11.2.2.7.1. 使用 CLI 创建基于 NFS 的存储池

以下是根据网络文件系统(NFS)创建存储池的说明。

先决条件

  • 确定您的管理程序支持基于 NFS 的存储池:

    # virsh pool-capabilities | grep "<value>nfs</value>"

    如果该命令显示任何输出结果,则代表支持基于 NFS 的池。

流程

  1. 创建存储池

    使用 virsh pool-define-as 命令定义并创建一个 NFS 类型的存储池。例如:要创建一个名为 guest_images_netfs 的存储池,它使用一个名为 111.222.111.222 的 NFS 服务器挂载到服务器目录 /home/net_mount 中,使用目标目录 /var/lib/libvirt/images/nfspool:

    # virsh pool-define-as --name guest_images_netfs --type netfs --source-host='111.222.111.222' source-path='/home/net_mount' --source-format='nfs' --target='/var/lib/libvirt/images/nfspool'

    如果您已经有要创建的存储池的 XML 配置,也可以根据 XML 定义池。详情请查看 第 11.2.2.7.2 节 “基于 NFS 的存储池参数”

  2. 验证是否已创建池

    使用 virsh pool-list 命令验证池是否已创建。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_netfs   inactive   no
  3. 启动存储池

    使用 virsh pool-start 命令挂载存储池。

    # virsh pool-start guest_images_netfs
      Pool guest_images_netfs started
    注意

    virsh pool-start 命令只适用于持久性存储池。临时存储池创建时会自动启动。

  4. [可选]自动启动过程

    默认情况下,使用 virsh 命令定义的存储池不会被设置为在每次 libvirtd 启动时自动启动。使用 virsh pool-autostart 命令将存储池配置为 autostart。

    # virsh pool-autostart guest_images_netfs
      Pool guest_images_netfs marked as autostarted

验证

  1. 使用 virsh pool-list 命令验证 Autostart 状态。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_netfs   inactive   yes
  2. 验证存储池是否已正确创建,报告的大小与预期相同,状态报告为 running。验证文件系统的目标路径中存在 lost+found 目录,这代表挂载了该设备。

    # virsh pool-info guest_images_netfs
      Name:           guest_images_netfs
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB
11.2.2.7.2. 基于 NFS 的存储池参数

以下提供了有关基于 NFS 的存储池和示例所需的参数的信息。

您可以根据指定文件中的 XML 配置来定义一个存储池。例如:

# virsh pool-define ~/guest_images.xml
  Pool defined from guest_images_netfs

参数

下表提供了基于 NFS 的存储池 XML 文件所需的参数列表。

表 11.7. 基于 NFS 的存储池参数

描述XML

存储池的类型

<pool type='netfs'>

存储池的名称

<name>name</name>

挂载点所在的网络服务器的主机名。这可以是主机名或 IP 地址。

<source>
   <host name=hostname
/>

存储池的格式

下面是其中之一:

    <format type='nfs' />

    <format type='glusterfs' />

    <format type='cifs' />

网络服务器上使用的目录

    <dir path=source_path />
</source>

指定目标的路径。这将是用于存储池的路径。

<target>
   <path>target_path</path>
</target>

示例

以下是一个基于 file_server NFS 服务器的 /home/net_mount 目录的存储池的 XML 文件示例:

<pool type='netfs'>
  <name>nfspool</name>
  <source>
    <host name='file_server'/>
    <format type='nfs'/>
    <dir path='/home/net_mount'/>
  </source>
  <target>
    <path>/var/lib/libvirt/images/nfspool</path>
  </target>
</pool>

其它资源

有关创建基于 NFS 的存储池的详情,请参考 第 11.2.2.7.1 节 “使用 CLI 创建基于 NFS 的存储池”

11.2.2.8. 使用 CLI 为虚拟机创建并分配基于 SCSI 的存储

以下提供了有关使用 vHBA 设备创建基于 SCSI 的存储池和存储卷的信息,以及将卷分配给虚拟机(VM)。

建议

N_Port ID Virtualization (NPIV)是一个软件技术,它允许共享单一物理光纤通道主机总线适配器(HBA)。这可让多个虚拟机查看来自多个物理主机的同一存储,从而可以更轻松地迁移存储路径。因此,只要指定了正确的存储路径,迁移便不需要创建或复制存储。

在虚拟化中,虚拟主机总线适配器 (或称为 vHBA)控制虚拟机的逻辑单元号(LUN)。要让主机在多个虚拟机间共享一个光纤通道设备路径,您必须为每个虚拟机创建一个 vHBA。多个虚拟机无法使用单个 vHBA。

NPIV 的每个 vHBA 都由其父 HBA 及其自己的 World Wide Node Name(WWNN)和 World Wide Port Name(WWPN)标识。存储的路径由 WWNN 和 WWPN 值决定。父 HBA 可以定义为 scsi_host# 或 WWN/WWPN 对。

注意

如果父 HBA 定义为 scsi_host#,且在主机机器中添加了硬件,则 scsi_host# 分配可能会改变。因此,建议您使用 WWNN/WWPN 对定义父 HBA。

建议您基于 vHBA 定义 libvirt 存储池,因为这会保留 vHBA 配置。

使用 libvirt 存储池有两个主要优点:

  • libvirt 代码可以通过 virsh 命令输出轻松查找 LUN 路径。
  • 您可以迁移虚拟机只需要在目标机器上定义和启动具有相同 vHBA 名称的存储池。要做到这一点,必须在虚拟机 XML 配置中指定 vHBA LUN、libvirt 存储池和卷名称。
注意

在创建 vHBA 前,建议您在主机 LUN 中配置存储阵列(SAN)端的分区,以在虚拟机间提供隔离,并防止可能的数据崩溃。

要创建持久的 vHBA 配置,首先请创建一个 libvirt 'scsi' 存储池 XML 文件。有关 XML 文件的详情,请参考创建 vHBA。当创建一个使用同一物理 HBA 中的存储池的 vHBA 时,建议您对 <path> 值使用一个稳定的位置,比如系统中的 /dev/disk/by-{path|id|uuid|label} 位置之一。

当创建多个使用同一物理 HBA 上的存储池的 vHBA 时, <path> 字段的值只能是 /dev/,否则存储池卷只可以看到其中一个 vHBA,且主机的设备无法公开到带有 NPIV 配置的多个虚拟机。

如需有关 <path><target> 中元素的更多信息,请参阅 上游 libvirt 文档

11.2.2.8.1. 创建 vHBA

以下提供了有关创建虚拟主机总线适配器(vHBA)的步骤。

流程

  1. 使用 virsh nodedev-list --cap vports 命令在主机系统中找到 HBA。

    以下示例显示了支持 vHBA 的两个 HBA 的主机:

    # virsh nodedev-list --cap vports
    scsi_host3
    scsi_host4
  2. 使用 virsh nodedev-dumpxml HBA_device 命令查看 HBA 的详情。

    # virsh nodedev-dumpxml scsi_host3

    命令的输出列出了用于创建 vHBA 的 <name><wwnn><wwpn> 字段。<max_vports> 显示支持的 vHBA 的最大数量。例如:

    <device>
      <name>scsi_host3</name>
      <path>/sys/devices/pci0000:00/0000:00:04.0/0000:10:00.0/host3</path>
      <parent>pci_0000_10_00_0</parent>
      <capability type='scsi_host'>
        <host>3</host>
        <unique_id>0</unique_id>
        <capability type='fc_host'>
          <wwnn>20000000c9848140</wwnn>
          <wwpn>10000000c9848140</wwpn>
          <fabric_wwn>2002000573de9a81</fabric_wwn>
        </capability>
        <capability type='vport_ops'>
          <max_vports>127</max_vports>
          <vports>0</vports>
        </capability>
      </capability>
    </device>

    在这个示例中, <max_vports> 值显示 HBA 配置中有 127 个虚拟端口可用。<vports> 值显示当前使用的虚拟端口数。这些值在创建 vHBA 后更新。

  3. 为 vHBA 主机创建类似如下的 XML 文件。在这些示例中,该文件名为 vhba_host3.xml

    这个示例使用 scsi_host3 来描述父 vHBA。

    <device>
      <parent>scsi_host3</parent>
      <capability type='scsi_host'>
        <capability type='fc_host'>
        </capability>
      </capability>
    </device>

    这个示例使用 WWNN/WWPN 对描述父 vHBA。

    <device>
      <name>vhba</name>
      <parent wwnn='20000000c9848140' wwpn='10000000c9848140'/>
      <capability type='scsi_host'>
        <capability type='fc_host'>
        </capability>
      </capability>
    </device>
    注意

    WWNN 和 WWPN 值必须与上一步中 HBA 详情中的值匹配。

    <parent> 字段指定要与这个 vHBA 设备关联的 HBA 设备。<device> 标签中的详情在下一步中使用来为主机创建新 vHBA 设备。有关 nodedev XML 格式的更多信息,请参阅 libvirt 上游页面

    注意

    virsh 命令不提供定义 parent_wwnnparent_wwpnparent_fabric_wwn 属性的方法。

  4. 使用 virsh nodev-create 命令基于上一步中创建的 XML 文件创建 VHBA。

    # virsh nodedev-create vhba_host3
    Node device scsi_host5 created from vhba_host3.xml

验证

  • 使用 virsh nodedev-dumpxml 命令验证新的 vHBA 详情(scsi_host5):

    # virsh nodedev-dumpxml scsi_host5
    <device>
      <name>scsi_host5</name>
      <path>/sys/devices/pci0000:00/0000:00:04.0/0000:10:00.0/host3/vport-3:0-0/host5</path>
      <parent>scsi_host3</parent>
      <capability type='scsi_host'>
        <host>5</host>
        <unique_id>2</unique_id>
        <capability type='fc_host'>
          <wwnn>5001a4a93526d0a1</wwnn>
          <wwpn>5001a4ace3ee047d</wwpn>
          <fabric_wwn>2002000573de9a81</fabric_wwn>
        </capability>
      </capability>
    </device>
11.2.2.8.2. 通过 CLI,创建带有 vHBA 设备的基于 SCSI 的存储池

以下提供了使用虚拟主机总线适配器(vHBA)设备创建基于 SCSI 的存储池的说明。

先决条件

  • 确定您的管理程序支持基于 SCSI 的存储池:

    # virsh pool-capabilities | grep "'scsi' supported='yes'"

    如果该命令显示任何输出结果,则代表支持基于 SCSI 的池。

  • 在使用 vHBA 设备创建基于 SCSI 的存储池前,先创建一个 vHBA。如需更多信息,请参阅 创建 vHBA

流程

  1. 创建存储池

    使用 virsh pool-define-as 命令定义并创建带有 vHBA 的 SCSI 存储池。例如,以下命令会创建一个名为 guest_images_vhba 的存储池,它使用由 scsi_host3 父适配器识别的 vHBA、全局范围的端口号 5001a4ace3ee047d 以及全局范围节点号 5001a4a93526d0a1。存储池挂载到 /dev/disk/ 目录中:

    # virsh pool-define-as guest_images_vhba scsi --adapter-parent scsi_host3 --adapter-wwnn 5001a4a93526d0a1 --adapter-wwpn 5001a4ace3ee047d --target /dev/disk/
    Pool guest_images_vhba defined

    如果您已经有要创建的存储池的 XML 配置,也可以根据 XML 定义池。详情请查看 第 11.2.2.8.3 节 “使用 vHBA 设备的基于 SCSI 的存储池的参数”

  2. 验证是否已创建池

    使用 virsh pool-list 命令验证池是否已创建。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_vhba    inactive   no
  3. 启动存储池

    使用 virsh pool-start 命令挂载存储池。

    # virsh pool-start guest_images_vhba
      Pool guest_images_vhba started
    注意

    virsh pool-start 命令只适用于持久性存储池。临时存储池创建时会自动启动。

  4. [可选]自动启动过程

    默认情况下,使用 virsh 命令定义的存储池不会被设置为在每次 libvirtd 启动时自动启动。使用 virsh pool-autostart 命令将存储池配置为 autostart。

    # virsh pool-autostart guest_images_vhba
      Pool guest_images_vhba marked as autostarted

验证

  1. 使用 virsh pool-list 命令验证 Autostart 状态。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_vhba    inactive   yes
  2. 验证存储池是否已正确创建,报告的大小与预期相同,状态报告为 running

    # virsh pool-info guest_images_vhba
      Name:           guest_images_vhba
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB
11.2.2.8.3. 使用 vHBA 设备的基于 SCSI 的存储池的参数

以下介绍了使用虚拟主机适配器总线(vHBA)设备基于 SCSi 的存储池所需的参数。

您可以根据指定文件中的 XML 配置来定义一个存储池。例如:

# virsh pool-define ~/guest_images.xml
  Pool defined from guest_images_vhba

参数

下表提供了使用 vHBA 的基于 SCSI 的存储池 XML 文件所需的参数列表。

表 11.8. 使用 vHBA 设备的基于 SCSI 的存储池的参数

描述XML

存储池的类型

<pool type='scsi'>

存储池的名称

<name>name</name>

vHBA 的标识符。parent 属性是可选的。

<source>
   <adapter type='fc_host'
   [parent=parent_scsi_device]
   wwnn='WWNN'
   wwpn='WWPN' />
</source>

目标路径。这将是用于存储池的路径。

<target>
   <path=target_path />
</target>

重要

<path> 字段是 /dev/ 时, libvirt 为卷设备路径生成一个唯一的短设备路径。例如: /dev/sdc。否则会使用物理主机路径。例如: /dev/disk/by-path/pci-0000:10:00.0-fc-0x5006016044602198-lun-0。唯一的短设备路径允许由多个存储池在多个虚拟机(VM)中列出相同的卷。如果多个虚拟机使用了物理主机路径,则可能会出现重复的设备类型警告。

注意

parent 属性可在 <adapter> 字段中使用,用于标识可使用不同路径的 NPIV LUN 的物理 HBA 父级。这个字段 scsi_hostNvportsmax_vports 属性合并来完成父身份。parentparent_wwnnparent_wwpnparent_fabric_wwn 属性提供了不同的保证,保证在主机重启后会使用相同的 HBA。

  • 如果没有指定 parent, libvirt 将使用支持 NPIV 的第一个 scsi_hostN 适配器。
  • 如果只指定 parent,则在配置中添加额外的 SCSI 主机适配器时会出现问题。
  • 如果指定了 parent_wwnnparent_wwpn,则在主机重启后使用相同的 HBA。
  • 如果使用 parent_fabric_wwn,在主机重启同一光纤中的 HBA 后,无论使用的 scsi_hostN 是什么,都会选择同一光纤中的 HBA。

示例

以下是使用 vHBA 的基于 SCSI 的存储池的 XML 文件示例。

  • 它是 HBA 中唯一存储池的存储池:

    <pool type='scsi'>
      <name>vhbapool_host3</name>
      <source>
        <adapter type='fc_host' wwnn='5001a4a93526d0a1' wwpn='5001a4ace3ee047d'/>
      </source>
      <target>
        <path>/dev/disk/by-path</path>
      </target>
    </pool>
  • 存储池是使用单一 vHBA 并使用 parent 属性识别 SCSI 主机设备的几个存储池之一:

    <pool type='scsi'>
      <name>vhbapool_host3</name>
      <source>
        <adapter type='fc_host' parent='scsi_host3' wwnn='5001a4a93526d0a1' wwpn='5001a4ace3ee047d'/>
      </source>
      <target>
        <path>/dev/disk/by-path</path>
      </target>
    </pool>

其它资源

有关使用 vHBA 创建基于 SCSI 的存储池的详情,请参考 第 11.2.2.8.2 节 “通过 CLI,创建带有 vHBA 设备的基于 SCSI 的存储池”

11.2.2.9. 使用 CLI 创建并分配存储卷

要获取磁盘镜像并将其作为虚拟磁盘附加到虚拟机(VM),请创建存储卷并将其 XML 配置分配给虚拟机。

先决条件

  • 主机上存在带有未分配空间的存储池。要验证,列出主机上的存储池:

    # virsh pool-list --details
    
    Name               State     Autostart   Persistent   Capacity     Allocation   Available
    --------------------------------------------------------------------------------------------
    default            running   yes         yes          48.97 GiB    36.34 GiB    12.63 GiB
    Downloads          running   yes         yes          175.92 GiB   121.20 GiB   54.72 GiB
    VM-disks           running   yes         yes          175.92 GiB   121.20 GiB   54.72 GiB

流程

  1. 使用 virsh vol-create-as 命令创建存储卷。例如,基于 guest-images-fs 存储池创建 20 GB qcow2 卷:

    # virsh vol-create-as --pool guest-images-fs --name vm-disk1 --capacity 20 --format qcow2

    重要: 特定存储池类型不支持 virsh vol-create-as 命令,而是需要特定的进程来创建存储卷:

    • 基于 glusterfs - 使用 qemu-img 命令创建存储卷。
    • 基于 iSCSI - 事先在 iSCSI 服务器中准备 iSCSI LUN。
    • 基于多路径 - 使用 multipathd 命令准备或管理多路径。
    • 基于 vHBA - 事先准备光纤通道卡。
  2. 创建一个 XML 文件,并在其中添加以下几行。此文件将用于将存储卷作为磁盘添加到虚拟机。

    <disk type='volume' device='disk'>
        <driver name='qemu' type='qcow2'/>
        <source pool='guest-images-fs' volume='vm-disk1'/>
        <target dev='hdk' bus='ide'/>
    </disk>

    这个示例指定了一个使用在上一步中创建的 vm-disk1 卷的虚拟磁盘,并将卷设置为 ide 总线上的磁盘 hdk。根据您的环境修改对应的参数。

    重要: 通过特定的存储池类型,您必须使用不同的 XML 格式描述存储卷磁盘。

    • 对于 基于 GlusterFS 的池:

        <disk type='network' device='disk'>
          <driver name='qemu' type='raw'/>
          <source protocol='gluster' name='Volume1/Image'>
            <host name='example.org' port='6000'/>
          </source>
          <target dev='vda' bus='virtio'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
        </disk>
    • 对于 基于多路径的池:

      <disk type='block' device='disk'>
      <driver name='qemu' type='raw'/>
      <source dev='/dev/mapper/mpatha' />
      <target dev='sda' bus='scsi'/>
      </disk>
    • 对于 基于 RBD 存储的池:

        <disk type='network' device='disk'>
          <driver name='qemu' type='raw'/>
          <source protocol='rbd' name='pool/image'>
            <host name='mon1.example.org' port='6321'/>
          </source>
          <target dev='vdc' bus='virtio'/>
        </disk>
  3. 使用 XML 文件为虚拟机分配存储卷。例如,要将 ~/vm-disk1.xml 中定义的磁盘分配给 testguest1 虚拟机:

    # attach-device --config testguest1 ~/vm-disk1.xml

验证

  • 在虚拟机的客户端操作系统中,确认磁盘镜像已作为未格式化的、未分配的磁盘可用。

11.2.3. 使用 CLI 删除虚拟机存储

以下提供了有关使用 CLI 删除存储池和存储卷的信息。

11.2.3.1. 使用 CLI 删除存储池

要从主机系统中删除存储池,您必须停止池并删除其 XML 定义。

流程

  1. 使用 virsh pool-list 命令列出定义的存储池。

    # virsh pool-list --all
    Name                 State      Autostart
    -------------------------------------------
    default              active     yes
    Downloads            active     yes
    RHEL8-Storage-Pool   active     yes
  2. 使用 virsh pool-destroy 命令停止您要删除的存储池。

    # virsh pool-destroy Downloads
    Pool Downloads destroyed
  3. :对于某些类型的存储池,您可以使用 virsh pool-delete 命令删除存储池所在的目录。请注意,要做到这一点,目录必须为空。

    # virsh pool-delete Downloads
    Pool Downloads deleted
  4. 使用 virsh pool-undefine 命令删除存储池的定义。

    # virsh pool-undefine Downloads
    Pool Downloads has been undefined

验证

  • 确认删除了存储池。

    # virsh pool-list --all
    Name                 State      Autostart
    -------------------------------------------
    default              active     yes
    RHEL8-Storage-Pool   active     yes

11.2.3.2. 使用 CLI 删除存储卷

要从主机系统中删除存储卷,您必须停止池并删除它的 XML 定义。

先决条件

  • 任何使用您要删除的存储卷的虚拟机都会被关闭。

流程

  1. 使用 virsh vol-list 命令列出存储池中定义的存储卷。该命令必须指定存储池的名称或路径。

    # virsh vol-list --pool RHEL8-Storage-Pool
     Name                 Path
    ---------------------------------------------------------------
     .bash_history        /home/VirtualMachines/.bash_history
     .bash_logout         /home/VirtualMachines/.bash_logout
     .bash_profile        /home/VirtualMachines/.bash_profile
     .bashrc              /home/VirtualMachines/.bashrc
     .git-prompt.sh       /home/VirtualMachines/.git-prompt.sh
     .gitconfig           /home/VirtualMachines/.gitconfig
     RHEL8_Volume.qcow2   /home/VirtualMachines/RHEL8_Volume.qcow2
  2. 使用 virsh vol-delete 命令删除存储卷。该命令必须指定存储卷的名称或路径以及提取存储卷的存储池。

    # virsh vol-delete --pool RHEL-Storage-Pool RHEL8_Volume.qcow2
    Pool RHEL8_Volume.qcow2 deleted

验证

  • 再次列出定义的存储卷,检查输出是否不再显示已删除卷。

    # virsh vol-list --pool RHEL8-Storage-Pool
     Name                 Path
    ---------------------------------------------------------------
     .bash_history        /home/VirtualMachines/.bash_history
     .bash_logout         /home/VirtualMachines/.bash_logout
     .bash_profile        /home/VirtualMachines/.bash_profile
     .bashrc              /home/VirtualMachines/.bashrc
     .git-prompt.sh       /home/VirtualMachines/.git-prompt.sh
     .gitconfig           /home/VirtualMachines/.gitconfig

11.3. 使用 web 控制台管理虚拟机的存储

通过 RHEL 8 web 控制台,您可以管理虚拟机(VM 的)存储的各个方面。您可以使用 Web 控制台:

11.3.1. 使用 Web 控制台查看存储池信息

以下流程描述了如何查看 web 控制台会话可访问的虚拟机(VM)存储池的详细存储池信息。

先决条件

流程

  1. Virtual Machines 接口顶部的 Storage Pools。此时会出现存储池窗口,显示配置的存储池列表。

    Web 控制台存储池窗口

    该信息包括:

    • 名称 - 存储池的名称。
    • 大小 - 存储池的大小。
    • connection - 用于访问存储池的连接。
    • State - 存储池的状态。
  2. 点击您要查看的存储行。

    行会展开,并包含以下有关所选存储池的信息的 Overview 窗格:

    • Path - 存储池的路径。
    • persistent - 存储池是否持久。
    • autostart - 是否自动启动存储池。
    • 类型 - 存储池的类型。
    Web 控制台存储池概述
  3. 要查看从存储池中创建的存储卷列表,请点存储卷

    此时会出现 Storage Volumes 窗格,显示配置的存储卷的大小以及使用的空间量。

    Web 控制台存储池存储卷

其它资源

11.3.2. 使用 Web 控制台创建存储池

虚拟机(VM)需要一个文件、目录或存储设备,可用于创建存储卷来存储虚拟机镜像或作为额外存储。您可以从本地或网络资源创建存储池,然后用来创建存储卷。

要使用 RHEL web 控制台创建存储池,请参阅以下步骤。

先决条件

流程

  1. 点击 Virtual Machines 选项卡顶部的 Storage Pools。此时会出现存储池窗口,显示配置的存储池列表。

    Web 控制台存储池窗口
  2. Create Storage Pool。此时会出现 Create Storage Pool 对话框。

    Cockpit 创建存储池
  3. 在 Create Storage Pool 对话框中输入以下信息:

    • 名称 - 存储池的名称。
    • 类型 - 存储池的类型。这可以是文件系统目录、网络文件系统、iSCSI 目标、物理磁盘驱动器或者 LVM 卷组。
    • 目标路径 - 主机文件系统中的存储池路径。
    • 启动」 - 主机引导时是否启动存储池。
  4. Create。创建存储池, Create Storage Pool 对话框会关闭,新的存储池会出现在存储池列表中。

其它资源

11.3.3. 使用 Web 控制台删除存储池

您可以删除存储池来释放主机或网络中的资源,以提高系统性能。删除存储池还可释放可供其他虚拟机(VM)使用的资源。

重要

除非明确指定,删除存储池不会同时删除该池中的存储卷。

要使用 RHEL web 控制台删除存储池,请参阅以下步骤。

注意

如果要临时取消激活存储池而不是删除它,请参阅使用 Web 控制台取消激活存储池

先决条件

流程

  1. 点击 Virtual Machines 选项卡顶部的 Storage Pools。此时会出现存储池窗口,显示配置的存储池列表。

    Web 控制台存储池窗口
  2. Storage Pools 窗口中,点击您要删除的存储池。

    该行展开,显示 Overview 窗格,其中包含有关所选存储池的基本信息,以及用于取消激活或删除存储池的控制。

    Web 控制台存储池概述
  3. 删除

    此时会出现确认对话框。

    Cockpit 存储池删除确认
  4. 可选: 要删除池中的存储卷,请在对话框中选择复选框。
  5. 删除

    存储池已删除。如果您在上一步中选择了复选框,相关的存储卷也会被删除。

其它资源

11.3.4. 使用 Web 控制台取消激活存储池

如果您不想永久删除存储池,您可以临时取消激活它。

当您取消激活存储池时,无法在那个池中创建新卷。但是,任何在那个池中卷的虚拟机(VM)都会继续运行。这对于许多原因很有用,例如:您可以限制可在池中创建的卷数量来提高系统性能。

要使用 RHEL web 控制台取消激活存储池,请参阅以下步骤。

先决条件

流程

  1. 点击 Virtual Machines 选项卡顶部的 Storage Pools。此时会出现存储池窗口,显示配置的存储池列表。

    Web 控制台存储池窗口
  2. Storage Pools 窗口中,点击您要取消激活的存储池。

    该行展开,显示 Overview 窗格,其中包含有关所选存储池的基本信息,以及用于取消激活和删除虚拟机的控制。

    Web 控制台存储池概述
  3. 取消激活

    Web 控制台存储池概述

    存储池将停用。

其它资源

11.3.5. 使用 Web 控制台创建存储卷

要创建可正常工作的虚拟机(VM),您需要为虚拟机分配一个本地存储设备,可存储虚拟机镜像和与虚拟机相关的数据。您可以在存储池中创建存储卷,并将其分配为作为存储磁盘的虚拟机。

要使用 Web 控制台创建存储卷,请参阅以下步骤。

先决条件

流程

  1. 点击 Virtual Machines 选项卡顶部的 Storage Pools。此时会出现存储池窗口,显示配置的存储池列表。

    Web 控制台存储池窗口
  2. Storage Pools 窗口中,点击您要创建存储卷的存储池。

    行会展开,以显示包含所选存储池基本信息的 Overview 窗格。

    Web 控制台存储池概述
  3. 点展开行中的 Overview 选项卡旁的 Storage Volumes

    Storage Volume 选项卡会出现有关现有存储卷的基本信息。

    Cockpit 存储卷概述
  4. 创建卷

    此时会出现 Create Storage Volume 对话框。

    Cockpit 创建存储卷
  5. 在 Create Storage Volume 对话框中输入以下信息:

    • 名称 - 存储卷的名称。
    • size - MiB 或 GiB 存储卷的大小。
    • 格式 - 存储卷的格式。支持的类型有 qcow2raw
  6. Create

    创建存储卷时, Create Storage Volume 对话框会关闭,新的存储卷会出现在存储卷列表中。

其它资源

11.3.6. 使用 Web 控制台删除存储卷

您可以删除存储卷来释放存储池中的空间,或删除与失效虚拟机(VM)关联的存储项目。

要使用 RHEL web 控制台删除存储卷,请查看以下步骤。

先决条件

流程

  1. 点击 Virtual Machines 选项卡顶部的 Storage Pools。此时会出现存储池窗口,显示配置的存储池列表。

    Web 控制台存储池窗口
  2. Storage Pools 窗口中,点您要从中删除存储卷的存储池。

    行会展开,以显示包含所选存储池基本信息的 Overview 窗格。

    Web 控制台存储池概述
  3. 点展开行中的 Overview 选项卡旁的 Storage Volumes

    Storage Volume 选项卡会出现有关现有存储卷的基本信息。

    Cockpit 存储卷概述
  4. 选择您要删除的存储卷。

    Cockpit 删除存储卷
  5. 点击 删除 1 卷

其它资源

11.3.7. 使用 web 控制台管理虚拟机磁盘

您可以使用 RHEL 8 web 控制台管理为 web 控制台连接的虚拟机配置的磁盘。

您可以:

11.3.7.1. 在 web 控制台中查看虚拟机磁盘信息

以下流程描述了如何查看 web 控制台会话连接到的虚拟机(VM)的磁盘信息。

先决条件

要使用 Web 控制台来管理虚拟机,请安装 Web 控制台虚拟机插件

流程

  1. 点击您要查看信息的虚拟机行。

    行会展开,以显示有关所选虚拟机以及用于关闭和删除虚拟机的基本信息 Overview 窗格。

  2. Disks

    Disks 窗格会出现有关分配给虚拟机的磁盘的信息。

Cockpit 磁盘信息

该信息包括:

  • 设备 - 该磁盘的设备类型。
  • 使用的 - 使用的磁盘大小。
  • Capacity - 磁盘的大小。
  • 总线 - 磁盘的总线类型。
  • access - 磁盘是可写入还是只读。
  • Source - 磁盘设备或者文件。

其它资源

11.3.7.2. 使用 web 控制台向虚拟机添加新磁盘

您可以通过创建新存储卷,并使用 RHEL 8 web 控制台将其附加到虚拟机,向虚拟机(VM)添加新磁盘。

先决条件

流程

  1. Virtual Machines 接口中,点击您要为其创建并附加新磁盘的虚拟机行。

    行会展开,以显示有关所选虚拟机以及用于关闭和删除虚拟机的基本信息 Overview 窗格。

  2. Disks

    Disks 窗格会出现有关为虚拟机配置磁盘的信息。

    cockpit disk info

  3. Add Disk

    此时会出现 Add Disk 对话框。

    cockpit add disk

  4. 选择 Create New 选项。
  5. 配置新磁盘。

    • Pool - 选择创建虚拟磁盘的存储池。
    • Name - 为要创建的虚拟磁盘输入一个名称。
    • Size - 输入大小并选择要创建的虚拟磁盘的单元(MiB 或 GiB)。
    • Format - 选择要创建的虚拟磁盘的格式。支持的类型有 qcow2raw
    • 持久性 - 如果选中,虚拟磁盘是持久性的。如果没有选择,虚拟磁盘就是临时的。

      注意

      临时磁盘只能添加到正在运行的虚拟机中。

    • 其它选项」 - 为虚拟磁盘设置附加配置。

      • Cache - 为虚拟磁盘选择缓存类型。
      • 总线 - 为虚拟磁盘选择总线类型。
  6. 添加

    虚拟磁盘已创建并连接到虚拟机。

其它资源

11.3.7.3. 使用 web 控制台将现有磁盘附加到虚拟机

以下流程描述了如何使用 RHEL 8 web 控制台将现有存储卷作为磁盘附加到虚拟机(VM)。

先决条件

流程

  1. Virtual Machines 接口中,点击您要将现有磁盘附加到的虚拟机行。

    行会展开,以显示有关所选虚拟机以及用于关闭和删除虚拟机的基本信息 Overview 窗格。

  2. Disks

    Disks 窗格会出现有关为虚拟机配置磁盘的信息。

    Cockpit 磁盘信息
  3. Add Disk

    此时会出现 Add Disk 对话框。

    cockpit 添加磁盘
  4. 使用现有按钮。

    正确的配置字段会出现在 Add Disk 对话框中。

    cockpit attach disk
  5. 为虚拟机配置磁盘。

    • - 选择要从中附加虚拟磁盘的存储池。
    • - 选择将被附加的存储卷。
    • 持久性 - 查看是否永久保留虚拟磁盘。清除以使虚拟磁盘为临时的。
    • 其它选项 - 为虚拟磁盘设置附加配置。

      • Cache - 为虚拟磁盘选择缓存类型。
      • 总线 - 为虚拟磁盘选择总线类型。
  6. 添加

    所选虚拟磁盘附加到虚拟机。

其它资源

11.3.7.4. 从虚拟机中分离磁盘

下面介绍如何使用 RHEL 8 web 控制台从虚拟机中分离磁盘。

先决条件

流程

  1. 虚拟机接口中,点您要从中分离现有磁盘的虚拟机行。

    行会展开,以显示有关所选虚拟机以及用于关闭和删除虚拟机的基本信息 Overview 窗格。

  2. Disks

    Disks 窗格会出现有关为虚拟机配置磁盘的信息。

    cockpit disk info

  3. 点您要从虚拟机中分离的磁盘旁的删除按钮。此时会出现 Remove Disk 确认对话框。
  4. 在确认对话框中,点 Remove

    虚拟磁盘与虚拟机分离。

其它资源


为了尽快向用户提供最新的信息,本文档可能会包括由机器自动从英文原文翻译的内容。如需更多信息,请参阅此说明。