尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
VCSA服务全Invalid?从vmon到systemd的排障实践与修复全攻略
1. 故障背景VCSA服务集体“invalid”的真相搞虚拟化的同行看到这个报错应该都不陌生某天vCenter Server ApplianceVCSA管理界面打不开浏览器刷不出登录页外部PSC/VC通信断掉SSH上去执行service-control --all-services --status一看大量服务状态不是running也不是stopped而是“invalid”。先说这个状态的准确含义。invalid不是“服务挂了”那么简单的概念。它指的是systemd或者vmon守护进程无法识别该服务的注册状态——具体来说服务单元unit没有被正确加载或者该服务的启动依赖出现了不可解析的环路/断链又或者服务残留的状态数据与当前单元定义对不上。很多刚接触VCSA的人第一反应是“服务崩了重启一下”但直接restart往往没有任何效果因为systemd对invalid状态的单元默认拒绝执行start操作。这个故障的高发场景很典型我见过的基本集中在这么几类VCSA所在ESXi主机非正常断电虚拟机强制关机后重启。存储滞后或快照回滚导致VCSA文件系统状态与实际配置不一致。磁盘空间被日志塞满服务状态持久化失败。VCSA版本升级/补丁安装过程中断。这个故障最麻烦的地方在于表面现象和真实原因脱节。一眼看过去是“服务无效”实际上八成都不是服务本身损坏而是服务管理器vmon或系统级的依赖环境出了问题。所以处理这个问题的核心逻辑不是“修某个服务”而是“先修能让服务被系统识别的基础环境”。下面就把我的排障过程完整拆开讲。2. 诊断思路先搞清楚是“谁病了”2.1 第一步SSH进VCSA确认系统基本状态在浏览器打不开vCenter界面的时候SSH是唯一可靠的入口。VCSA默认SSH服务是关闭的但当你已经能登入ESXi主机时可以从VCSA虚拟机的控制台直接操作或者在ESXi的“编辑设置”里临时开启SSH。成功登录后第一件事不是急着看服务而是确认系统本身还喘不喘气。先看磁盘看内存看根文件系统是否只读。我用过的检查命令组合df -h free -h systemctl status uptime这一步极其关键。VCSA的/存储分区如果满了后面的所有修复动作都会失败。我遇到过一次故障表面现象是服务全部invalid实际原因只是/storage/log被vpxd的日志撑到100%systemd在写状态文件时直接报只读文件系统于是所有服务状态全部失效。那次如果不先看磁盘上来就重启服务大概率把系统搞得更糟。磁盘确认无误后第二步要确认网络和DNS解析是否正常。VCSA对内网DNS依赖非常强/etc/hosts里写死了主机名对应的IP如果IP变了或者hosts内容被篡改vmon和vpxd都会拒绝正常启动。hostname cat /etc/hosts我当时处理的案例里就是因为某次迁移后IP变了但主机名解析还是旧的导致所有vCenter服务起不来。ping 主机名能通但要确认解析到的IP是不是当前网卡实际IP。2.2 第二步用service-control看服务状态读懂invalid含义VCSA的常用服务管理命令是service-control而不是直接用systemctl。这里解释下为什么VCSA里有相当一部分服务vpxd、vsphere-ui、vmonapi、sso等是由vmon守护进程管理的不是原生systemd服务。service-control是vmon对外封装的命令行工具它会跟vmon通信而不是直接操作systemd。所以当你执行service-control --all-services --status看到的输出大致是这个样子的vmonapi RUNNING vpxd INVALID vsphere-ui INVALID sps INVALID vcha STOPPED ...RUNNING好理解STOPPED也好理解INVALID就是vmon无法加载该服务的定义。注意这里的INVALID和systemd的failed不是一个概念。systemd里failed是指服务启动失败而INVALID在vmon体系里的意思是“vmon不认识这个服务或该服务的依赖状态让它无法启动”。我习惯用一句话概括INVALID是“服务管理者本身不知道该拿这个服务怎么办”不是“服务拒绝工作”。所以继续排查的方向就变成为什么vmon会不认识这些服务2.3 第三步查看vmon日志定位元凶VCSA里vmon是连接systemd和上层vCenter服务的中间层。它的日志在/var/log/vmware/vmon/vmon.log搜索包含INVALID、ERROR、FATAL的记录。我在实际故障中看到过典型报错分为两类一类是“unit file not found”或“unit is masked”——单元文件被屏蔽/丢失比如/etc/systemd/system/multi-user.target.wants里的软链接被意外删除。另一类是“dependency loop”或“failed to load unit”说明服务的依赖关系无法建立。第一类问题大概率出在文件系统损坏或人为误操作上第二类问题往往跟/etc/hosts、网络配置、证书目录等基础条件相关。vmon在加载服务定义时会去解析这些条件一旦条件不满足就标记为INVALID。看完vmon日志后再去systemd层面确认单元状态systemctl list-unit-files | grep -i service | grep -i vpxd systemctl status vpxd如果systemctl显示Loaded: not-found说明单元文件确实不存在或链接断了。如果Loaded正常但Active是failed说明服务启动过但中途退出。这两种情况的后续处理方式完全不同诊断这一步不能偷懒。3. 核心原因剖析服务为什么会“无效化”3.1 非正常关机和快照回滚最常见的起源VCSA本质上是一个预优化过的虚拟机操作系统Photon OS它对文件系统一致性的要求比传统通用Linux更严格。非正常断电后文件系统虽然能通过fsck自动修复但服务状态文件和单元文件的软链接底层inode可能已经损坏尤其是/etc/systemd/system下的动态链接。快照回滚也是个高频诱因。很多管理员习惯在对VCSA做升级前打快照回滚时直接把虚拟磁盘状态拉回旧时间点。但注意vCenter的数据库、证书、配置文件和缓存之间是有“时间戳咬合”的。快照回滚后磁盘文件回到过去但vmon守护进程的一些运行期状态可能没能同步回滚或者更糟糕——某些存储在内存RPC通道里的会话状态直接错乱最终造成服务注册表出现无效项。3.2 /etc/hosts与主机名解析错乱这个问题容易忽略但它在我处理的故障里至少占三成。VCSA安装时绑定了FQDN和IP/etc/hosts里有类似这样的行127.0.0.1 localhost ::1 localhost x.x.x.x vcsa.corp.local vcsa注意VCSA不允许在hosts里把实际IP映射到localhost而且hostname必须与hosts里配置的名称一致。vpxd启动时要大量依赖内部DNS解析做节点间通信一旦hosts配置出问题比如IP写错、旧的IP没有清理vmon加载服务时就会反复重试然后超时最终状态被标记为INVALID。3.3 磁盘空间和文件系统只读这个是物理层面的隐形杀手。VCSA默认分区不算宽裕长时间运行的vCenter会产生海量日志。如果/storage或者/var/log被占满systemd和vmon在创建临时状态文件、PID文件或者写套接字时就会失败。很多时候服务本身没坏但因为systemd连PID文件都写不进去最终单元被标记为INVALID。检查命令df -h / /var /tmp /storage/log特别关注/storage/log如果Use%接近100%先释放空间。日志清不掉怎么办可以临时删除过期的vpxd日志归档find /storage/log/vmware/vpx/ -name *.gz -mtime 3 -delete这一步是治标能抢出几GB空间让服务先起来。3.4 单元文件损坏与依赖断裂VCSA里有些服务单元文件是从模板动态生成的比如vpxd的unit里会包含环境变量引用和User指定。如果某个引用的环境变量文件被破坏或不存在systemd加载单元文件时会报解析错误。这种情况下的invalid不是vmon的锅而是systemd的unit parser就拒绝了。验证手段是执行systemd-analyze verify /etc/systemd/system/vpxd.service如果输出报错说明单元文件本身有问题。修复思路是定位到缺失的引用项补齐文件或修正单元定义而不是尝试强制启动服务。4. 故障处理实操从快速恢复到深度修复4.1 动手前的备份与回退策略修VCSA有一个原则能快照先快照。无论当时的故障看起来多紧急只要ESXi主机上还有快照能力就应该先给VCSA做一个一致性快照。快照成本很低但能让你在修复失败后有后悔药吃。如果VCSA本身无法做在线快照比如存储不支持至少执行一次关键配置的备份ls /etc/vmware-vpx/ tar -czf /tmp/vcsa-config-backup.tar.gz /etc/vmware-vpx/ /etc/vmware-sso/把备份包拷到外部存储然后再开始修复。这一步不是浪费时间是给后面的所有命令兜底。4.2 方法一快速重置加重启适用于轻度故障如果你执行service-control --all-services --status发现invalid的只是少数几个辅助服务且vmon本体RUNNING可以尝试快速重置service-control --reset service-control --start --all-services--reset是vmon提供的一个特殊参数它会重新注册和加载所有服务定义重置运行状态缓存。这个命令不会格式化数据不会改动配置文件它的作用是让vmon“忘掉”当前的无效状态重新去读一遍服务定义。执行完reset后不要立刻启动先执行service-control --all-services --status确认INVALID是否已变成STOPPED。变成STOPPED意味着vmon已经重新认识这些服务了此时再启动成功率会高很多。如果reset后仍然是INVALID说明不是运行期状态问题而是服务定义/依赖层面的硬伤往下看方法二和方法三。4.3 方法二按依赖顺序手动拉起关键服务VCSA服务之间有严格的启动顺序犯懒直接--start --all-services在健康状态下没问题但在故障状态下会触发依赖竞争。正确做法是手动按顺序拉起。我整理的关键服务启动顺序如下不同版本略有差异但核心骨架一致# 1. 先确认vmon本身能跑 service-control --start vmonapi # 2. 启动基础服务 service-control --start vmafdd service-control --start vmdird service-control --start vmcad # 3. 启动中间层 service-control --start vmonapi service-control --start vpxd # 4. 启动UI service-control --start vsphere-ui每个命令之间建议间隔10到15秒给服务一点初始化时间。不要直接串行用 连接因为前一个服务只是“开始启动”并不代表“完成启动”等它完全ready后再拉起下一个更稳妥。验证是否完全就绪的方法有两种# 查看vmon判断的启动状态 service-control --status vpxd # 直接看端口是否监听 netstat -tlnp | grep 443 netstat -tlnp | grep 5480如果12345表示端口正常监听说明服务起来了。如果服务状态从STOPPED变到了RUNNING但端口没出现那要怀疑服务内部是否在反复崩溃——这时候去看/var/log/vmware/vpxd/vpxd.log。4.4 方法三处理单元文件级别的损坏如果reset无效方法二的拉起也报“unit not found”或“job failed”说明要处理unit文件层面的问题了。先列出所有标记为invalid的服务对应的unitsystemctl list-units --all | grep invalid这里的invalid对应systemd的行注意看行首的UNIT名和LOAD列。如果LOAD列显示error表示单元文件加载失败。典型修复场景如下场景一unit文件miss掉软链接。正常unit文件在/usr/lib/systemd/system/或/etc/systemd/system/中但multi-user.target.wants里的软链接丢了导致虽然服务二进制还在但系统不知道要在多用户模式下拉起它。修复方式systemctl enable vpxd注意enable不只是设置开机启动它会从unit文件所在目录重新生成软链接到target目录。这往往能修复软链接丢失问题。场景二unit文件引用了不存在的环境变量文件。查看报错systemd-analyze verify /usr/lib/systemd/system/vpxd.service输出如果出现EnvironmentFile: No such file or directory找到文件中引用的路径比如/etc/sysconfig/vpxd看这个文件是否被误删。解决方案是重建该文件或从同版本VCSA中拷贝同文件过来。场景三服务被mask了。VCSA中有些服务如果系统判定为不安全会把它mask掉导致即使enable也无法启动。mask在systemd里比disable更严厉它把unit入口指向了/dev/null。处理systemctl unmask vpxd systemctl start vpxd操作层面以上每一步操作都要在vmon服务仍存活的前提下进行。如果vmon本身已经挂了systemd和vmon之间会出现连锁的invalid这时候要先修vmonsystemctl restart vmon这个命令是直接在systemd层面重启vmon守护进程。vmon起来之后再尝试service-control --reset。4.5 实操记录一次典型的INVALID恢复过程下面完整记录一次我处理过的故障操作流程供参考。某套VCSA 7.0升级后重启vSphere Client无法登录且执行status后大量服务显示invalid。当时我的操作序列是SSH登录VCSA执行df -h确认磁盘有空间。执行service-control --reset发现无效状态不消失。查看/var/log/vmware/vmon/vmon.log定位到错误Failed to load vpxd: unit failed to load metadata。执行systemctl status vpxd报Loaded: error。执行systemd-analyze verify /usr/lib/systemd/system/vpxd.service发现EnvironmentFile /etc/vmware/vpxd-env不存在。检查发现/etc/vmware/vpxd-env为空文件且被误删从同版本VCSA的备份中恢复该文件权限设置为600属主root:root。执行systemctl daemon-reload重新加载unit定义。执行systemctl reset-failed vpxd清除系统记录里该单元之前的失败状态。执行service-control --start vpxd服务由invalid变为running。恢复过程看起来步骤不多但关键转折点在找到那个丢失的环境变量文件。如果没有做第3步的日志排查没有第5步的verify验证后面可能就会陷入“重启无效、服务还是invalid”的死循环里。5. 常见问题与排查技巧实录5.1 故障速查表下面把我在多次排障中用到的判断路径整理成表格方便直接对照操作现象优先排查方向推荐动作大量服务显示invalid/etc/hosts与主机名解析比对hostname与网卡IP清理hosts残留服务invalidvmon报unit error单元文件缺失/损坏systemctl enable daemon-reload服务invalid磁盘全满/storage/log占用清理日志归档释放空间服务invalid系统时钟偏差大NTP与证书时间窗ntp同步重启vmon少数服务invalid且reset能恢复vmon运行期状态错乱service-control --reset再启动所有服务invalid且vmon都起不来文件系统只读/脏状态fsck或快照回滚替换5.2 排障命令自查清单经常有运维同行问我能不能给一个“万能命令”一次搞定。说实话VCSA的故障很少有万能药但如果非要列一个最常用的动作序列我通常是这个顺序# 查看磁盘排除空间问题 df -h # 检查vmon日志找根因 tail -100 /var/log/vmware/vmon/vmon.log # 重置服务注册状态 service-control --reset # 先拉起vmonapi service-control --start vmonapi # 按依赖顺序拉起关键服务 service-control --start vpxd service-control --start vsphere-ui # 最后看全局状态 service-control --all-services --status注意上述命令中如果某一条执行报错先停下来分析报错内容不要硬着头皮继续跑后面的命令。VCSA的排障最怕“脚本式执行”——照着网上的攻略一条条敲却忽略了当前环境的实际报错。每个环境报错不一样处理路径就不一样。5.3 几个容易踩坑的小细节细节一不要轻易重启VCSA虚拟机。有些管理人员一看到vCenter打不开了第一反应是在ESXi里强制重启VCSA虚拟机。这个动作如果遇到根本原因是磁盘损坏或者文件系统不一致强制重启会加重损坏。先SSH进去看一圈确认物理资源无碍再做重启决策。细节二不要把systemctl和service-control混为一谈。前面说过VCSA里的vCenter域服务由vmon管理而系统级服务如sshd、networkd由systemd管理。理论上用systemctl直接操作vCenter域服务虽然能触发启动但不会更新vmon里的服务状态。如果只是用systemctl启动服务而vmon状态不同步服务表现还是invalid这会让你误以为故障没有解决。细节三证书过期也会导致服务invalid。有些VCSA服务启动时会校验证书有效期如果机器时间被拨乱或者证书过期vmon会拒绝加载服务定义。遇到怎么reset都无效的情况不妨看一眼/var/log/vmware/vmware-sso/idm.log或者时钟同步状态。之前遇到过某台VCSA时间慢了两个小时SSL握手全面失败看起来像服务故障实际是对时问题。5.4 关于日志的补充说明排障过程中日志永远比看命令输出重要。VCSA各个服务的日志分布比较散我常用的是这几个位置/var/log/vmware/vmon/vmon日志第一排查对象。/var/log/vmware/vpx/vpxd日志服务起不来时候配合查看。/var/log/vmware/vsphere-ui/UI服务日志登录页打不开时重点看。/var/log/vmware/vmware-sso/SSO相关日志认证依赖问题看这里。在外面干活没有完整日志的情况下很多判断都是盲猜。有日志的情况下每个invalid都有明确背锅方——这个观念要建立起来能避免走很多弯路。6. 写在最后的经验之谈我个人处理VCSA故障十几次下来最大的体会是vCenter服务大量显示invalid多半不是服务坏了而是服务被“看不见的手”掐住了。这只看不见的手可能是磁盘、可能是hosts解析、可能是单元文件、也可能是vmon本身。遇到这个故障宁可多花10分钟把基础检查做完也不要急着甩出“重启大法”。另外一个值得养成的习惯是VCSA的维护窗口期尽量避开频繁快照回滚。vCenter不像普通虚拟机可以随意“时间旅行”它的组件间时间咬合太紧了。做任何操作前多用service-control --all-services --status确认服务状态并且在每次生产变更前备份好vmon相关的服务状态记录——哪怕只是把service-control --all-services --status的输出保存为文本都能在故障恢复时省掉大量定位时间。最后分享一个小技巧如果遇到大批服务invalid且修复时间紧迫在确认vmon本身正常的前提下可以尝试service-control --stop --all-services把vmon的守护连接全部断开再执行service-control --start --all-services这种“全停全启”比只启单个服务更能重置vmon内部的依赖图有时候反而比service内部的小操作管用。但它有个前提磁盘空间充裕、hosts解析正常、且没有单个服务卡死导致整体启动超时。满足这三个条件时偶尔能有奇效。当然这招不适合频繁使用毕竟vCenter服务的优雅起停优先级高于一切粗暴操作能用精确启动解决的问题就不要用全局重启去试探。
RELATED

