配置存储

本部分内容介绍如何将物理存储硬件映射到虚拟机 (VM),以及管理 API 用来执行存储相关任务的软件对象。有关受支持的每种存储类型的详细信息部分中包括以下信息:

  • 使用 CLI 通过类型特定的设备配置选项为 VM 创建存储的过程
  • 生成用于备份的快照
  • 管理存储的最佳做法
  • 虚拟磁盘 QoS(服务质量)设置

存储库 (SR)

存储库 (SR) 是一个特定存储目标,用于存储虚拟机 (VM) 虚拟磁盘映像 (VDI)。VDI 是一个表示虚拟硬盘驱动器 (HDD) 的存储抽象。

SR 非常灵活,对以下驱动器具有内置支持:

本地连接的驱动器

  • IDE
  • SATA
  • SCSI
  • SAS

远程连接的驱动器

  • iSCSI
  • NFS
  • SAS
  • 光纤通道

SR 和 VDI 抽象允许在支持高级存储功能的存储目标上提供这些功能。例如,诸如精简预配、VDI 快照和快速克隆等高级功能。对于直接不支持高级操作的存储子系统,将提供用于实现这些功能的软件堆栈。此软件堆栈基于 Microsoft 的虚拟硬盘 (VHD) 规范。

SR 命令提供用于创建、销毁、克隆、连接、查找它们包含的各个 VDI 及调整这些 VDI 大小的操作。

存储库是一个永久性的磁盘上数据结构。对于使用基础块设备的 SR 类型,创建 SR 的过程将包括清除指定存储目标上的所有现有数据。其他存储类型(例如 NFS)将在与现有 SR 平行的存储阵列上创建一个容器。

每台 XenServer 主机可以同时使用多个 SR 和不同的 SR 类型。可以在主机之间共享这些 SR,也可以将其专用于特定主机。共享存储会加入一个已定义的资源池,并由该池内的多台主机共用。共享 SR 必须可由每台主机通过网络访问。单个资源池中的所有服务器必须至少有一个共用的共享 SR。

用于管理存储库的 CLI 操作在 SR 命令中进行介绍。

虚拟磁盘映像 (VDI)

虚拟磁盘映像 (VDI) 是一个表示虚拟硬盘驱动器 (HDD) 的存储抽象。VDI 是 XenServer 中的虚拟化存储的基础单元。VDI 是磁盘上持久对象,独立于 XenServer 主机而存在。用于管理 VDI 的 CLI 操作在 VDI 命令中进行说明。数据在磁盘上的表现形式因 SR 类型而异。每个 SR 的独立存储插件接口(称为 SM API)负责管理该数据。

物理块设备 (PBD)

物理块设备表示物理服务器与连接的 SR 之间的接口。PBD 是连接器对象,允许将给定 SR 映射到主机。PBD 存储一些设备配置字段,用于与给定的存储目标进行连接和交互。例如,NFS 设备配置包括 NFS 服务器的 IP 地址和 XenServer 主机装载的关联路径。PBD 对象管理给定 SR 与给定 XenServer 主机之间的运行时连接。与 PBD 相关的 CLI 操作在 PBD 命令中进行介绍。

虚拟块设备 (VBD)

虚拟块设备是连接器对象(与上述的 PBD 类似),可用于在 VDI 和 VM 之间进行映射。除了提供用于将 VDI 连接到 VM 的机制外,VBD 还允许微调与给定 VDI 的 QoS(服务质量)和统计信息以及是否可以引导 VDI 有关的参数。与 VBD 有关的 CLI 操作在 VBD 命令中进行介绍。

存储对象摘要

下图概括说明了目前提供的存储对象之间的关系:

存储库和相关对象的图形概述

虚拟磁盘数据格式

一般来说,针对 VDI 的物理存储的映射包括以下几种类型:

  1. LUN 上基于逻辑卷的 VHD: 默认的基于 XenServer 块的存储将在磁盘上插入逻辑卷管理器。此磁盘是指本地连接的设备 (LVM) 或通过光纤通道、 iSCSI 或 SAS 连接了 SAN 的 LUN。VDI 表示为卷管理器中的卷并以 VHD 格式保存,以支持快照和克隆上引用节点的精简预配。

  2. LUN 上基于文件的 QCOW2: VM 映像在通过 iSCSI 软件发起程序或硬件 HBA 连接的 LUN 上的 GFS2 共享磁盘文件系统中存储为精简预配的 QCOW2 格式文件。

  3. 文件系统中基于文件的 VHD: VM 映像在本地非共享文件系统(EXT 类型的 SR)或共享 NFS 目标(NFS 类型的 SR)中存储为精简预配的 VHD 格式文件。

VDI 类型

对于大多数 SR 类型,将创建 VHD 格式的 VDI。在创建 VDI 时可以选择使用原始格式。此选项只能通过使用 xe CLI 来指定。对于 GFS2 SR,将创建 QCOW2 VDI。

