服务覆盖:昆明·曲靖·玉溪·保山·昭通·丽江·普洱·临沧·楚雄·红河·文山·西双版纳·大理·德宏·怒江·迪庆

SSH连接到ESXi主机

eycit 2026-04-18 -5 次阅读 系统安装
---

theme: default themeName: "默认主题" title: "VMware虚拟机起不来?我把5年踩坑经验整理成这份排查清单"


前言

VMware虚拟化环境里,虚拟机起不来是日常。报错信息五花八门——"无法获取虚拟机所有权"、"无法打开电源"、"已存在同类虚拟机"、"无法挂载虚拟磁盘"……每一种报错背后都有不同的成因。

这篇文章把笔者这些年踩过的坑浓缩成一份清单,不讲虚的,直接给排查路径和解决方案。遇到问题直接查目录,对号入座。

场景一:虚拟机已存在,无法注册

报错关键词: `Unable to add machine. The virtual machine is already in use.`

这类报错通常意味着VM的"锁文件"还挂在目录里,ESXi认为这台VM正在被另一台主机使用。这种情况在强制关机、vMotion中断、主机断电后常见。

排查步骤:
# SSH连接到ESXi主机

ssh root@your-esxi-host

找到出问题的虚拟机目录

cd /vmfs/volumes/你的存储卷/你的虚拟机名称/

查看所有文件(包括隐藏锁文件)

ls -la

查找 .lck(锁文件)目录或文件

find . -name ".lck" -o -name ".vmdk*.lck"

锁文件类型解释:

  • `.lck/` 目录 + 里面包含锁描述文件 = 软锁(正常情况可能是意外残留)
  • `*-ctk.vmdk.lck` = 快照相关锁
  • `*-000001.vmdk.lck` = delta盘相关锁

解决方案:
# 确认虚拟机确实没有在其他ESXi主机上运行后,删除锁目录

rm -rf .lck/ rm -rf .lck

如果锁文件名有特定格式,精确删除

rm -f /vmfs/volumes/datastore1/VMNAME/.lck

⚠️ 警告:执行删除前务必确认VM没有在其他主机上运行,否则可能造成数据损坏。
进阶排查——检测残留锁:
# 查看当前所有VM的锁状态

esxcli vm process list

如果VM处于 Running 状态但你确信它已关闭,说明状态异常

重启 hostd 服务(需要进入维护模式或不在线迁移VM)

/etc/init.d/hostd restart

场景二:无法打开虚拟机电源

报错关键词: `Cannot power on: The virtual machine cannot be powered on because it requires the NX/XD bit to be present.`

这个报错说明虚拟机的CPU虚拟化特性配置与当前物理CPU不匹配。最常见的原因是:创建VM时勾选了"Intel VT-x/AMD-V"但BIOS里没有开启;或者反过来,用了旧版虚拟化兼容模式。

排查步骤:
# SSH登录ESXi

查看VM的CPU配置

vmware -v

cat /proc/cpuinfogrep -E "vmxsvm" # 检查CPU是否支持硬件虚拟化

查看VMX文件中的虚拟化配置

grep -E "vh.enablenvram" /vmfs/volumes/存储/VM/VMNAME.vmx
最常见的原因:BIOS里VT-x/AMD-V被禁用了

需要进入服务器BIOS(开机时按F2/Del等键进入Setup),找到以下选项并启用

  • Intel服务器:`Intel(R) Virtualization Technology` → `Enabled`
  • AMD服务器:`SVM Mode` → `Enabled`

同时在vSphere Client里检查VM的配置:

# 在ESXi上直接修改VMX文件,强制使用虚拟化指令集

编辑 VMNAME.vmx

vh.enable = "TRUE" # 启用虚拟化 cpuid.1.ecx.inteldep = "0:----:----:-:--:-:-:-:-" # 兼容性调整(实际值需要查官方文档)

注意:修改VMX文件前先备份,修改后需要从Inventory移除再重新注册VM。

场景三:虚拟机硬盘空间耗尽

报错关键词: `Not enough space`、`Unable to allocate`、`disk is full`

虚拟磁盘满了会导致VM进入只读模式或直接崩溃。排查前先搞清楚是虚拟磁盘文件本身超过限制还是ESXi数据存储物理空间耗尽

# SSH到ESXi

查看所有数据存储的使用情况

esxcli storage filesystem list

查看指定VM的虚拟磁盘文件大小

