前言
这记录其实一直都想写一下了,大概记录一下自己本地ESXi出现的一些问题的一些修复方法,这文章大概会总结一下我目前遇到的(包括在公司的设备)中遇到的一些问题的解决方案,做个记录,这文章会不定期更新,有遇到的问题记录都会写上来。这样遇到问题就能够及时翻自己的文档解决了。(百度真心累)
正文
一.硬盘分区表丢失【基于:ESXi 6.7】
这里仅记录一下我自己本人的本人分区表丢失情况,如果是正常因为意外丢失的话,可以只参考下面的第5点,这里的一个情况是因为我本人的硬盘本来有点问题(出现损坏),只能这么做。当然,操作硬盘配置有数据风险,就算是普通意外丢失,也最好采用下面的方法。
这里本人不是很清楚普通的情况会是什么,我的情况是硬盘只是分区表丢失后,硬盘分区在web端无法正常获取内容,无法正常挂载分区,但是web后台能看到硬盘,ssh进入系统内部分区表信息也能读取,也能看到硬盘里面的文件并且能获取文件。
流程很简单,就是先备份数据,然后删除原来的分区【灾难性操作】,最后重新分配分区表并格式化。
1.找一块新的硬盘(后面均称为:新硬盘)插入电脑,并在web界面对硬盘进行分区。
2.ssh进入后台,查看一下问题硬盘的文件是否存在,一般目录是:/vmfs/volumes/***(*部分为datastore的名称,不过名称是映射的,原分区目录是uuid形式的)
3.确认文件存在之后,把相关的文件先移动到新硬盘的目录上面,尽可能用复制cp -r。
这一步主要是备份数据,防止出现意外导致数据丢失。
4.等备份结束之后,再进入ssh系统后台,然后先对原分区表进行删除(也可以在web页面进行删除)。
【删除之后数据丢失,一定要先备份数据】
使用ssh的话,首先确定分区及分区表代号:ls -l /vmfs/devices/disks
输出的内容里面,找到要删除的分区,一般格式:*****:num
*****:硬盘名称,num:分区号
这里可以进入web后端查看每个分区表的代号,也可以使用ssh命令:partedUtil getptbl /vmfs/devices/disks/*****
找到要删除的分区后,执行以下命令:partedUtil delete /vmfs/devices/disks/*****:num
*****:硬盘名称,num:分区号
这里要注意,单纯是硬盘名称指代的是硬盘,而不是分区,查看分区情况不需要带分区号,但请记得删除分区的时候带上分区号5.重新配置新分区,可以用web进行分区,也可以用命令,web这里不说,web一来比较简单,但是有很多配置不好配,但如果是全盘使用并且只是单一分区的话,直接用web就可以了。这里就只说使用ssh命令配置。
设置分区表:
partedUtil setptbl "/vmfs/devices/disks/*****" gpt "num start end AA31E02A400F11DB9590000C2911D1B8 0"
//*****:硬盘名称
//gpt:磁盘标签
//num:分区号
//start:起始扇区
//end:结束扇区
//AA31E02A400F11DB9590000C2911D1B8:GUID,指代VMFS数据储存
//0:分区属性,默认用0
//可以使用命令:partedUtil showGuids 查看其他分区类型
//扇区和容量转换公式:(end-start)*512 / (1024)^36.格式化分区并使用:
vmkfstools -C vmfs6 /dev/disks/*****:num
//*****:硬盘名称,num:分区号7.最后把数据移动过去就好了。
关键注意:一定要先备份资料!!一定要先备份资料!!一定要先备份资料!!
参考文献:
1.在 ESXi/ESX 上使用 partedUtil 命令行实用程序
2.VMware VMFS分区及格式化
二.挂起的虚拟机因配置信息异常无法执行开机操作
这个问题实际上是因为虚拟机挂起的时候会自动自动生成临时快照,但是因为虚拟机因为配置信息出现异常,导致挂起时候生成的快照和虚拟机当前配置不一致,于是无法正常开机。例如:结合上一个问题,某个虚拟机有一个从属或独立非持久的虚拟硬盘在某个物理硬盘上,然后因为物理硬盘分区表错误,所有数据备份后重新用上一个问题的解决方案重新配置,但是重新配置后的分区会自动生成新的分区ID,且用户重新设置了分区名,于是导致迁移过去后依旧无法检测到,所以就出现配置和快照异常的情况了。这个时候的虚拟机,既无法关闭,也无法开机,也无法直接web修改配置,所以无法使用。
先讲一下,如果是虚拟硬盘丢失导致的问题,这里先提一个方案,就是在分区的时候分区名使用和原来的一致测试(这个没测试过,以后有机会模拟一下测试)。
接下来就是真正的解决方法:
大概流程,先删除挂起时候生成的快照,然后关闭虚拟机,然后重新配置虚拟机开机。
1.先删除挂起时候生成的快照,这里我找了好久的方法,终于在官方的一个全英文档里面找到了,啃英文啃不活了我。
先贴上原文:
1.Connect to the host through SSH per Connecting to an ESX host using an SSH client or console where the suspended virtual machine resides
2.Log in as a user with administrator privileges.
3.Run this command to change directory to the folder of the suspended virtual machine: cd /vmfs/volumes/<Datastore name>/<virtual machine name>
4.Open the .vmx file in a text editor. See Editing files on an ESXi host using vi: a.Remove the .vswp reference under sched.swap.derivedName.b.Remove the .vmss reference under checkpoint.vmState.c.Save the changes and exit the text editor.
5.Run this command to get the virtual machine world ID: vim-cmd vmsvc/getallvms
6.Run this command to reload virtual machine .vmx file: vim-cmd vmsvc/reload <vmid from previous step>
翻译一下:
1.通过SSH连接到当前挂起的虚拟机所在的ESXi主机上
2.用administrator的权限用户登录
3.运行命令,进入挂起的虚拟机的目录:cd /vmfs/volumes/虚拟机所在分区目录/虚拟机名称
4.打开.vmx文件然后进入编辑,使用vi编辑以下内容a.在sched.swap.derivedName删除有.vswp字样的内容b.在checkpoint.vmState删除有.vmess字样的内容c.保存并推出文本编辑
5.运行命令获得虚拟机的world ID:vim-cmd vmsvc/getallvms
6.运行命令重载虚拟机的.vmx文件:vim-cmd vmsvc/reload <上一步获得的vmid>
大概解释一下,官方用这种方法就是删除一些快照信息达到清楚挂起状态的效果,但实际上,在虚拟机所在分区目录下会生成.vswp,和.vmess后缀的问题,我个人基本上是一把梭,直接删除这两个文件。目前删了什么问题都没有,但实际上个人不太建议直接删除,还是走官方方案比较好。
然后关于world ID,实际上是叫你获取那个vmid,world id在esxi有另外的一个作用。最后重载的命令一定要加上vmid,用名称是不行的。
基本上完成这样的操作,虚拟机应该能重新执行开机了,可以使用下面的命令测试:
开机:vim-cmd vmsvc/power.on <vmid>
关机:vim-cmd vmsvc/power.off <vmid>
重启:vim-cmd vmsvc/power.reset <vmid>
顺便记录一下查看正在运行的虚拟机命令(能查看真正的World ID):esxcli vm process list
还有使用真正World ID强制关闭虚拟机:esxcli vm process kill -t force -w <World ID>
参考文献
1.ESXI 命令行注册、管理虚拟机
2.Powering on a virtual machine from a suspend state or reverting to a snapshot fails
三.服务器意外断电,虚拟机打开失败
这个目前只遇到提示:提示为对象类型需要托管的I/O。实际上就是虚拟硬盘出现错误了。这个问题不需要多解释,修复很简单。
下面就直接贴上命令:
检查虚拟硬盘情况:vmkfstools -x check /出问题的虚拟机路径/*.vmdk
若提示“disk needs repair” 则运行修复命令:vmkfstools -x repair /出问题的虚拟机路径/*.vmdk
四.虚拟机意外丢失,但依旧在列表显示,但无效
这个实际上可以结合第一个问题讨论,说白了就是虚拟机丢了,但是web界面也没办法注销掉。所以需要使用ssh命令注销。
直接输入命令:vim-cmd vmsvc/unregister <vmid>




0 条评论