草庐IT

VMware Horizon View 虚拟机状态为“正在删除 缺少”

有机天使 2023-03-28 原文
VMware Horizon View 虚拟机状态为正在删除 缺少

一、   故障现象

本例只针对没有ViewDbChk工具的老版本horzion平台环境

近期新接手了一套horzion5.3.4的虚拟化平台,此平台尚不清楚之前做过那些操作,只知道报以下错误:

1.  系统环境

vCenter5.5

ESXi5.5

Horzion5.3.4

操作系统WindowsServer2008R2

2.  故障描述

1、桌面池删除后,原桌面池始终存在,状态在“正在删除”状态

2、桌面虚拟机状态为“正在删除(缺少)”,无法正常删除

3、虚拟机副本状态为灰色,孤立状态,无法删除

二、   原因分析

  由于新接手业务,尚不清楚之前管理员做了那些操作,所以初步判断故障可能是以下原因造成:

1、管理员直接在vCenter平台内删除了链接克隆虚拟机或者挪动了虚拟机文件夹或资源池的层级位置;

2、对CS、composer、数据库或者vcenter进行了某个设备的备份恢复操作,导致LDAP、vCenter 和 View Composer 数据库之间存在不一致情况。

不管是何种原因,个人认为均是数据库不一致造成的问题

三、   故障解决

1.  方法1

对于Horizon View 6.1之上的版本,遇到此类错误,可以在连接服务器上用ViewDbChk工具,

ViewDbChk位于连接服务器以下位置:C:\Program Files\VMware\VMware View\Server\Tools\bin

   我的环境是Horizon View 5.3.4,默认是没有此工具,曾经想过装个6.1版本的连接服务器,将命令拷贝回我的服务器,但运行不成功,报错。官方给的下载地址已经无法打开,网上也找不到任何此工具的下载途径,所以经过多次尝试,,此方法放弃。

2.  方法2

通过在连接服务器上部署虚拟机,虚拟机的相关信息会保存在View Composer 数据库和ADAM 数据库中,同时也会在AD域控中产生相应的信息,所以在无法通过工具进行统一操作,换种思路,自己手动操作理论上也是可行,相关步骤如下:

a)   移除 View Composer 数据库中的所有桌面引用。

b)   从连接服务器上的 ADAM 数据库中移除虚拟机。

c)   从 Active Directory 中移除所有受影响的计算机对象。

d)   从 vCenter Server 中移除桌面。

本例的实际情况在vCenter Server中已经没有此类桌面,(建议a和b同步进行)。如果桌面池还在,请在操作前禁止部署。

1)  移除Composer数据库桌面引用
使用 SviConfig RemoveSviClone 命令移除以下项目:

l  View Composer 数据库中的链接克隆数据库条目。

l  Active Directory 中的链接克隆计算机帐户。

l  vCenter Server 中的链接克隆虚拟机。

打开Composer服务器,在cmd窗口下进入C:\Program Files (x86)\VMware\VMware View Composer目录,进行命令执行:

SviConfig -operation=RemoveSviClone -VmName=VMname -AdminUser=TheLocalAdminUser -AdminPassword=TheLocalAdminPassword -ServerUrl=TheViewComposerServerURL

l  VMname:是要移除的虚拟机的名称。

l  TheLocalAdminUser:是属于本地管理员组的用户的名称。默认值为Administrator

l  TheLocalAdminPassword:是用于连接到 View Composer 服务器的管理员的密码。

l  TheViewComposerServerUrl:是 View Composer 服务器 URL。默认值为 https://localhost:18443/SviService/v3_0。(5.1之前版本是2.0,6.0之后的版本是v3_5)。


  虚拟机需要一个一个的删除,如果需要移除大量虚拟机,可以创建一个包含每个虚拟机名称的文本文件和一个批处理文件,以对每个虚拟机执行SviConfig命令。具体方法如下

1.   将虚拟机名称复制到文本文件,并另存为 desktops.txt,保存至 SviConfig 所在的相同目录下。

2.   将以下行复制到新文本文档:
FOR /F %%A in (desktops.txt) DO sviconfig -operation=removesviclone -vmname=%%A -adminuser=username -adminpassword=password -ServerUrl=TheViewComposerServerURL
其中 username 是属于本地管理员组的用户的名称,而 password 是管理员的密码。
注意
ServerUrl 参数是可选参数,因为它有默认值。

3.   将文本文件另存为 RemoveDesktops.bat

4.   执行 RemoveDesktops.bat

2)  ADAM 数据库中移除虚拟机。
需要在连接服务器上的ADAM数据库中删除虚拟机的相关信息,但需注意的

一点是,如果先操作删除ADAM数据库中的虚拟机,则很有可能在view administrator界面就显示虚拟机已经被删除而看不到,导致无法方便的去清除composer数据库中的数据

a)  操作步骤
Ø  在您的 View 连接服务器计算机上启动 ADSI 编辑器 实用程序。

Ø  在控制台树中,选择“连接到”。

Ø  在“选择或键入标识名或命名上下文”文本框中,键入标识名 DC=vdi, DC=vmware, DC=int。

Ø  在“选择或键入域或服务器”文本框中,选择或键入 localhost:389 或 View 连接服务器计算机的完全限定域名 (FQDN),后跟端口 389

Ø  单击新建 > 查询,在“搜索”的根目录下,单击浏览,然后选择服务器组织单位。

Ø  在“查询字符串”中,粘贴此搜索字符串:

(&(objectClass=pae-VM)(pae-displayname=VirtualMachineName))
其中,VirtualMachineName 是要尝试查找 GUID 的虚拟机名称。您可以使用 * 或 ? 通配符来匹配多个桌面。