相关推荐

PS流深度解析:从RTP打包到H.264帧提取的完整实践

PS流深度解析:从RTP打包到H.264帧提取的完整实践

简介:面向音视频流媒体开发者,这份压缩包提供了海康、国标PS流解析的两种实现方案——基于ffmpeg的解析版本与直接解析PS流版本,适合需要对接海康设备或国标PS流做二次开发、播放与转码的技术人员。压缩包共27个文件,包括6个C源文…

📅 2026/10/17 23:06:22
Intouch与SQL Server报表系统配置:从数据库连接到VBA刷新的完整指南

Intouch与SQL Server报表系统配置:从数据库连接到VBA刷新的完整指南

简介:这是一份面向SCADA系统工程师与HMI开发者的Word操作文档,专门解决WonderWare Intouch 2014 R2(IDE)环境下的数据库对接与Excel报表生成问题。文档从基础配置讲起,包括通过SQL Server Management Studio修改身份验…

📅 2026/10/17 23:06:22
NTFS备用数据流/交换数据流(ADS)从原理到排查清除全攻略

NTFS备用数据流/交换数据流(ADS)从原理到排查清除全攻略

如果你做过Windows环境下的系统维护或者安全排查,大概率听过“备用数据流/交换数据流”这个名字。它听起来像某种网络协议,实际上却是NTFS文件系统里一个低调到容易被忽略、但影响面极大的文件附加机制。我第一次真正意识到它的存在,是因为一…

