解决On-Disk_Upgrade:Failed to realign following Virtual SAN Object

 

如果您觉得我们的文章技术水平还凑合,请搜索:虚拟人,收听我们的公众号...



有朋友尝试利用vsan.On-disk_upgrade命令升级磁盘格式时出错,这种错误一般在进度到10~15%时出现,提示如下所示的错误:
Failed to realign following Virtual SAN objects: e4b67456-3e2f-880d-be81-2c534a01b7ea, adb47456-5a4b-869f-e0f1-2c534a01b7ea, due to being locked or lack of vmdk descriptor file, which requires manual fix.

在Virtual SAN的Tasks里可以看到类似下图所示的提示:


同时,在vmware-vsan-health-service.log文件里可以看到一堆报错讯息,类似下面这样:
[VsanVcDiskFormatConverterImpl::_Run] Failed to migrate vsanSparse objects.
[VsanVcDiskFormatConverterImpl::_Run] Made no progress
Traceback (most recent call last):
File "/usr/lib/vmware-vpx/vsan-health/pyMoVsan/VsanVcDiskFormatConverterImpl.py", line 1633, in _Run
self._HandleUserCancellation)
File "/usr/lib/vmware-vpx/vsan-health/pyMoVsan/VsanRealignClusterLib.py", line 335, in RealignClusterV3
uuidRemaining=objectsNeedingRealign)
RealignFailed: Made no progress


备注:这个health-service.log的文件位于你vCenter的对应位置,vcsa的位置为/storage/log/vmware/vsan-health/vmware-vsan-health-service.log;原因解析
1、这个问题,是因为在尝试做Disk-Format升级时,Virutal SAN会尝试让对象应用新的功能特性。首先,它会尝试将对象和它们的Components调整为1MB的地址空间,这个过程中,如果Cluster异常或者磁盘空间不足,就会导致失败;

2、Virtual SAN会重新调整vsanSparse对象为4K大小,这个过程种如果对象的版本无法统一升级到2.5则也会失败。失败的原因则可能是Disk Chain不完整或有问题(可能存在交换文件和磁盘描述文件被删除);

3、也存在一种可能就是由于Change Block Tracking(CBT)的文件导致,CBT文件负责在虚拟机执行replication或Backup时对虚拟机进行变动数据跟踪并且记录到ctk文件里,如果发生虚拟机被迁移走了,则虚拟机的ctk文件可能会残留下来,而锁定文件会导致无法执行On-Disk Upgrade的情况;解决方案1、首先找到vmware-health-service.log文件,确认里面的是否存在所有对象的重新分配已经完成了,如果成功,在日志里会提示(也就是第一步动作是否正常完成)。如果正常完成,会在文件里看到类似如下所示的提示:
[VsanRealignClusterLib::CheckForUnalignedObjects] All Objects now MB aligned

2、接着,记录下报错的几个对象的UUID讯息,用于后面做比对用。同时,下载附件所附的2144881_VsanRealign.zip文件,解压缩后将VsanRealign.py precheck拷贝到ESXi主机的Datastore,之后,执行命令:
#python VsanRealign.py precheck

这条命令会扫描namespace,会花较长时间;

3、之后,这条命令执行结果会出现关于AutoFix的字眼,问你是否确认执行AutoFix来解决一些检查到的问题,如果选择yes则系统会自动应用AutoFix,此时关于磁盘对象的描述文件会被重建,vswap文件之类的其它对象会被永久性删除;如果选择no则需要后面手动去执行修复动作。类似下面这样的提示:
39aef356-e4b9-c5bc-7c08-0200170d326c
Object UUID: 4698f356-7865-aaae-fc20-0200170d326c
Recorded Path: /vmfs/volumes/vsan:523e23728ba31d24-84ab9fc2821d6bdf/c695f356-3e2e-a40e-2ede-0200170d326c/linux-vm08-25632575.vswp
Recorded VM: linux-vm08
Object Class: vmswap
Object Size: 536870912
Parent directory exists
AutoFix: Will remove object

Object UUID: 8efdf456-c408-a163-2f8e-02001645d63b
Recorded Path: /vmfs/volumes/vsan:5228981f7117d6eb-94106da8ad4a6377/88fdf456-85f5-bfac-51ff-02001645d63b/linux-vm-a.vmdk
Recorded VM: None
Object Class: vdisk
Object Size: 2147483648
Parent directory exists
AutoFix: Will create new descriptor

Object UUID: 8ffdf456-a8db-44e1-2dbe-02001645d63b
Recorded Path: /vmfs/volumes/vsan:5228981f7117d6eb-94106da8ad4a6377/88fdf456-85f5-bfac-51ff-02001645d63b/linux-vm-a_1.vmdk
Recorded VM: None
Object Class: vdisk
Object Size: 268435456
Parent directory exists
AutoFix: Will create new descriptor


4、如果是由于cbt问题导致的,则会提示关于类似fixcbt之类的问题导致升级失败的情况,如果是针对cbt问题,则需要执行命令
#phython VsanRealign.py fixcbt

这条命令会帮助出来来自于cbt导致的升级失败问题;

5、确认完成这些事情后,再次尝试执行升级动作;

如果您觉得我们的文章技术水平还凑合,请搜索:虚拟人,收听我们的公众号


    关注 虚拟人


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册