ls -lh /vmfs/volumes/datastore1/VMNAME/*.vmdk

查看VM的 Thin Provision(精简置备)已分配 vs 实际使用

vmkfstools -K /vmfs/volumes/datastore1/VMNAME/disk.vmdk # 查看已用空间

数据存储满了的处理方案:
# 方案一:删除快照(快照会消耗大量空间)

vim-cmd vmsvc/snapshot.get 虚拟机ID vim-cmd vmsvc/snapshot.remove 虚拟机ID # 删除所有快照

方案二:迁移到其他数据存储

通过vSphere Client迁移VM存储

方案三:扩大现有虚拟磁盘(需先确认存储有空间)

vmkfstools -X 200G /vmfs/volumes/datastore1/VMNAME/disk.vmdk

预防措施:

生产环境建议开启存储告警,阈值设为使用率80%时触发:

# 在vCenter里用PowerCLI设置告警

Connect-VIServer -Server vcenter.example.com

Get-Datacenter -Name "数据中心"New-AlarmDefinition -Name "存储空间告警" -Metric "DatastoreDiskUsedSpace" -Threshold 80

场景四:vmdk虚拟磁盘文件损坏

报错关键词: `The parent virtual disk has been modified since the child was created`、`Failed to lock the file`

快照链断裂或非正常关机后,VMDK描述符文件可能与实际磁盘头不一致。

# 检查VMDK描述符文件(正常情况下只有几十字节)
cat /vmfs/volumes/datastore1/VMNAME/disk.vmdkhead -20

正常输出示例:

# Disk DescriptorFile

CID=12345678

parentCID=ffffffff

createType="vmfsLinkedClone"

parentFileNameHint="parent-disk.vmdk"

# Extent description

RW 419430400 VMFS "parent-disk-flat.vmdk"

VMDK损坏的修复方法:
# 从 flat.vmdk 重建描述符文件

1. 先确定flat盘的实际大小(字节数)

stat -c %s /vmfs/volumes/datastore1/VMNAME/disk-flat.vmdk

2. 计算扇区数(大小 / 512)

假设是 85899345920 字节,则扇区数 = 167772160

3. 创建新的描述符文件

vmkfstools -c 85899345920 -d thin -a lsilogic /vmfs/volumes/datastore1/VMNAME/new-disk.vmdk

4. 将原flat盘映射到新描述符

修改新描述符文件中的 extent description,指向原flat盘

5. 替换原描述符

mv new-disk.vmdk disk-broken.vmdk.bak

编辑 new-disk.vmdk,把 Extent description 改为 RW 167772160 VMFS "disk-flat.vmdk"

这个过程有一定风险,建议操作前对整个VM目录做一次快照或完整备份。

场景五:VM内存不足导致崩溃

虚拟机分配了过多内存导致ESXi宿主内存压力过大,触发内存气球(balloon)回收或直接OOM。

# 在ESXi上查看内存使用情况

esxcli hardware memory get esxcli software acceptance get

查看各VM的实际内存使用

esxcli vm process list

查看内存气球活动

vm-support -v

或者用esxtop,按M切换到内存视图

esxtop

快速缓解措施:
# 对指定VM强制重启(紧急情况)

vim-cmd vmsvc/power.reset 虚拟机ID

减少VM分配的内存(需要先关闭VM)

编辑 .vmx 文件

mem.hotadd = "FALSE" sched.mem.max = "2048M" sched.mem.minsize = "512M"

场景六:网络适配器丢失

VM启动后网络不通,在ESXi里发现网卡不见了。

# 查看VM的网络适配器状态
vim-cmd vmsvc/get.config 虚拟机IDgrep ethernet

检查ESXi主机的物理网卡状态

esxcli network nic list

检查交换机配置

esxcli network vswitch standard list

常见原因及解决:
# 原因1:MAC地址冲突

编辑VMX文件,移除旧的MAC地址配置,让系统重新生成

删除以下行(如果有):

ethernet0.addressType = "static"

ethernet0.address = "00:50:56:XX:YY:ZZ"

添加:

ethernet0.addressType = "vpx"

原因2:VMkernel端口未绑定物理网卡

esxcli network vswitch standard uplink add -v vSwitch0 -u vmnic0

原因3:防火墙阻止了VM流量

esxcli network firewall ruleset list esxcli network firewall ruleset set --ruleset-id=vmotion --enabled=true

场景七:ESXi主机时间不同步

VM里应用报错、证书验证失败、AD域认证异常——这些症状有时候不是应用的问题,而是ESXi主机时间和VM内部时间不一致。

# 检查ESXi主机时间

esxcli system time get

检查NTP状态

cat /etc/ntp.confgrep server

/etc/init.d/ntpd status

如果NTP服务停了

/etc/init.d/ntpd start chkconfig ntpd on

手动同步一次时间

ntpdate -q pool.ntp.org # 先测试 ntpdate pool.ntp.org # 正式同步

注意:ESXi主机时间影响其上所有VM的时钟基准。如果ESXi时间比VM快8小时,VM内部系统时间即使配置正确,显示也会偏差。VMtools同步依赖于此。

结语

VMware故障排查没有银弹,但大多数问题都有规律可循。熟悉ESXi的命令行工具、了解锁文件和VMDK的结构、掌握数据存储的使用监控,这三件事做到位,能解决80%的日常故障。

建议把这份清单存一份放在手边,下次VM起不来的时候,对照报错信息直接查对应场景,效率至少翻倍。


希望本文的教程对你有所帮助。如有疑问或需要专业技术支持,可通过以下方式联系我们:

📞 服务热线:13708730161 💬 微信:eyc1689 📧 邮箱:service@eycit.com

易云城IT服务,您身边的IT专家。

上一篇
查看PHP-FPM进程状态...
下一篇
以管理员身份运行PowerShell...