File system specific implementation of LookupAndOpen [file] failed

发布时间 2023-03-23 16:02:51作者: 聆听城市喧哗

一、问题描述:

某vm开机时,报错:文件系统特定的dOpen [file] 实施无效,无法启动虚拟机;“File system specific implementation of LookupAndOpen [file] failed。”

 二、分析处理

1)可能原因:

使用sesparse vmdk回收链接克隆的磁盘空间时数据损坏。/
虚拟磁盘描述符文件(.vmdk,.vmx)中存在错误条目/
ESXi主机与存储阵列之间的通信问题/  

ESXi操作系统问题/

文件锁的问题/
虚拟磁盘数据损坏

2)检查vm的 vmkernel.log和vmware.log,有相关指示条目;

3)修复磁盘

vmkfstools -x check /vmfs/volumes/<datastorepath>/<vm name>/<vm name main base disk>.vmdk

vmkfstools -x repair /vmfs/volumes/<datastorepath>/<vm name>/<vm name main base disk>.vmdk  

4)参考KB82673

1>检查vm的磁盘是否被其他vm所使用中;(现场是如此)

grep -i virtualdisk.vmdk /vmfs/volumes/*/*/*.vmx  ##esxi主机上检查,输出结果多余1条的,证明有多个虚拟机占用

/vmfs/volumes/xxxxxxxx-xxxxxxxx-xxxx-xxxxxxxxxxxx/VM/VM.vmx:scsi0:0.fileName = "virtualdisk.vmdk"
#检查文件是否使用及使用者,执行:
vmkfstools -D /vmfs/volumes/xxxxxxxx-xxxxxxxx-xxxx-xxxxxxxxxxxx/VM/virtualdisk-flat.vmdk #输出如下类似:owner,Lock,可判断出当前正在使用的vmnic和mac地址;
Aug 25 09:32:13 esxhost vmkernel: 11:13:16:44.102 cpu3:1041)FS3: 130: <START virtualdisk-flat.vmdk>
Aug 25 09:32:13 esxhost vmkernel: 11:13:16:44.102 cpu3:1041)Lock [type 10c00001 offset 69419008 v 436, hb offset 3200512
Aug 25 09:32:13 esxhost vmkernel: gen 40, mode 1, owner 4a84acc3-786ebaf4-aaf9-xxxxxxxxxxxx mtime 271]
Aug 25 09:32:13 esxhost vmkernel: 11:13:16:44.102 cpu3:1041)Addr <4, 153, 112>, gen 379, links 1, type reg, flags 0x0, uid 0, gid 0, mode 100600
Aug 25 09:32:13 esxhost vmkernel: 11:13:16:44.102 cpu3:1041)len 8388608, nb 8 tbz 0, zla 1, bs 1048576
Aug 25 09:32:13 esxhost vmkernel: 11:13:16:44.102 cpu3:1041)FS3: 132: <END virtualdisk-flat.vmdk>

cat /etc/vmware/hostd/vmInventory.xml |grep -i vm_name |grep vmx #查找vm的配置文件
vim-cmd vmsvc/getallvms |grep -i vm_name
cat VM config file name |grep fileName #获取当前连接到VM的虚拟磁盘文件的名称,上面查出的file name (*.vmx) 

2>检查vm的vmdk文件是否被锁定;
3>检查确认vm的虚拟磁盘文件大小是否配置正确,没有被损坏;
4>更多参考KB82673;

5)检查esxi主机与VMFS6 存储卷的通信是否异常,他们之间用VAAI ATS heartbeat;通过在ESXi内核中禁用ATS heartbeat,可将与心跳相关的活动还原为旧方法。旧式方法涉及VMware ESXi内调用普通的SCSI读写来处理验证,新方法将验证步骤卸载到存储系统。

这种优化导致ESXi内核向存储系统发出的ATS命令数量显著增加,并导致存储系统负载增加。在某些情况下,使用ATS的VMFS心跳可能会失败,并出现错误的ATS错误比较,这会导致ESXi内核再次验证其对VMFS数据存储的访问。这会导致无法访问数据存储消息。 VMFS5/VMFS6存储中,默认ATS开启;以下命令执行后立即生效,不影响ESXi host OS;选项的根节点均为/VMFS3;

esxcli system settings advanced set -i 0 -o /VMFS3/UseATSForHBOnVMFS5  #禁用ATS
esxcli system settings advanced set -i 1 -o /VMFS3/UseATSForHBOnVMFS5   #启用
esxcli system settings advanced list -o /path  #验证
Get-AdvancedSetting -Entity VMHost-Name -Name VMFS3.UseATSForHBOnVMFS5 | Set-AdvancedSetting -Value 0 -Confirm:$false

Get-AdvancedSetting -Entity VMHost-Name -Name VMFS3.UseATSForHBOnVMFS5 | Set-AdvancedSetting -Value 1 -Confirm:$false

最好选择此方法恢复 VMFS 检测信号活动,而不是在使用相应存储系统时全局禁用 VAAI 或 ATS。尽管某些存储系统要求将检测信号相关的活动恢复为旧方法,它们仍能正常处理与检测信号无关的 ATS 命令,而且使用 ATS 能够带来显著的性能和扩展优势,即便不应将 ATS 用于 VMFS 检测信号。