要检查 VDI 是否通过 type=raw 创建,请检查其 sm-config 映射。sr-param-listvdi-param-list 命令可分别用于实现此目的。

使用 xe CLI 创建原始虚拟磁盘

  1. 根据您希望放置虚拟磁盘的 SR 的 UUID,运行以下命令创建一个 VDI:

    xe vdi-create sr-uuid=sr-uuid type=user virtual-size=virtual-size \
        name-label=VDI name sm-config:type=raw
    
  2. 将新虚拟磁盘连接到 VM。请使用 VM 中的磁盘工具进行分区和格式化,否则,请使用新磁盘。可以使用 vbd-create 命令创建 VBD,以将该虚拟磁盘映射到 VM。

在 VDI 格式之间转换

原始和 VHD 格式之间不能实现直接转换。相反,可以创建 VDI(如上所述的原始 VDI,或者 VHD),然后将数据从现有卷复制到该 VDI。使用 xe CLI 可确保新 VDI 的虚拟大小至少与从中复制的 VDI 大小相同。可以通过检查其 virtual-size 字段来执行此操作,例如使用 vdi-param-list 命令。然后可以将这一新 VDI 连接到 VM,并使用 VM 中的首选工具来直接执行数据的块复制。例如,Windows 中的标准磁盘管理工具或 Linux 中的 dd 命令。如果新卷为 VHD 卷,请使用可避免向磁盘中写入空扇区的工具。此操作可确保在基础存储库中以最佳方式使用空间。基于文件的复制方法可能更为合适。

基于 VHD 和基于 QCOW2 的 VDI

可以链接 VHD 和 QCOW2 映像,从而允许两个 VDI 共享通用数据。如果克隆基于 VHD 或 QCOW2 支持的 VM,生成的 VM 将共享克隆时的通用磁盘数据。每个 VM 将在 VDI 的单独写入时复制版本中继续进行各自的更改。此功能允许从模板快速克隆此类 VM,便于极快地预配和部署新 VM。

由于不断克隆 VM 及其关联的 VDI,因此这将创建链接的 VDI 的树形结构。删除链中的一个 VDI 时,XenServer 会合理化链中的其他 VDI 以删除不必要的 VDI。此合并过程异步运行。回收的磁盘空间量和执行此过程所花费的时间取决于 VDI 的大小和共享数据量。

VHD 和 QCOW2 格式都支持精简预配。当 VM 将数据写入到磁盘时,映像文件将自动在细粒度块中扩展。对于基于文件的 VHD 和基于 GFS2 的 QCOW2,VM 映像文件仅在物理存储中占用所需的空间,此方法将带来极大的好处。使用基于 LVM 的 VHD 时,基础逻辑卷容器必须与 VDI 的虚拟大小相同。但是,出现快照或克隆时,将回收基础写入时复制实例磁盘上的未使用的空间。两种行为之间的差异描述如下:

  • 对于基于 LVM 的 VHD 映像,链中的差异磁盘节点仅占用已写入到磁盘的数据量。但是,叶节点(VDI 克隆)则完全扩大到磁盘的虚拟大小。快照叶节点(VDI 快照)在未使用时保持压缩状态,并且可以附加只读存储以保持压缩分配。附加读写存储的快照节点将在附加后完全扩大,在分离后压缩。

  • 对于基于文件的 VHD基于 GFS2 的 QCOW2 映像,所有节点都仅占用已写入的数据量。叶节点文件在其主动被写入的过程中将扩大以容纳数据。如果为 VM 分配 100 GB 的 VDI 并且安装了操作系统,VDI 文件的物理大小仅是磁盘上的操作系统数据的大小加上一些次要元数据开销。

基于单个 VHD 或 QCOW2 模板克隆 VM 时,每个子 VM 会形成一个链,其中新更改将写入新 VM。旧块将直接从父模板中读取。如果将新 VM 转化为深层模板并克隆更多 VM,生成的链会导致性能降级。XenServer 支持的最大链长度为 MAXIMUM_SUPPORTED_VHD_CHAIN_LENGTH。如果没有充分的理由,请不要接近此限制。如有疑问,请使用 XenCenter 或使用 vm-copy 命令“复制”VM,这会将链长度重置回 0。

合并时 VHD 特定的注意事项

只有一个合并过程始终对 SR 保持活动状态。此进程线程在 SR 主服务器主机上运行。

如果有重要的 VM 在池的主服务器上运行,则可以执行以下步骤来缓解 I/O 偶尔缓慢的情况:

  • 将 VM 迁移到 SR 主节点以外的主机。

  • 将磁盘 I/O 优先级设置为较高的级别,并调整调度程序。有关详细信息,请参阅虚拟磁盘 QoS 设置