今天碰到一个小麻烦,是关于vmware的。有一台virtual machine在网络中下线了,失去了响应。登录到vSphere中,发现这台VM的guest memory是零,也就是说已经不在运行了。但状态是on的,就准备把它restart。但是菜单中的power选项全都为灰色不可选。

    接着查看了该VM使用的datastore,发现存储空间已经全部用完。一般的解决办法是把这台VM迁移到其他可用的datastore上。但问题来了,菜单中的Migrate项也是灰色不可用的。

    把当前datastore上的另外2台VM做了迁移,释放了大量空间,但是Migrate项不可用的问题还是照旧。查看了vShpere的任务列表,发现有一个几天前的migration任务,对象就是这台问题VM。这应该就是原因了。选中该任务,点击cancel。过几秒钟后查看,还是没有真正被取消,依然是停在60%的进度上,不进也不退,就挂在那里。

    此时判断,vcenter的图形界面已经无法解决问题了,方向改为登入ESX服务器直接重启该VM。ssh登录到了相关的ESX服务器,运行命令:

# vmware-cmd -l  (列出VM列表,可以看到问题VM的路径形式/vmfs/volumes/<UUID>/<VMDIR>/<VMNAME>.vmx

# vmware-cmd <path.vmx> getstate  (查看该VM当前状态,结果可以为on,off,stuck等;我这次的运行结果是stuck)

# vmware-cmd <path.vmx> stop (停止该VM)

    执行stop命令后,结果报错,大概意思是说这台VM出于pending状态。看来还是跟vcenter/vShpere中那个没有正常结束的任务有关,被锁住了。

    又回到vSphere上来了。查阅了vmware官方站点,有文章提到可以重启vcenter服务来解决问题。正好打完一些补丁也需要重启机器,就直接把这台vcenter给重启了。启动好以后再查任务列表,那个恼人的任务已经不见了。然后顺利的做了migration,搞定。

    小结:

    1. 优先用vcenter/vSphere处理大部分问题

    2. 有些时候需要ESX上执行vmware-cmd处理一些棘手的问题

    3. 处于stuck状态的任务一般无法在软件里搞定,方法是重启vShpere服务。这不会对生产环境产生影响,但会终止那些已经登录好的vcenter会话