我收到了一个新的 Windows 7 工作站(替换旧的 Windows 7 工作站)并开始遇到从 Windows XP 机器访问我的文件共享的错误。
我遇到了各种错误,这些错误似乎时有发生(有时它可以正常工作几个小时)。其中一个是:
存储空间不足,无法处理此命令
我还发现当应用程序尝试从共享访问大量文件时,打开文件会随机失败。
微软就此主题发布了一篇神秘的知识库文章,建议增加IRPStackSize
修复次数,但没有任何解释说明为什么需要这样做。
我发现IRPStackSize
在我的工作站和客户端 XP 机器上增加似乎可以解决这些问题。
但是,我为什么需要这样做?为什么一台 Win7 机器有这个问题而另一台没有?它们都在同一个域中,因此组策略将相同的设置推送给它们,其中一些我已经手动验证过。我怎么知道合适的值是什么?或者我应该设置为最大值 50?
答案1
以下是我了解到的信息:
“我还发现当应用程序尝试从共享访问大量文件时,打开文件时会出现随机失败的情况。”
Windows 使用分层 I/O 模型,其中驱动程序相互连接并利用底层驱动程序的服务来执行其工作。利用彼此服务的驱动程序层通常称为“驱动程序堆栈”。
特定堆栈中的过滤器过多(每个请求经过防病毒层、基本过滤引擎、ntfs 等层),因此默认 IRPStackSize 不够大。增加默认值可让所有过滤器拥有自己的 I/O 堆栈位置,这样每个人都会满意。这不是一般的 Windows 问题,而只是系统中某些驱动程序的限制。
考虑将频繁使用的文件共享托管在文件服务器上,然后阅读2008 R2 调整指南,特别是有关调整文件服务器性能的部分:http://msdn.microsoft.com/en-us/windows/hardware/gg463392