一、windows系统蓝屏又称蓝屏死机(Blue Screen of Death,简称BSOD),是微软的 Windows 系列操作系统在无法从一个系统错误中恢复过来时,为保护电脑数据文件不被破坏而强制显示的屏幕图像。 伴着云桌面的普及,许多物理PC场景下的系统问题也随之迁移到云桌面运维层面,windows蓝屏就是其中的一大运维阻碍。因云桌面的运维与传统运维有所差异,一些技术能力较弱的IT客户频繁转向桌面云提供商寻求帮助,为提升客户满意度,需云桌面技服同事掌握相应的windows蓝屏排查方法,协助客户解决windows自身蓝屏问题。 二、 1. 掌握核心内存转储Dump日志无法生成的处理方法; 2. 掌握在虚拟机无法恢复场景下,winPE获取dump日志的方法; 3. 掌握获取虚拟机QEMU日志的方法。 三、蓝屏的全称是Blue Screen Of Death,简称BSOD。是windows系统检测到无法恢复的错误,为保护电脑数据文件不被破坏强制终止系统,并且提示如下错误信息。 一般是系统模块或者第三方驱动调用函数KeBugCheckEx()来发起蓝屏。也可以用函数KeRegisterBugCheckCallback()注册回调函数,触发蓝屏时做一些处理。如设置硬件的状态。 四、蓝屏问题处理思路 1、观察到蓝屏现象获取蓝屏代码,一般有蓝屏代码,但也有极少数蓝屏没蓝屏代码。遇到蓝屏的问题,优先恢复虚拟机保障正常使用在查原因,可以取消Fast IO,查看已知案例等等方式优先恢复。 2、确认蓝屏前后虚拟机做了什么操作,安装了什么软件或者驱动等。 3、获取蓝屏的dump文件,确认蓝屏原因。 具体的排查思路如下图: 排查: 1. 蓝屏代码与可疑模块信息确认 系统蓝屏界面示例如下图所示,通常在这个界面会包含蓝屏代码、导致蓝屏的可疑模块名以及生成dump文件进度三样信息,这三样也是我们信息收集时所关注的信息。 a. 蓝屏代码:即停机码(stop code),在蓝屏界面一般以“***STOP:”开头,是一串十六进制数,用于识别已发生错误的类型。通过它我们可以在KB库、网上搜索引擎进行检索,确认此蓝屏问题的常见原因以及是否有解决方案,为排查蓝屏问题指明方向。 b. 可疑模块:在显示蓝屏代码的下一行,一般会显示导致此次蓝屏问题的可疑模块。这个模块一般就是导致蓝屏的根因所在。通过网上检索是否有此模块导致蓝屏问题的案例,系统内找到此模块查看其属性确认模块所属厂商,基本可以帮助快速定位蓝屏原因,而如果这个可以模块是我们自己的,则可以直接找专家/研发分析确认是否是bug或与系统其他模块有兼容性冲突(此信息有时不会显示,此时就需通过dump文件进行分析确认)。 c. 生成dump文件进度:当进度为100时,表示记录此次蓝屏现场信息的dump文件已经生成完毕,可以进行重启。若在进度完成前重启则可能导致dump文件生成失败影响后续获取dump文件分析蓝屏原因。 2. Windbg帮助文档查询蓝屏可能原因 蓝屏代码有很多,导致蓝屏的原因也有成千上万种,有时通过网络直接检索蓝屏代码可能不能找到我们所需的信息,那么此时我们怎么初步确认导致XXXX蓝屏的原因呢?此时我们可以通过windbg帮助文档,查询到蓝屏的所有可能原因,辅助后续的分析排查。 Windbg帮助文档检索蓝屏代码语法格式为:bug check + [ ,如查询0x7E蓝屏原因就键入bug check 0x7E。 以0x7F蓝屏问题为例检索结果如下: Windbg对于0x7F这类常见蓝屏代码的一般解释的非常详细,列出了常见与不常见的原因, 0x00000000:表示一个DIV指令被执行,并且除数为零,可能是内存损坏、其他硬件问题或软件故障等导致的此错误。 0x00000006:表示无效的操作码,指示处理器试图执行无效的指令。当指令指针被损坏,指向错误的位置时,通常会发生此错误,造成此错误的最常见原因是硬件内存损坏。 以0x109蓝屏为例检索结果如下: 对于0x109这类不常见的蓝屏代码,我们通过检索windbg帮助文档可以查看导致这个蓝屏的可能原因。对于0x109的检索结果,其中1/2/3参数保留没有使用,参数4表示:区域损坏的类型,下面罗列了一些区域损坏的可能原因: 0 x0:一个通用的数据区域可能损坏了。 0 x1一个函数被修改或基于itanim的函数位置被修改了。 0 x6:一个调试程序被修改了。 0 x7:一个关键的MSR寄存器被修改了。 3. 配置及获取Dump文件 有dump文件就能知道是哪个模块中的哪个函数中的那条指令引发了蓝屏。系统蓝屏后就会自动生成dump文件,所以获取dump文件很关键,没有dump文件意味着对蓝屏问题一无所知。是不是已知问题也不好确定。那么我们虚拟机怎么生成dump呢? 4.虚拟机设置生成dump 一般虚拟机在如下所示的目录下设置和获取dump文件。我们虚拟机默认将完全内存转储取消了,若是需要开可以联系研发修改,一般情况下核心内存转储即可分析出蓝屏的原因。 5.虚拟机获取dump 当虚拟机蓝屏了,我们一般在C:\Windows\目录下获取dump日志,但有时候没有生成MEMORY.DMP怎么办?一般dump没有生成我们可以通过两种方式进行设置,若都设置之后还是无法生成dump,就建议获取nimidump进行分析,但是minidump记录的信息不太详细可能无法分析出具体原因。 1、在VMP上取消虚拟机异常是重启的选项,如下图所示配置。蓝屏发生的时候,可能会出现系统的dump日志还没有转储完成,这个时候触发了异常重启机制,导致dump生成失败。 2、从VDI5.0开始viostor驱动添加了一个注册表项可能导致驱动无法生成dump文件,修改虚拟机注册表以生成dump,如果存在下面注册表值,则将IDESNCompat的值改为0。 注册表路径如下:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\viostor\Parameters\IDESNCompat
6. 使用PE工具 在开机蓝屏的场景下,常常会直接进不了系统,如果安全模式也无法进入的话,在需要获取dump文件以及对系统内文件做修改时, 就要通过WinPE精简操作系统启动实现。 VMP平台自带了WinPE镜像,VMP平台上的虚拟机通过WinPE启动操作方法如下: A. 通过pshell/xshell等工具登录虚拟机所在主机。 B. 如果ISO目录下没有WinPE镜像,则将主机自带的WinPE拷贝过去。 (1)虚拟机镜像在本地上,则执行命令: cp /sf/data/local/iso/vmtools/tftproot/WinPE /sf/data/local/iso/WinPE.iso (2)虚拟机镜像在虚拟存储上,则执行命令: cp /sf/data/local/iso/vmtools/tftproot/WinPE /sf/data/vs_rep2/WinPE.iso
注:对于记不住vmp上WinPE镜像存放位置的,可使用find / -iname winpe命令进行检索其存放路径。 C. 先将虚拟机关机,然后编辑,点击添加硬件添加CD/DVD。 D. 编辑虚拟机启动顺序,从光驱启动,从而启动WinPE系统。 7. 获取虚拟机qemu日志 蓝屏可能由于虚拟机内部某个模块引起,也可能由硬件问题引起。在VMP平台上虚拟机硬件是由qemu虚拟仿真的,所以排查硬件问题,可以查看虚拟机qemu日志是否有报错或告警。
Qemu日志查看方法: A. 使用xshell/pshell登陆虚拟机运行位置所在主机。 B. cat /sf/log/today/sfvt_qemu_vmid.log。其中vmid可通过VMP平台上虚拟机管理页面的URL获取。如果查看的日志不再今天today替换成对应日期即可。最多可查看一个月的日志。 常见的蓝屏代码和处理方法 虚拟机蓝屏代码7B | | | Windows的注册表丢失了导致蓝屏,目前研发同事已经恢复,注册表丢失可能是的由于Windows的断电引起的,跟客户这边沟通,客户这边确实也存在断电过,经常有电源重启的情况 | | | | | | | 蓝屏代码是0x00000050 0x0000005E | | | | | | | usguard.sys导致的蓝屏,百度查知是UC浏览器 | | 定位是UniAccessAgent 这个软件导致的蓝屏。 | | | 虚拟机蓝屏了,0x00000050,srv.sys | 中毒了,打勒索病毒补丁包或者开启Windows更新 | | 根据文档排查,,到vmp后台把自带的PE镜像拷贝到ISO目录下加载PE镜像进入虚拟机,根据文档操作,之后修改后台配置文件,把fastio磁盘和网络改为非fastio, 选择最近一次正确配置,正常进入后,再开启FASTIO,正常。 | | | 打开excel或者浏览器多就会蓝屏(0x00000050,pqk qqm.sys) | win7虚拟机2[size=12.0000pt]核4G内存,修改成4核8G没有再蓝屏 | | a. 卸载JRE(jave 2 Runtime Environment SE v1.4.1_07),重启VM,然后重新安装此组件。 | | b. 关闭平台的ddraw渲染功能(关闭办法: 向c:\\windows\system32\sangfor_disable_directdraw.dat文件中写入数字1,然后重启VM)。 | | |
|