一、故障现象
客户需要扩容虚拟机的磁盘,但是虚拟机所在的存储空间较小,需要将虚拟机迁移到空间大的共享存储上,但是当客户尝试进行storage vMotion(虚拟机迁移更改存储)时,出现报错,报错内容为调用对象“VM-NAME” 的“VirtualMachine.Relocate”失败。
二、故障原因
根据报错进行原因查找定位,通过vcenter日志发现有大量创建快照删除快照的日志,经过沟通是客户部署了备份一体机对虚拟机进行定时备份保护,vmware官方文章提到通过vStorage API备份后VPX_DISABLED_METHODS未删除会导致VM有NB_LAST_BACKUP标志。要想虚拟机迁移更改存储需要删除VPX_DISABLED_METHODS相关行。
三、操作步骤
1、使用ssh或者直接从ESXi界面登陆到vCenter Applience虚机中,进入SHELL,如果通过ssh方式需要将vCenter Applience的允许ssh登录提前打开,这里采用直接通过ESXi界面登陆的方式操作,首先打开shell操作权限。
Command> shell.set --enabled true
Command> shell
2、输入如下命令对管理虚拟机服务状态进行查看
Command#service-control --status --all
3、输入如下命令停止管理虚拟机的所有服务
Command#service-control --stop --all
4、确认服务停止后输入如下命令登陆postgres数据库
Command#service-control --status --all
Command#/opt/vmware/vpostgres/current/bin/psql -d VCDB -U postgres
5、修改操作前对数据库进行一次完全备份,将数据库文件存放在/tmp路径下,当操作失误后可以对数据库进行还原
Command#/opt/vmware/vpostgres/current/bin/pg_dump VCDB -U vc -Fp -c > /tmp/VCDBbackup
6、通过如下sql语句查询存在问题的虚拟机的ID
VCDB=# select id,datacenter_id,file_name from VPX_VM;
7、确认查询到的ID的虚拟机存在数据库标记阻止迁移存储
VCDB=#select * from VPX_DISABLED_METHODS WHERE ENTITY_MO_ID_VAL = 'vm-58';
8、对数据库记录进行删除操作
VCDB=delete from VPX_DISABLED_METHODS WHERE ENTITY_MO_ID_VAL = 'vm-58';
9、重新启动管理虚拟机数据库所有服务
Command#service-control --start --all
10、对存在的问题的虚拟机再次进行迁移测试
四、操作结果
通过如上步骤操作后,联系客户进行虚拟机迁移,客户反馈更改存储迁移顺利完成,没有报错发生。