Menu Close
Settings Close

Language and Page Formatting Options

第 14 章 为虚拟机管理存储

虚拟机(VM)与物理计算机一样,需要存储数据、程序和系统文件。作为虚拟机管理员,您可以为虚拟机分配物理或基于网络的存储,作为虚拟存储。您还可以修改虚拟机显示存储的方式,无论底层硬件是什么。

以下小节提供了有关不同类型的虚拟机存储、它们的工作原理,以及如何使用 CLI 或 Web 控制台管理它们。

14.1. 了解虚拟机存储

如果您对于虚拟机(VM)存储的新存储,或者不确定其工作方式,以下小节提供了有关虚拟机存储的各种组件的一般概述、工作方式、管理基础知识以及红帽提供的受支持解决方案。

您可以找到与以下相关的信息:

14.1.1. 存储池简介

存储池是由 libvirt 管理的文件、目录或存储设备,用于为虚拟机(VM)提供存储。您可以将存储池分为多个存储卷,用于存储虚拟机镜像或作为额外存储附加到虚拟机。

此外,多个虚拟机可以共享同一个存储池,从而更好地分配存储资源。

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

    • 主机系统重启后,持久性存储池会保留下来。您可以使用 virsh pool-define 创建持久性存储池。
    • 临时存储池仅在主机重启前存在。您可以使用 virsh pool-create 命令创建临时存储池。

存储池存储类型

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

  • 本地存储池

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

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

  • 联网的(共享)存储池

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

14.1.2. 存储卷简介

存储池被分为多个存储卷。存储卷是物理分区、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

14.1.3. 使用 libvirt 进行存储管理

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

您可以使用 libvirt API 查询存储池中的卷列表,或者获取有关该存储池中容量、分配和可用存储的信息。对于支持它的存储池,您还可以使用 libvirt API 创建、克隆、调整大小和删除存储卷。另外,您可以使用 libvirt API 将数据上传到存储卷,从存储卷下载数据,或者从存储卷中擦除数据。

14.1.4. 存储管理概述

为了说明可用于管理存储的可用选项,以下示例讨论使用 mount -t nfs nfs.example.com:/path/to/share /path/to/data 的 NFS 服务器示例。

作为存储管理员:

  • 您可以在虚拟化主机上定义 NFS 存储池来描述导出的服务器路径和客户端目标路径。因此,libvirt 可在 libvirt 启动时或者根据需要在 libvirt 运行时自动挂载存储。
  • 您只需按名称将存储池和存储卷添加到虚拟机中。您不需要添加目标路径到卷。因此,即使目标客户端路径改变,它不会影响虚拟机。
  • 您可以将存储池配置为 autostart。当您这样做时, libvirt 会在启动 libvirt 时自动挂载 NFS 共享磁盘。libvirt 在指定目录中挂载共享,类似于 挂载 nfs.example.com:/path/to/share /vmdata
  • 您可以使用 libvirt API 查询存储卷路径。这些存储卷基本上是 NFS 共享磁盘中存在的文件。然后,您可以将这些路径复制到虚拟机 XML 定义的部分,该部分描述了虚拟机块设备的源存储。
  • 如果是 NFS,您可以使用使用 libvirt API 的应用程序创建和删除存储池中的存储卷(NFS 共享中的文件)到池大小的限制(共享存储容量)。

    请注意,并非所有存储池类型都支持创建和删除卷。

  • 当不再需要时,您可以停止存储池。停止存储池(pool-destroy)会撤消启动操作,在这种情况下,卸载 NFS 共享。销毁操作不会修改共享中的数据,即使该命令的名称看似象要删除。如需更多信息,请参阅 man virsh

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

支持的存储池类型

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

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

不支持的存储池类型

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

  • 基于 Sheepdog 的存储池
  • 基于 Vstorage 的存储池
  • 基于 ZFS 的存储池
  • iscsi-direct 存储池
  • glusterfs 存储池