通过使用 ViewDbChk 命令,您可以解决存储有关自动桌面池中的桌面虚拟机和自动场中的 RDS 主机的信息的数据库中的不一致问题。

Horizon 7 环境中,有关桌面虚拟机和自动场中的 RDS 主机的信息存储在以下位置:

  • LDAP 数据库
  • vCenter Server 数据库
  • 仅限 View Composer 链接克隆计算机:View Composer 数据库

通常,您可以使用 Horizon Administrator 移除或重置桌面虚拟机或 RDS 主机,以从置备或其他操作期间出现的错误中恢复。在极少情况下,不同数据库中有关处于错误状态的计算机的信息可能变得不一致,且无法使用 Horizon Administrator 从错误中恢复。您可能会看到以下症状之一:

  • 置备失败,并显示错误消息:带有输入规范的虚拟机已存在 (Virtual machine with Input Specification already exists)
  • 重构桌面池失败,并显示错误消息:桌面 Composer 故障: 带有输入规范的虚拟机已存在 (Desktop Composer Fault: Virtual Machine with Input Specification already exists)
  • Horizon Administrator 显示桌面计算机或 RDS 主机长时间处于“正在删除”状态。
  • 您无法删除桌面池或自动场。
  • 您无法删除桌面计算机或 RDS 主机。
  • Horizon Administrator 的“清单”选项卡中,桌面计算机或 RDS 主机的状态丢失。

如果数据库不一致导致桌面计算机或 RDS 主机处于无法恢复的错误状态或导致无法成功完成 Horizon Administrator 任务,您可以使用 ViewDbChk 命令解决不一致问题。ViewDbChk 命令具有以下特性:

  • 在安装 Horizon 标准服务器或 Horizon 副本服务器时,会自动安装 ViewDbChk。在安装 Horizon 安全服务器时,不会安装该实用程序。
  • ViewDbChk 是一种可从 Windows 命令提示符或脚本运行的命令。
  • ViewDbChk 支持完整虚拟机以及 View Composer 链接克隆的自动场和自动桌面池。
  • 在您希望移除某个计算机时,ViewDbChk 在该计算机上执行运行状况检查,并提示您进一步确认该计算机是否运行正常。
  • ViewDbChk 可以删除错误的或不完整的 LDAP 条目。
  • ViewDbChk 使用 I18N 字符集支持输入和输出。
  • ViewDbChk 不会移除用户数据。对于完整桌面虚拟机,ViewDbChk 从清单中移除该虚拟机,而不会将其从磁盘中删除。对于链接克隆桌面虚拟机,ViewDbChk 会删除该虚拟机并将用户磁盘存档到根文件夹(对于 VMFS 数据存储)或名为 archiveUDD 的子文件夹(对于 vSAN 和虚拟卷数据存储)中。
  • ViewDbChk 不支持未管理的桌面计算机或手动场中的 RDS 主机。

ViewDbChk 语法

ViewDbChk --findDesktop --desktopName <desktop pool or farm name> [--verbose]

ViewDbChk --enableDesktop --desktopName <desktop pool or farm name> [--verbose]

ViewDbChk --disableDesktop --desktopName <desktop pool or farm name> [--verbose]

ViewDbChk --findMachine --desktopName <desktop pool or farm name> --machineName <machine name> [--verbose]

ViewDbChk --removeMachine --machineName <machine name> [--desktopName <desktop pool or farm name>] [--force] [--noErrorCheck] [--verbose]

ViewDbChk --scanMachines [--desktopName <desktop pool or farm name>] [--limit <maximum deletes>] [--force] [--verbose]

ViewDbChk --help [--commandName] [--verbose]

ViewDbChk 参数

参数 说明
--findDesktop 查找桌面池或场。
--enableDesktop 启用桌面池或场。
--disableDesktop 禁用桌面池或场。
--findMachine 查找计算机。
--removeMachine 从桌面池或场中移除计算机。在移除计算机之前,ViewDbChk 提示用户禁用桌面池或场。在移除计算机后,ViewDbChk 提示用户重新启用桌面池或场。
--scanMachines 搜索处于错误或克隆错误状态或丢失虚拟机的计算机,列出按桌面池或场分组的问题计算机并提供移除计算机的选项。在移除计算机之前,ViewDbChk 提示用户禁用桌面池或场。在桌面池或场中移除所有错误计算机后,ViewDbChk 提示用户重新启用桌面池或场。
--help 显示 ViewDbChk 的语法。
--desktopName <desktop name> 指定桌面池或场名称。
--machineName <machine name> 指定计算机名称。
--limit <maximum deletes> 限制 ViewDbChk 可以移除的计算机数目。默认值为 1。
--force 强制移除计算机,而无需用户确认。
--noErrorCheck 强制移除没有错误的计算机。
--verbose 启用详细的日志记录。
注: 所有参数名称都区分大小写。

ViewDbChk 使用情况示例

一个名为 lc-pool2-2 的桌面计算机处于错误状态,我们无法使用 Horizon Administrator 将其移除。我们使用 ViewDbChk 将其从 Horizon 7 环境中移除。

C:\Program Files\VMware\VMware View\Server\tools\bin\viewdbchk.cmd --removeMachine --machineName lc-pool2-2 
Looking for desktop pool "lc-pool2" in LDAP...
   Desktop Pool Name: lc-pool2
   Desktop Pool Type: AUTO_LC_TYPE
   VM Folder: /vdi/vm/lc-pool2/
   Desktop Pool Disabled: false
   Desktop Pool Provisioning Enabled: true
Looking for machine "/vdi/vm/lc-pool2/lc-pool2-2" in vCenter...
   Connecting to vCenter "https://10.133.17.3:443/sdk". This may take some time...
Checking connectivity...
   Connecting to View Composer "https://10.133.17.3:18443". This may take some time...
The desktop pool "lc-pool2" must be disabled before proceeding. Do you want to disable the desktop pool? (yes/no):yes
Found machine "lc-pool2-2"
   VM Name: lc-pool2-2
   Creation Date: 1/25/15 1:20:26 PM PST
   MOID: vm-236
   Clone Id: b12a9ed2-8535-44ee-a9d6-6c9b5cf6f878
   VM Folder: /vdi/vm/lc-pool2/lc-pool2-2
   VM State: ERROR
Do you want to remove the desktop machine "lc-pool2-2"? (yes/no):yes
Shutting down VM "/vdi/vm/lc-pool2/lc-pool2-2"...
Archiving persistent disks...
Destroying View Composer clone "b12a9ed2-8535-44ee-a9d6-6c9b5cf6f878"...
Removing ThinApp entitlements for machine "/vdi/vm/lc-pool2/lc-pool2-2"...
Removing machine "/vdi/vm/lc-pool2/lc-pool2-2" from LDAP...
Running delete VM scripts for machine "/vdi/vm/lc-pool2/lc-pool2-2"...
Do you want to enable the desktop pool "lc-pool2"? (yes/no):yes