管理存储库

Last published : Oct 07, 2026
本节介绍持续管理存储库 (SR) 所需的各种操作,包括实时 VDI 迁移。

移除 SR

存储库 (SR) 可以暂时或永久移除。
分离: 断开存储设备与池或主机之间的关联(PBD 拔出)。SR(及其 VDI)将变得不可访问。VDI 的内容以及虚拟机用于访问 VDI 的元信息将保留。当您暂时使 SR 脱机时(例如,进行维护),可以使用分离。分离的 SR 以后可以重新连接。
忘记: 保留物理磁盘上 SR 的内容,但永久删除将虚拟机连接到其 VDI 的信息。例如,允许您将 SR 重新连接到另一个 XenServer® 主机,而无需移除任何 SR 内容。
销毁: 从物理磁盘中删除 SR 的内容。
注意:
使用 SMB 存储时,请勿在分离 SMB SR 之前从存储中移除共享。
对于销毁或忘记操作,连接到 SR 的 PBD 必须从主机拔出。
  1. 拔出 PBD 以便从相应的 XenServer 主机分离 SR:
    xe pbd-unplug uuid=pbd_uuid
  2. 使用 sr-destroy 命令移除 SR。该命令会销毁 SR,从 XenServer 主机数据库中删除 SR 和相应的 PBD,并从物理磁盘中删除 SR 内容:
    xe sr-destroy uuid=sr_uuid
  3. 使用 sr-forget 命令忘记 SR。该命令会从 XenServer 主机数据库中移除 SR 和相应的 PBD,但会使实际的 SR 内容在物理介质上保持不变:
    xe sr-forget uuid=sr_uuid
注意:
可能需要一些时间才能对与 SR 对应的软件对象进行垃圾回收。

引入 SR

要重新引入之前遗忘的 SR,请创建一个 PBD。手动将 PBD 插入到相应的 XenServer 主机以激活 SR。
以下示例引入了类型为 lvmoiscsi 的 SR。
  1. 探测现有 SR 以确定其 UUID:
    xe sr-probe type=lvmoiscsi device-config:target=192.168.1.10 \
        device-config:targetIQN=192.168.1.10:filer1 \
        device-config:SCSIid=149455400000000000000000002000000b70200000f000000
  2. 引入从 sr-probe 命令返回的现有 SR UUID。返回新 SR 的 UUID:
    xe sr-introduce content-type=user name-label="Example Shared LVM over iSCSI SR" \
        shared=true uuid=valid_sr_uuid type=lvmoiscsi
  3. 创建一个 PBD 以配合 SR。返回新 PBD 的 UUID:
    xe pbd-create type=lvmoiscsi host-uuid=valid_uuid sr-uuid=valid_sr_uuid \
        device-config:target=192.168.0.1 \
        device-config:targetIQN=192.168.1.10:filer1 \
        device-config:SCSIid=149455400000000000000000002000000b70200000f000000
  4. 插入 PBD 以附加 SR:
    xe pbd-plug uuid=pbd_uuid
  5. 验证 PBD 插入状态。如果成功,currently-attached 属性为 true:
    xe pbd-list sr-uuid=sr_uuid
注意:
对资源池中的每个主机执行步骤 3 到 5。这些步骤也可以通过 XenCenter 中的“修复存储库”功能执行。

实时 LUN 扩展

为满足容量要求,您可能需要向存储阵列添加容量,以增加分配给 XenServer 主机的 LUN 大小。实时 LUN 扩展允许您在无需任何虚拟机停机时间的情况下增加 LUN 的大小。
在向存储阵列添加更多容量后,输入,
xe sr-scan sr-uuid=sr_uuid
此命令会重新扫描 SR,并且任何额外容量都会被添加并可用。
此操作在 XenCenter 中也可用。选择要调整大小的 SR,然后单击重新扫描。
警告:
  • 无法缩小或截断 LUN。减小存储阵列上的 LUN 大小可能导致数据丢失。
  • 调整 GFS2 SR 大小可能需要很长时间。在调整大小期间,您可能无法向池中添加更多主机或执行其他 SR 操作。

实时 VDI 迁移

