Windows Server崩溃的方式有很多种但绝大多数都属于三大类旧版杀毒软件不兼容的存储驱动程序和过多的过滤驱动在分析了来自世界各地近十年差不多次的系统崩溃后我可以确认这些都是你想要避免的隐患 下面让我们来详细看一下这三种服务器系统崩溃的细节并分别介绍一下避免它们的最佳方法 杀毒软件到目前为止最常见的Windows Server崩溃是由旧版杀毒软件所致所有的杀毒软件都是使用设备驱动程序更具体地说是过滤驱动来拦截I / O(读/写)请求并执行额外的检查杀毒软件驱动程序将检查的内容与已知的病毒定义文件进行对比以确保没有感染病毒 过滤驱动包含内核模式的代码它们会与操作系统底层的内核函数和数据结构相互作用这些函数和数据结构包括那些预期会在相应设备驱动调用时呈现的预定义参数和数据类型如果函数传递的数据类型错误或参数数目不对就会发生导致内核模式中系统崩溃的错误 当开发人员在不同版本的操作系统之间(如服务包更新或新版本操作系统发布)修改这些内核函数或数据结构时问题就出现了虽然微软在测试设备驱动程序对所有操作系统改变的兼容性方面做得很好但它显然没有测试第三方设备驱动程序来确保它们可兼容因此当旧版杀毒驱动程序偶然遭遇了这些更改最终就会导致系统崩溃其它过滤驱动也容易受到这种问题影响但是杀毒软件驱动程序是最容易受影响的一个 让我们来看一个例子 下面是一个Stop xE bugcheck KERNEL_MODE_EXCEPTION_NOT_HANDLED的系统崩溃在Windows debugger中用命令!analyze –v显示了它的堆栈模式从下往上读我们就看到一个NtCreateFile的函数调用最终引入了buggydrv从而导致bugcheck使用命令!lmi buggydrv可以显示出驱动程序的日期是年而操作系统Windows Server SP是年发布的现在我们就知道旧版的杀毒驱动程序并没有对新版的操作系统进行测试 在这个例子中此种系统崩溃已经被厂商标识为已知问题并文档化新版杀毒软件已经可以用来避免系统崩溃事实上绝大多数你遇到的Windows Server崩溃都曾在别人身上发生过它们的解决方法通常已经记录在互联网上的某个地方因此很重要的一点是一定要记住即使只是一个服务包更新在更新操作系统时也该第一时间与第三方厂商确认是否有相应的软件更新 存储驱动程序不兼容另一种最常见的系统崩溃是由不兼容的存储驱动程序所致如你所知第三方存储厂商提供设备驱动程序来控制它们的主机总线适配器(HBA)并用于访问存储设备像QlogicEmulex和惠普(HP)等厂商都有不同的设备驱动程序但它们都依赖于微软的Storport驱动程序Storport驱动程序提供一套通用程序这些特定的厂商驱动程序在执行I / O操作时使用它们 这种问题的出现方式与杀毒软件驱动程序的不兼容性很相似当厂商修改其专用的驱动程序时它们必须重新与当前版本的Storport进行测试以确保仍然兼容同样的道理当更新Storport版本时所有的HBA驱动程序也必须重新测试以保证它们仍然与新版的Storport驱动程序兼容在Windows Server 中当你需要考虑Storport的多个修补程序时这才是一个真正的挑战 经验法则是在更新Storport驱动之前与你的第三方厂商确认HBA驱动程序是否有相应的更新反之亦然如何才能知道哪个存储驱动程序依赖于Storport?幸运的是有一个叫Dependency Walker(dependsexe)的免费工具可以揭示驱动程序间的依赖关系 下载并解压缩后运行dependsexe使用文件下拉菜单选择你所关注的驱动程序在这个例子中我选择了驱动程序Hpcissssys它应用于HP的磁盘阵列正如你下面可以看到的该工具显示驱动程序Hpcisss依赖于STORPORTSYS和Ntoskrnlexe 图一Dependency Walker 过多的过滤驱动第三种最常见的Windows Server崩溃类型与安装了太多的过虑驱动时的堆栈溢出条件相关任何可以拦截I / O请求并执行额外功能的驱动程序都被认为是一个过滤驱动我们已经知道杀毒驱动程序就是一个过滤驱动其它过虑驱动包括磁盘配额管理磁盘镜像和备份代理等在这里我只列举了几个 虽然安装多个过滤驱动本身不会有问题但是在当这些驱动程序以递归的方式相互调用并因此耗尽了有限的内核堆栈空间时情况就会发生改变根据计算机体系结构((x= KBx= KB)所有设备驱动程序使用的内核堆栈空间是有限的当内核堆栈空间耗尽时就会出现一个Stop xF bugcheck导致系统崩溃就像微软数百篇文档的描述一样 根本没有办法提供额外的内核堆栈空间来容纳更多的过虑驱动唯一的选择是识别这些过滤驱动禁用或卸载其中不需要的那些有一个内置在Windows Server操作系统中的工具叫FLTMC(过滤器管理器控制程序)它可以让你识别出安装的过滤驱动 图二FLTMC工具 正如你看到的有很多原因会导致Windows Server崩溃但是绝大多数服务器停机都是由上述的原因造成的你完全可以通过两种方式解决这些问题它们是在升级Windows操作系统或更新相关的热修补程序的同时更新第三方驱动程序和限制未使用的过滤驱动的数量 |