背景信息:
1.Azure 虚拟机与Azure File位于同一区域
2.同一Azure File可以挂载到别的同型号的虚拟机上使用,唯独挂载到问题机器(test01)时出现如下报错:System Error 1231
排查结果:
1.经查询,在微软论坛上找到了有关类似问题的说明
https://social.msdn.microsoft.com/Forums/en-US/656dfaf2-2e57-4b49-b232-c91837f40715/mapped-drive-to-azure-file-storage-gives-system-error-1231
https://pleasereleaseme.net/azure-vm-reporting-network-location-cannot-reached/
2.根据1的说明,该问题是由于虚拟机设备下加载了过多的网络适配器引起的
3.经核实,在device--View--show hidden devices--Network adapters下确实发现了大量的隐藏网络适配器,并且当前网络适配器的Ethernet的序号确实也异常高
4.接下来,我们的任务是需要删除多余的隐藏网络适配器,如果手动删除,由于隐藏网络适配器数量太大,会花费大量的时间。在这儿我们使用脚本批量删除
批量删除操作方法:
a.在问题虚拟机中安装WDK ;
https://docs.microsoft.com/zh-cn/windows-hardware/drivers/download-the-wdk#download-iconimagesdownload-installpng-step-2-install-wdk-for-windows-10-version-1803;
按照默认设置进行安装
b.在虚拟机中下载Device Management module,解压并在Powershell中导入;
https://blogs.technet.microsoft.com/wincat/2012/09/06/device-management-powershell-cmdlets-sample-an-introduction/
操作命令:
PS C:\windows\system32> Set-Location C:\Powershell\Release\
PS C:\Powershell\Release> Import-Module .\DeviceManagement.psd1 -Verbose
执行截图:
c.列出隐藏设备:
操作命令:
Get-Device -ControlOptions DIGCF_ALLCLASSES | Sort-Object -Property Name | Where-Object {($_.IsPresent -eq $false) -and ($_.Name -like “Microsoft Hyper-V Network Adapter*”) } | ft Name, DriverVersion, DriverProvider, IsPresent, HasProblem, InstanceId -AutoSize
d.获取Hyper-V隐藏网络设备
操作命令:
$hiddenHypVNics = Get-Device -ControlOptions DIGCF_ALLCLASSES | Sort-Object -Property Name | Where-Object {($_.IsPresent -eq $false) -and ($_.Name -like “Microsoft Hyper-V Network Adapter*”) }
e.设置路径至devcon.exe下,并使用以下循环语句删除隐藏设备;
操作命令:
Set-Location 'C:\Program Files (x86)\Windows Kits\10\Tools\x64\'
ForEach ($hiddenNic In $hiddenHypVNics) { $deviceid = "@" + $hiddenNic.InstanceId; .\devcon.exe /r remove $deviceid }
备注:
1.上述步骤操作完成后,正常情况下,虚拟机应该可以挂载Azure File了 ,执行完上述操作后,建议重启下虚拟机
2.如果看着当前网络适配器的Ethernet序号有点高(别扭),你可以按照如下操作uninstall掉当前网络适配器,虚拟机会中断,随后重启虚拟机,一切就会恢复正常