XenServer

存储

本文介绍了物理存储硬件如何映射到虚拟机 (VM),以及 XenServer® 用于执行存储相关任务的软件对象。它还提供了有关可用存储类型的信息,以便您为环境选择合适的存储硬件。

存储概念

下图显示了本节中描述的存储对象之间的关系:

存储库和相关对象的图形概述 ](/en-us/xenserver/9/media/sr-diagram.png)

存储库 (SR)

存储库 (SR) 是一种特定的存储目标,其中存储了虚拟机 (VM) 虚拟磁盘映像 (VDI)。VDI 是一种存储抽象,表示虚拟硬盘驱动器 (HDD)。要了解 XenServer 支持的 SR 类型,请参阅 存储库类型

SR 和 VDI 抽象允许在支持它们的存储目标上公开高级存储功能。例如,精简配置、VDI 快照和快速克隆等高级功能。对于不直接支持高级操作的存储子系统,则提供了一个实现这些功能的软件堆栈。

存储库是一种持久的磁盘数据结构。对于使用底层块设备的 SR 类型,创建 SR 的过程涉及擦除指定存储目标上的任何现有数据。其他存储类型(例如 NFS)会在存储阵列上并行创建与现有 SR 对应的容器。

每个 XenServer 主机可以同时使用多个 SR 和不同类型的 SR。这些 SR 可以在主机之间共享,也可以专用于特定主机。共享存储在定义的资源池中的多个主机之间进行池化。共享 SR 必须可由池中的每个主机通过网络访问。共享存储不能在多个池之间共享。

SR 命令提供用于创建、销毁、调整大小、克隆、连接和发现其所包含的各个 VDI 的操作。管理存储库的 CLI 操作在 SR 命令 中进行了描述。

虚拟磁盘映像 (VDI)

虚拟磁盘映像 (VDI) 是一种存储抽象,表示虚拟硬盘驱动器 (HDD)。VDI 是 XenServer 中虚拟化存储的基本单元。VDI 是持久的磁盘对象,独立于 XenServer 主机存在。有关 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 的磁盘 I/O 优先级和统计信息以及该 VDI 是否可以启动的参数进行微调。有关 VBD 的 CLI 操作在 VBD 命令 中进行了描述。

存储库类型

XenServer 支持多种存储类型,适用于本地和远程连接的 SR。

警告:

XenServer 不支持任何 SR 类型的 LUN 的外部 SAN 级别快照。

本地 SR

本地存储库 (SR) 连接到单个主机,并且不在池中的所有主机之间共享。本地物理存储硬件可以是硬盘驱动器 (HDD) 或固态驱动器 (SSD)。它可以使用以下任何方法连接到主机:SATA、SCSI、SAS、NVMe。

XenServer 主机支持以下类型的本地存储:

远程 SR

XenServer 支持使用以下驱动器进行远程连接存储:iSCSI、NFS、SAS、SMB(仅限版本 3)、光纤通道。

注意:

NVMe over Fibre Channel 和 NVMe over TCP 不受支持。

以下远程连接的存储类型可用于为您的 XenServer 池创建共享 SR。

ISO 库:

基于文件的存储:

基于块的存储:

共享存储类型比较

下表比较了支持共享 SR 的不同存储类型的特性。选择存储解决方案时,请考虑这些功能。

  基于文件的 (SMB/NFS) 基于块的 (iSCSI/HBA) LVM 基于块的 (iSCSI/HBA) GFS2
虚拟磁盘类型(#vdi-types) VHD VHD QCOW2
每个 SR 的最大虚拟磁盘数(/zh-cn/xenserver/9/system-requirements/configuration-limits) 20000 1000 20000
最大虚拟磁盘大小(/zh-cn/xenserver/9/system-requirements/configuration-limits) 2,040 GiB 2,040 GiB 16 TiB
最大池大小(/zh-cn/xenserver/9/hosts-pools#recommended-pool-size) 32/64 32 16
支持的功能
存储迁移(/zh-cn/xenserver/9/vms/migrate)
智能缓存
读取缓存(/zh-cn/xenserver/9/storage/read-cache)
精简配置(参见注释)
灾难恢复

注意:

对于基于块的 LVM 存储,您可以在底层 SAN 中实施精简配置。但是,不建议将其与 GFS2 SR 结合使用。

虚拟磁盘数据格式

通常,物理存储到 VDI 的映射类型如下:

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

  2. 基于文件的 QCOW2 在 LUN 上: VM 镜像以精简配置的 QCOW2 格式文件存储在 GFS2 共享磁盘文件系统上,该文件系统位于通过 iSCSI 软件启动器或硬件 HBA 连接的 LUN 上。

  3. 基于文件的 VHD 在文件系统上: VM 镜像以精简配置的 VHD 格式文件存储在本地非共享文件系统(EXT3/EXT4 类型 SR)、共享 NFS 目标(NFS 类型 SR)或远程 SMB 目标(SMB 类型 SR)上。

  4. 基于文件的 QCOW2 在文件系统上: VM 镜像以精简配置的 QCOW2 格式文件存储在本地非共享的 XFS 文件系统上。

VDI 类型

对于 GFS2 和 XFS SR,将创建 QCOW2 VDI。

对于其他 SR 类型,将创建 VHD 格式的 VDI。您可以在创建 VDI 时选择使用 raw 格式。此选项只能通过使用 xe CLI 指定。

注意:

如果您在基于 LVM 的 SR 或每个 VDI 一个 HBA/LUN 的 SR 上创建 raw VDI,它可能会允许拥有该 VDI 的 VM 访问属于任何 VM 的先前删除的 VDI(任何格式)中的数据。我们建议您在使用此选项之前考虑您的安全要求。

NFS、EXT 或 SMB SR 上的 Raw VDI 不允许访问属于任何 VM 的先前删除的 VDI 的数据。

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

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

  1. 运行以下命令以创建 VDI,其中包含您要放置虚拟磁盘的 SR 的 UUID:

    xe vdi-create sr-uuid=sr-uuid type=user virtual-size=virtual-size \
            name-label=VDI name sm-config:type=raw
    <!--NeedCopy-->
    
  2. 将新的虚拟磁盘附加到 VM。使用 VM 内的磁盘工具进行分区和格式化,或以其他方式使用新磁盘。您可以使用 vbd-create 命令创建 VBD,将虚拟磁盘映射到您的 VM 中。

在 VDI 格式之间转换

无法在 raw 和 VHD 格式之间进行直接转换。相反,您可以创建一个 VDI(如上所述,可以是 raw 或 VHD),然后将现有卷中的数据复制到其中。使用 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 支持的最大链长度为 30。除非有充分理由,否则不要接近此限制。如有疑问,请使用 XenCenter “复制”VM 或使用 vm-copy 命令,该命令会将链长度重置为 0。

关于合并的注意事项

SR 始终只有一个合并过程处于活动状态。此过程线程在 SR 池协调器上运行。当合并过程处于活动状态时,SR 中可能需要额外的空间来容纳从增量树的一个级别合并到另一个级别的数据。此过程完成后,冗余级别将被删除并释放空间。

如果您的关键 VM 在池协调器上运行,您可以采取以下步骤来缓解偶尔出现的慢速 I/O 问题:

  • 将 VM 迁移到 SR 池协调器以外的主机

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

存储