实时 VDI 迁移允许管理员在不关闭虚拟机的情况下重新定位虚拟机的虚拟磁盘映像 (VDI)。此功能支持以下管理操作:
  • 将虚拟机从廉价的本地存储移动到快速、弹性、阵列支持的存储。
  • 将虚拟机从开发环境移动到生产环境。
  • 当虚拟机受存储容量限制时,在存储层之间移动。
  • 执行存储阵列升级。

限制和注意事项

实时 VDI 迁移受以下限制和注意事项的约束
  • 目标存储库上必须有足够的可用磁盘空间。

使用 XenCenter 移动虚拟磁盘

  1. 在资源窗格中,选择存储虚拟磁盘的 SR,然后单击存储选项卡。
  2. 在虚拟磁盘列表中,选择要移动的虚拟磁盘,然后单击移动。
  3. 在“移动虚拟磁盘”对话框中,选择您希望将 VDI 移动到的目标 SR。
    注意:
    确保 SR 有足够的空间容纳另一个虚拟磁盘:可用空间显示在可用 SR 列表中。
  4. 单击“移动”以移动虚拟磁盘。
有关 xe CLI 参考,请参阅 vdi-pool-migrate。

SR 之间的冷 VDI 迁移(脱机迁移)

与 VM 关联的 VDI 可以从一个 SR 复制到另一个 SR,以适应维护要求或分层存储配置。XenCenter 允许您将 VM 及其所有 VDI 复制到相同或不同的 SR。XenCenter 和 xe CLI 的组合可用于复制单个 VDI。
有关 xe CLI 参考,请参阅 vm-migrate。

将 VM 的所有 VDI 复制到不同的 SR

XenCenter 的“复制 VM”功能会在相同或不同的 SR 上为选定的 VM 创建所有 VDI 的副本。默认情况下,源 VM 和 VDI 不受影响。要将 VM 移动到选定的 SR 而不是创建副本,请在“复制虚拟机”对话框中选择“删除原始 VM”选项。
  1. 关闭 VM。
  2. 在 XenCenter 中,选择 VM,然后选择“VM > 复制 VM”选项。
  3. 选择所需的目标 SR。

将单个 VDI 复制到不同的 SR

xe CLI 和 XenCenter 的组合可用于在 SR 之间复制单个 VDI。
  1. 关闭虚拟机。
  2. 使用 xe CLI 识别要移动的 VDI 的 UUID。如果虚拟机有 DVD 驱动器,其 vdi-uuid 会列为 not in database,可以忽略。
    xe vbd-list vm-uuid=valid_vm_uuid
    注意:
    vbd-list 命令同时显示 VBD 和 VDI UUID。请务必记录 VDI UUID,而不是 VBD UUID。
  3. 在 XenCenter 中,选择VM Storage(虚拟机存储)选项卡。对于要移动的每个 VDI,选择该 VDI 并单击Detach(分离)按钮。此步骤也可以使用 vbd-destroy 命令完成。
    注意:
    如果使用 vbd-destroy 命令分离 VDI UUID,请首先检查 VBD 的参数 other-config:owner 是否设置为 true。将此参数设置为 false。使用 vbd-destroy 命令并带上 other-config:owner=true 也会销毁关联的 VDI。
  4. 使用 vdi-copy 命令将要移动的每个虚拟机 VDI 复制到所需的 SR。
    xe vdi-copy uuid=valid_vdi_uuid sr-uuid=valid_sr_uuid
  5. 在 XenCenter 中,选择VM Storage(虚拟机存储)选项卡。单击Attach(连接)按钮并从新 SR 中选择 VDI。此步骤也可以使用 vbd-create 命令完成。
  6. 要删除原始 VDI,请在 XenCenter 中选择原始 SR 的Storage(存储)选项卡。原始 VDI 的 VM 字段值为空。使用Delete(删除)按钮删除 VDI。

将本地光纤通道 SR 转换为共享 SR

