存储
本部分内容介绍如何将物理存储硬件映射到虚拟机 (VM),以及管理 API 用来执行存储相关任务的软件对象。有关受支持的每种存储类型的详细信息部分中包括以下信息:
- 使用 CLI 通过类型特定的设备配置选项为 VM 创建存储的过程
- 生成用于备份的快照
- 管理存储的最佳做法
存储库 (SR)
存储库 (SR) 是一个特定存储目标,用于存储虚拟机 (VM) 虚拟磁盘映像 (VDI)。VDI 是一个表示虚拟硬盘驱动器 (HDD) 的存储抽象。
SR 非常灵活,对以下驱动器具有内置支持:
本地连接的驱动器:
- SATA
- SCSI
- SAS
- NVMe
本地物理存储硬件可以是硬盘驱动器 (HDD) 或固态驱动器 (SSD)。
远程连接的驱动器:
- iSCSI
- NFS
- SAS
- SMB(仅适用于版本 3)
- 光纤通道
注意:
不支持 NVMe over Fibre Channel 和 NVMe over TCP。
SR 和 VDI 抽象允许在支持高级存储功能的存储目标上提供这些功能。例如,诸如精简预配、VDI 快照和快速克隆等高级功能。对于直接不支持高级操作的存储子系统,将提供用于实现这些功能的软件堆栈。此软件堆栈基于 Microsoft 的虚拟硬盘 (VHD) 规范。
存储库是一个永久性的磁盘上数据结构。对于使用基础块设备的 SR 类型,创建 SR 的过程将包括清除指定存储目标上的所有现有数据。其他存储类型(例如 NFS)将在与现有 SR 平行的存储阵列上创建一个容器。
每个 Citrix Hypervisor 服务器可以同时使用多个 SR 和不同的 SR 类型。可以在主机之间共享这些 SR,也可以将其专用于特定主机。共享存储会加入一个已定义的资源池,并由该池内的多台主机共用。共享 SR 必须可由池中的每台主机通过网络访问。单个资源池中的所有服务器必须至少有一个共用的共享 SR。共享存储不能在多个池之间共享。
SR 命令提供用于创建、销毁、克隆、连接、查找它们包含的各个 VDI 及调整这些 VDI 大小的操作。用于管理存储库的 CLI 操作在 SR 命令中介绍。
警告:
Citrix Hypervisor 不支持在任何 SR 类型的 LUN 的外部 SAN 级别创建快照。
虚拟磁盘映像 (VDI)
虚拟磁盘映像 (VDI) 是一个表示虚拟硬盘驱动器 (HDD) 的存储抽象。VDI 是 Citrix Hypervisor 中的虚拟化存储的基础单元。VDI 是磁盘上的持久对象,独立于 Citrix Hypervisor 服务器而存在。用于管理 VDI 的 CLI 操作在 VDI 命令中介绍。数据在磁盘上的表现形式因 SR 类型而异。每个 SR 的独立存储插件接口(称为 SM API)负责管理该数据。
物理块设备 (PBD)
物理块设备表示物理服务器与连接的 SR 之间的接口。PBD 是连接器对象,允许将给定 SR 映射到主机。PBD 存储一些设备配置字段,用于与给定的存储目标进行连接和交互。例如,NFS 设备配置包括 NFS 服务器的 IP 地址和 Citrix Hypervisor 服务器装载的关联路径。PBD 对象管理给定 SR 与给定 Citrix Hypervisor 服务器之间的运行时连接。与 PBD 相关的 CLI 操作在 PBD 命令中进行介绍。
虚拟块设备 (VBD)
虚拟块设备是连接器对象(与上述的 PBD 类似),可用于在 VDI 和 VM 之间进行映射。除了提供用于将 VDI 连接到 VM 的机制外,VBD 还允许微调与给定 VDI 的磁盘 I/O 优先级和统计信息以及是否可以引导 VDI 有关的参数。与 VBD 有关的 CLI 操作在 VBD 命令中进行介绍。
存储对象摘要
下图概括说明了目前提供的存储对象之间的关系:
虚拟磁盘数据格式
一般来说,针对 VDI 的物理存储的映射包括以下几种类型:
-
LUN 上基于逻辑卷的 VHD: Citrix Hypervisor 基于块的默认存储将在磁盘上插入逻辑卷管理器。此磁盘是指本地连接的设备 (LVM) 或通过光纤通道、 iSCSI 或 SAS 连接了 SAN 的 LUN。VDI 表示为卷管理器中的卷并以 VHD 格式保存,以支持快照和克隆上引用节点的精简预配。
-
LUN 上基于文件的 QCOW2: VM 映像在通过 iSCSI 软件发起程序或硬件 HBA 连接的 LUN 上的 GFS2 共享磁盘文件系统中存储为精简预配的 QCOW2 格式文件。
-
文件系统中基于文件的 VHD: VM 映像在本地非共享文件系统(EXT3/EXT4 类型的 SR)、共享 NFS 目标(NFS 类型的 SR)或远程 SMB 目标(SMB 类型的 SR)中存储为精简预配的 VHD 格式文件。
VDI 类型
对于 GFS2 SR,将创建 QCOW2 VDI。
对于其他 SR 类型,将创建 VHD 格式的 VDI。在创建 VDI 时可以选择使用原始格式。此选项只能通过使用 xe CLI 来指定。
注意:
如果您在基于 LVM 的 SR 或 HBA/LUN-per-VDI SR 上创建原始 VDI,它可能允许拥有的 VM 访问属于任何 VM 的先前删除的 VDI(任何格式)的数据。我们建议您在使用此选项之前 考虑自己的安全要求。
NFS、EXT 或 SMB SR 上的原始 VDI 不允许访问属于任何 VM 的先前删除的 VDI 的数据。
要检查 VDI 是否通过 type=raw
创建,请检查其 sm-config
映射。sr-param-list
和 vdi-param-list
命令可分别用于实现此目的。
使用 xe CLI 创建原始虚拟磁盘
-
根据您希望放置虚拟磁盘的 SR 的 UUID,运行以下命令创建一个 VDI:
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(如上所述的原始 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 时,Citrix Hypervisor 会合理化链中的其他 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,生成的链将导致性能降级。Citrix Hypervisor 支持的最大链长度为 30。如果没有充分的理由,请不要接近此限制。如有疑问,请使用 XenCenter 或使用 vm-copy
命令“复制”VM,这会将链长度重置回 0。
合并时 VHD 特定的注意事项
只有一个合并过程始终对 SR 保持活动状态。此进程线程在 SR 主服务器主机上运行。
如果有重要的 VM 在池的主服务器上运行,则可以执行以下步骤来缓解 I/O 偶尔缓慢的情况:
-
将 VM 迁移到 SR 主节点以外的主机。
-
将磁盘 I/O 优先级设置为较高的级别,并调整调度程序。有关详细信息,请参阅虚拟磁盘 I/O 请求优先级。