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

存储库 (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 和通过 TCP 的 NVMe。
以下远程连接的存储类型可用于为您的 XenServer 池创建共享 SR。
ISO 库:
基于文件的存储:
基于块的存储:
共享存储类型比较
下表比较了共享 SR 支持的不同存储类型的特性。选择存储解决方案时,请考虑这些功能。
| 基于文件的 (SMB/NFS) | 基于块的 (iSCSI/HBA) LVM | 基于块的 (iSCSI/HBA) GFS2 | |
|---|---|---|---|
| 虚拟磁盘类型 | VHD | VHD | QCOW2 |
| 每个 SR 的最大虚拟磁盘数 | 20000 | 1000 | 20000 |
| 最大虚拟磁盘大小 | 2,040 GiB | 2,040 GiB | 16 TiB |
| 最大池大小(/zh-cn/xenserver/8/hosts-pools#recommended-pool-size) | 32/64 | 32/64 | 16 |
| 支持的功能 | |||
| 存储迁移(/zh-cn/xenserver/8/vms/migrate) | 是 | 是 | 否 |
| 智能缓存 | 是 | 是 | 否 |
| 读取缓存(/zh-cn/xenserver/8/storage/read-cache) | 是 | 否 | 是 |
| 精简配置(参见注释) | 是 | 否 | 是 |
| 灾难恢复 | 否 | 是 | 否 |
注意:
对于基于块的 LVM 存储,您可以在底层 SAN 中实施精简配置。但是,不建议将其与 GFS2 SR 结合使用。
虚拟磁盘数据格式
通常,物理存储到 VDI 的映射有以下几种类型:
-
基于逻辑卷的LUN上的VHD: 默认的XenServer块存储在磁盘上插入一个逻辑卷管理器。此磁盘可以是本地连接设备(LVM),也可以是通过光纤通道、iSCSI或SAS连接的SAN LUN。VDI在卷管理器中表示为卷,并以VHD格式存储,以允许在快照和克隆时对引用节点进行精简配置。
-
基于文件的LUN上的QCOW2: VM映像以精简配置的QCOW2格式文件存储在LUN上的GFS2共享磁盘文件系统上,该LUN通过iSCSI软件启动器或硬件HBA连接。
-
基于文件的文件系统上的VHD: VM映像以精简配置的VHD格式文件存储在本地非共享文件系统(EXT3/EXT4类型SR)、共享NFS目标(NFS类型SR)或远程SMB目标(SMB类型SR)上。
-
基于文件的文件系统上的QCOW2: VM映像以精简配置的QCOW2格式文件存储在本地非共享的XFS文件系统上。
VDI 类型
对于 GFS2 和 XFS SR,将创建 QCOW2 VDI。
对于其他 SR 类型,将创建 VHD 格式的 VDI。您可以在创建 VDI 时选择使用原始格式。此选项只能通过使用 xe CLI 指定。
注意:
如果您在基于 LVM 的 SR 或每个 VDI 一个 HBA/LUN 的 SR 上创建原始 VDI,它可能会允许拥有该 VDI 的 VM 访问属于任何 VM 的先前删除的 VDI(任何格式)中的数据。我们建议您在使用此选项之前考虑您的安全要求。
NFS、EXT 或 SMB SR 上的原始 VDI 不允许访问属于任何 VM 的先前删除的 VDI 的数据。
要检查 VDI 是否使用 type=raw 创建,请检查其 sm-config 映射。sr-param-list 和 vdi-param-list xe 命令可分别用于此目的。
使用 xe CLI 创建原始虚拟磁盘
-
运行以下命令以创建 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--> -
将新的虚拟磁盘附加到 VM。使用 VM 中的磁盘工具进行分区和格式化,或以其他方式使用新磁盘。您可以使用
vbd-create命令创建 VBD,将虚拟磁盘映射到您的 VM 中。
在 VDI 格式之间转换
无法在原始格式和 VHD 格式之间进行直接转换。相反,您可以创建一个 VDI(可以是原始格式,如上所述,也可以是 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 请求优先级。