使用 xe CLI 和 XenCenter 的Repair Storage Repository(修复存储库)功能将本地 FC SR 转换为共享 FC SR:
  1. 将资源池中的所有主机升级到 XenServer 8.4。
  2. 确保池中的所有主机都已正确分区 SR 的 LUN。有关使用 sr-probe 命令验证 LUN 是否存在于每个主机上的详细信息,请参阅 探测 SR。
  3. 将 SR 转换为共享:
    xe sr-param-set shared=true uuid=local_fc_sr
  4. SR 从主机级别移动到 XenCenter 中的池级别,表明它现在是共享的。SR 标有红色感叹号,表示它当前未在池中的所有主机上插入。
  5. 选择 SR,然后选择 存储 > 修复存储库 选项。
  6. 单击修复,为池中的每个主机创建并插入一个 PBD。

使用丢弃功能回收后端阵列上基于块的存储空间

您可以使用空间回收功能释放精简配置 LUN 上未使用的块。释放空间后,存储阵列可以重新使用此回收的空间。
注意:
空间回收仅适用于某些类型的存储阵列。要确定您的阵列是否支持此功能以及是否需要特定配置,请参阅 硬件兼容性列表 和您的存储供应商特定文档。
要使用 XenCenter 回收空间:
  1. 选择基础结构视图,然后选择连接到 SR 的主机或池。
  2. 单击存储选项卡。
  3. 从列表中选择 SR,然后单击回收已释放空间。
  4. 单击是确认操作。
  5. 单击通知,然后单击事件以查看操作状态。
有关详细信息,请在 XenCenter 中按 F1 访问在线帮助。
要使用 xe CLI 回收空间,可以使用以下命令:
xe host-call-plugin host-uuid=host_uuid \
    plugin=trim fn=do_trim args:sr_uuid=sr_uuid
注意:
  • 此操作仅适用于基于阵列上精简配置 LUN 的 LVM SR。本地 SSD 也可以从空间回收中受益。
  • 对于 NFS 和 EXT3/EXT4 等基于文件的 SR,不需要进行空间回收。对于这些 SR 类型,XenCenter 中不提供“回收已释放空间”按钮。
  • 如果您对基于文件的 SR 或厚置备的 LVM SR 运行空间回收 xe 命令,该命令将返回错误。
  • 空间回收是一项密集型操作,可能导致存储阵列性能下降。因此,仅当阵列需要空间回收时才启动此操作。我们建议您在阵列需求高峰期之外安排此工作。

删除快照时自动回收空间

使用 XenServer 删除快照时,LVM SR 上分配的空间会自动回收,并且不需要重新启动 VM。此操作称为“在线合并”。在线合并适用于所有类型的 SR。
在某些情况下,自动空间回收可能无法进行。在这些情况下,我们建议您使用离线合并工具:
  • 在 VM I/O 吞吐量很大的情况下
  • 在一段时间后空间未被回收的情况下
注意:
  • 运行离线合并工具会导致 VM 停机,因为会执行挂起/恢复操作。
  • 在运行该工具之前,请删除所有不再需要的快照和克隆。该工具会根据剩余的快照/克隆尽可能多地回收空间。如果要回收所有空间,请删除所有快照和克隆。
  • VM 磁盘必须位于单个主机的共享存储或本地存储上。磁盘位于两种类型存储中的 VM 无法合并。

使用离线合并工具回收空间

使用 XenCenter 启用隐藏对象。单击 视图 > 隐藏 对象。在资源窗格中,选择要获取 UUID 的虚拟机。UUID 显示在 常规 选项卡中。
在 资源 窗格中,选择资源池协调器(列表中的第一个宿主机)。常规 选项卡显示 UUID。如果您未使用资源池,请选择虚拟机的宿主机。
  1. 在宿主机上打开控制台并运行以下命令:
    xe host-call-plugin host-uuid=host-UUID \
        plugin=coalesce-leaf fn=leaf-coalesce args:vm_uuid=VM-UUID
    例如,如果虚拟机 UUID 为 9bad4022-2c2d-dee6-abf5-1b6195b1dad5 且宿主机 UUID 为 b8722062-de95-4d95-9baa-a5fe343898ea,请运行以下命令:
    xe host-call-plugin host-uuid=b8722062-de95-4d95-9baa-a5fe343898ea \
        plugin=coalesce-leaf fn=leaf-coalesce args:vm_uuid=9bad4022-2c2d-dee6-abf5-1b6195b1dad5
  2. 此命令会暂停虚拟机(除非它已关机),启动空间回收过程,然后恢复虚拟机。