📅 2026/10/17 23:06:22
MORE NEWS

更多资讯

📰

Manus数据手套EMF手势跟踪在遥操作机械手中的优势:TaoToken统一Key打通数据链路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

Claude Code 太贵?把 settings 改到 TaoToken 的省钱体验分享

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

交叉熵损失、可调节参数与LoRA:大模型微调核心链路全解析

交叉熵损失&大模型可调节参数&LoRA搞大模型微调的人,一定绕不开这三样东西:损失函数怎么算、超参数怎么调、参数高效微调用什么手法。这三个词看着各自独立,其实是一条完整链路——交叉熵损失告诉你模型学得好不好,可调节…

📰

Agent策略是什么?从岗位说明书到决策机制全解析

“Agent策略”这个词,我第一次听到的时候觉得特别玄乎,总觉得它是某种高深的数学定义或者算法黑话。后来真正上手做智能体应用,踩了半年坑才反应过来:策略就是给AI定的一套“在什么情况下做什么事”的规则,是它决策和行…

📰

数据科学硕士申请全攻略:笔试与面试真题解析、备考策略

去年十一月,我在申请交流群里看到一条新消息:“数据科学硕士笔试通知已发出,请查收邮件。”那一刻我的手确实抖了一下。作为一个统计学背景的申请者,笔试对我而言意味着两件事:一是材料关总算过了,二是真正…

📰

Cocos JSC Endecryptor:从原理到实战的脚本加解密指南

不知道你有没有过这种体验:用 Cocos Creator 打完包,闲得没事把原生包里的 assets 目录翻出来,结果一眼就看到一堆 JS 文件,层级清晰,变量名和注释都还在。那一刻你会发现,自己花几个月写的玩法逻辑&#x…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