Ø  单击“确定”创建查询。单击左侧窗格中的查询。与搜索匹配的虚拟机将显示在右侧窗格中。

Ø  检查查询返回的项目属性,以确认已找到正确的虚拟机,并删除pae-VM对象,以便将它们从数据库中移除。

注意

Ø  在 ADAM 数据库中,检查 OU=Server Groups 和 OU=Applications 下是否有条目(一般情况上述操作在删除时候会一并删除)。

Ø  可通过同时从“服务器组”和“应用程序”组织单元中移除相应的池条目来从 View Manager 中移除不包含任何桌面的已损坏池。但是,从 ADAM 数据库中移除一个条目而保留另一个条目会在尝试在 View Manager 中查看池或桌面清单时导致出现 java.lang.nullpointerexception 错误。

 

 b)  操作实例







 





查询出所需删除的虚拟机,配合在composer主机的操作,删除虚拟机



注意,这里的名称显示是按照GUID名称进行的显示,虚拟机的真实名称可以通过右键“属性”进行查看


 

两步操作做完后,桌面池和虚拟机均全部删除,故障解除。

 


有关VMware Horizon View 虚拟机状态为“正在删除 缺少”的更多相关文章

  1. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

    我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

  2. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  3. ruby - 我可以使用 Ruby 从 CSV 中删除列吗? - 2

    查看Ruby的CSV库的文档,我非常确定这是可能且简单的。我只需要使用Ruby删除CSV文件的前三列,但我没有成功运行它。 最佳答案 csv_table=CSV.read(file_path_in,:headers=>true)csv_table.delete("header_name")csv_table.to_csv#=>ThenewCSVinstringformat检查CSV::Table文档:http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV/Table.html

  4. ruby - 我可以使用 aws-sdk-ruby 在 AWS S3 上使用事务性文件删除/上传吗? - 2

    我发现ActiveRecord::Base.transaction在复杂方法中非常有效。我想知道是否可以在如下事务中从AWSS3上传/删除文件:S3Object.transactiondo#writeintofiles#raiseanexceptionend引发异常后,每个操作都应在S3上回滚。S3Object这可能吗?? 最佳答案 虽然S3API具有批量删除功能,但它不支持事务,因为每个删除操作都可以独立于其他操作成功/失败。该API不提供任何批量上传功能(通过PUT或POST),因此每个上传操作都是通过一个独立的API调用完成的

  5. ruby-on-rails - 跳过状态机方法的所有验证 - 2

    当我的预订模型通过rake任务在状态机上转换时,我试图找出如何跳过对ActiveRecord对象的特定实例的验证。我想在reservation.close时跳过所有验证!叫做。希望调用reservation.close!(:validate=>false)之类的东西。仅供引用,我们正在使用https://github.com/pluginaweek/state_machine用于状态机。这是我的预订模型的示例。classReservation["requested","negotiating","approved"])}state_machine:initial=>'requested

  6. ruby - 字符串文字中的转义状态作为 `String#tr` 的参数 - 2

    对于作为String#tr参数的单引号字符串文字中反斜杠的转义状态,我觉得有些神秘。你能解释一下下面三个例子之间的对比吗?我特别不明白第二个。为了避免复杂化,我在这里使用了'd',在双引号中转义时不会改变含义("\d"="d")。'\\'.tr('\\','x')#=>"x"'\\'.tr('\\d','x')#=>"\\"'\\'.tr('\\\d','x')#=>"x" 最佳答案 在tr中转义tr的第一个参数非常类似于正则表达式中的括号字符分组。您可以在表达式的开头使用^来否定匹配(替换任何不匹配的内容)并使用例如a-f来匹配一

  7. ruby - Net::HTTP 获取源代码和状态 - 2

    我目前正在使用以下方法获取页面的源代码:Net::HTTP.get(URI.parse(page.url))我还想获取HTTP状态,而无需发出第二个请求。有没有办法用另一种方法做到这一点?我一直在查看文档,但似乎找不到我要找的东西。 最佳答案 在我看来,除非您需要一些真正的低级访问或控制,否则最好使用Ruby的内置Open::URI模块:require'open-uri'io=open('http://www.example.org/')#=>#body=io.read[0,50]#=>"["200","OK"]io.base_ur

  8. ruby - 如何安全地删除文件? - 2

    在Ruby中是否有Gem或安全删除文件的方法?我想避免系统上可能不存在的外部程序。“安全删除”指的是覆盖文件内容。 最佳答案 如果您使用的是*nix,一个很好的方法是使用exec/open3/open4调用shred:`shred-fxuz#{filename}`http://www.gnu.org/s/coreutils/manual/html_node/shred-invocation.html检查这个类似的帖子:Writingafileshredderinpythonorruby?

  9. ruby-on-rails - 标准化文件名的字符串,删除重音和特殊字符 - 2

    我正在尝试找到一种方法来规范化字符串以将其作为文件名传递。到目前为止我有这个:my_string.mb_chars.normalize(:kd).gsub(/[^\x00-\x7F]/n,'').downcase.gsub(/[^a-z]/,'_')但第一个问题:-字符。我猜这个方法还有更多问题。我不控制名称,名称字符串可以有重音符、空格和特殊字符。我想删除所有这些,用相应的字母('é'=>'e')替换重音符号,并将其余的替换为'_'字符。名字是这样的:“Prélèvements-常规”“健康证”...我希望它们像一个没有空格/特殊字符的文件名:“prelevements_routin

  10. 在VMware16虚拟机安装Ubuntu详细教程 - 2

    在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主

随机推荐