注意:
建议您在运行脱机合并工具之前手动关闭或暂停虚拟机。您可以使用 XenCenter 或 XenServer CLI 关闭或暂停虚拟机。如果您在正在运行的虚拟机上运行合并工具,该工具会自动暂停虚拟机,执行所需的 VDI 合并操作,然后恢复虚拟机。敏捷虚拟机可能会在不同的宿主机上重新启动。
如果要合并的虚拟磁盘映像 (VDI) 位于共享存储上,则必须在池协调器上运行脱机合并工具。
如果要合并的 VDI 位于本地存储上,请在连接了本地存储的宿主机上运行脱机合并工具。

使用磁盘 I/O

您可以配置磁盘 I/O 调度程序和磁盘 I/O 优先级设置来更改磁盘的性能。
注意:
本节中描述的磁盘 I/O 功能不适用于 GFS2、NFS 或 SMB3 存储。

调整磁盘 I/O 调度程序

对于一般性能,默认磁盘调度程序 noop 应用于所有新的 SR 类型。noop 调度程序为访问同一设备的竞争虚拟机提供最公平的性能。
  1. 使用以下命令调整磁盘调度程序:
    xe sr-param-set other-config:scheduler=<option> uuid=<sr_uuid>
    <option> 的值可以是以下术语之一:noop、cfq 或 deadline。
  2. 拔出并重新插入相应的 PBD,以使调度程序参数生效。
    xe pbd-unplug uuid=<pbd_uuid>
    xe pbd-plug uuid=<pbd_uuid>
要应用磁盘 I/O 请求优先级,请覆盖默认设置并将 cfq 磁盘调度程序分配给 SR。

虚拟磁盘 I/O 请求优先级

虚拟磁盘具有可选的 I/O 请求优先级设置。您可以使用这些设置来优先处理特定 VM 磁盘的 I/O,而不是其他磁盘的 I/O。
在为 VBD 配置任何磁盘 I/O 请求优先级参数之前,请确保已正确设置 SR 的磁盘调度程序。调度程序参数必须在 SR 上设置为 cfq,并且关联的 PBD 已拔出并重新插入。有关如何调整调度程序的信息,请参阅 调整磁盘 I/O 调度程序。
对于共享 SR,当多个主机访问同一 LUN 时,优先级设置将应用于从同一主机访问 LUN 的 VBD。这些设置不适用于池中的所有主机。
主机向远程存储发出请求,但请求优先级由远程存储完成。

设置磁盘 I/O 请求参数

可以使用带以下参数的 xe vbd-param-set 命令将这些设置应用于现有虚拟磁盘:
  • qos_algorithm_type - 此参数必须设置为值 ionice,这是虚拟磁盘唯一支持的算法。
  • qos_algorithm_param - 使用此参数设置键值对。对于虚拟磁盘,qos_algorithm_param 采用 sched 键,并且根据值,还需要一个 class 键。
    键 qos_algorithm_param:sched 可以具有以下值之一:
    • sched=rt 或 sched=real-time - 此值将调度参数设置为实时优先级,这需要一个 class 参数来设置值。
    • sched=idle - 此值将调度参数设置为空闲优先级,这不需要 class 参数来设置任何值。
    • sched=anything - 此值将调度参数设置为尽力而为优先级,这需要一个 class 参数来设置值。
    键 qos_algorithm_param:class 可以具有以下值之一:
    • 以下关键字之一:highest、high、normal、low、lowest。
    • 一个介于 0 和 7 之间的整数,其中 7 是最高优先级,0 是最低优先级。例如,优先级为 5 的 I/O 请求优先于优先级为 2 的 I/O 请求。

示例

例如,以下 CLI 命令将虚拟磁盘的 VBD 设置为使用实时优先级 5:
xe vbd-param-set uuid=<vbd_uuid> qos_algorithm_type=ionice
xe vbd-param-set uuid=<vbd_uuid> qos_algorithm_params:sched=rt
xe vbd-param-set uuid=<vbd_uuid> qos_algorithm_params:class=5
xe sr-param-set uuid=<sr_uuid> other-config:scheduler=cfq
xe pbd-unplug uuid=<pbd_uuid>
xe pbd-plug uuid=<pbd_uuid>