Windows Server三大崩溃及避免方式
- +1 你赞过了
Windows Server崩溃的方式有很多种,但绝大多数都属于三大类:旧版杀毒软件、不兼容的存储驱动程序和过多的过滤驱动。在分析了来自世界各地近十年差不多1000次的系统崩溃后,我可以确认这些都是你想要避免的隐患。
下面让我们来详细看一下这三种服务器系统崩溃的细节,并分别介绍一下避免它们的最佳方法。
杀毒软件
到目前为止,最常见的Windows Server崩溃是由旧版杀毒软件所致。所有的杀毒软件都是使用设备驱动程序,更具体地说是“过滤驱动”来拦截I / O(读/写)请求并执行额外的检查。杀毒软件驱动程序将检查的内容与已知的病毒定义文件进行对比,以确保没有感染病毒。
过滤驱动包含内核模式的代码,它们会与操作系统底层的内核函数和数据结构相互作用这些函数和数据结构包括那些预期会在相应设备驱动调用时呈现的预定义参数和数据类型。如果函数传递的数据类型错误或参数数目不对,就会发生导致内核模式中系统崩溃的错误。
当开发人员在不同版本的操作系统之间(如服务包更新或新版本操作系统发布)修改这些内核函数或数据结构时,问题就出现了。虽然微软在测试设备驱动程序对所有操作系统改变的兼容性方面做得很好,但它显然没有测试第三方设备驱动程序来确保它们可兼容。因此,当旧版杀毒驱动程序偶然遭遇了这些更改,最终就会导致系统崩溃。其它过滤驱动也容易受到这种问题影响,但是杀毒软件驱动程序是最容易受影响的一个。
让我们来看一个例子:
下面是一个Stop 0x8E bugcheck -KERNEL_MODE_EXCEPTION_NOT_HANDLED的系统崩溃。在Windows debugger中用命令!analyze –v显示了它的堆栈模式。从下往上读,我们就看到一个NtCreateFile的函数调用,最终引入了buggydrv,从而导致bugcheck.使用命令!lmi buggydrv可以显示出驱动程序的日期是2006年,而操作系统Windows Server 2003 SP2是2007年发布的。现在我们就知道,旧版的杀毒驱动程序并没有对新版的操作系统进行测试。
nt!KeBugCheckEx+0x1b
nt!KiDispatchException+0x3a2
nt!CommonDispatchException+0x4a
nt!Kei386EoiHelper+0x186
buggydrv+0x13059 <--导致系统崩溃的过滤驱动
buggydrv+0x8390
buggydrv+0x8809
buggydrv+0x2940
nt!IofCallDriver+0x45
nt!IopParseDevice+0xa35
nt!ObpLookupObjectName+0x5b0
nt!ObOpenObjectByName+0xea
nt!IopCreateFile+0x447
nt!IoCreateFile+0xa3
nt!NtCreateFile+0x30 <--操作系统调用CreateFile
nt!KiFastCallEntry+0xfc
在这个例子中,此种系统崩溃已经被厂商标识为已知问题并文档化,新版杀毒软件已经可以用来避免系统崩溃。事实上,绝大多数你遇到的Windows Server崩溃,都曾在别人身上发生过,它们的解决方法通常已经记录在互联网上的某个地方。因此,很重要的一点是,一定要记住即使只是一个服务包更新。在更新操作系统时也该第一时间与第三方厂商确认是否有相应的软件更新。
最新资讯
热门视频
新品评测