本文针对备份大型系统卷时备份程序失败的问题提供了解决方法。
原始 KB 数: 304101
现象
尝试使用 NTBackup.exe 或使用使用 NT 备份 API 的第三方备份程序创建备份时,可能无法成功完成备份。 即使在本地服务器上运行程序,也会发生此行为。 此外,可能会遇到以下一个或多个症状:
以下一个或多个错误消息显示在应用程序日志中:
错误消息 1错误 1450:系统资源不足,无法完成请求的服务。
错误 1450:/ 十六进制 0x5aa ERROR_NO_SYSTEM_RESOURCES
操作系统错误 1450 系统资源不足,无法完成请求的服务。
“device”写入失败,状态 = 1450
错误消息 2
错误 1130:没有足够的服务器存储可用于处理此命令。
错误 1130 / 十六进制0x46a 服务器内存不足错误
备份或还原操作异常终止。
事件 ID 2020 和事件 ID 2021 消息可能由服务器服务生成。
注意
通常,不会显示事件 ID 2020 和事件 ID 2021 消息。
如果运行的是 Hewlett-Packard (HP) OmniBack 备份程序,可能会收到类似于以下错误消息:
[81:78] C:\foldername\file.name
无法读取从偏移量436176408处开始的57256字节(:1):([1450]
系统资源不足,无法完成请求的服务。如果在 Windows 任务管理器中查看 “性能 ”选项卡,你会注意到非分页内核内存较低。
注意
你可能会收到这些错误消息,原因与本文介绍的问题无关。 如果仅在备份大容量系统卷时收到这些错误消息,则其两个最可能的原因是本文所描述的。
若要帮助确定你是否遇到此问题,请启动 Windows 任务管理器,然后单击“性能”选项卡。在右下角找到内核内存(K)区域,然后记下分页的值。 当此值达到大约 160 兆字节(MB)时,可能会遇到Microsoft Windows 2000 或 Microsoft Windows NT 4.0 中出现此问题。 当此值超过 160 MB 时,你可能会在 Microsoft Windows Server 2003 中遇到此问题。 如果已将分页池内存的注册表项设置为更高的值,则在使用分页池内存的值要高之前,您将不会遇到此问题(当分页池内存使用率达到约 80% 的设置值时,可能会出现此问题)。 如果为池标记启用了 gflags 设置,并且使用 Poolmon 实用工具,则会看到 MmSt 标记的使用率增加。 它是用于映射用于跟踪共享文件的操作系统内存的池标记。
原因
此问题的两个原因都相关。 首先列出了更频繁的原因:
打开的文件数比内存缓存管理器可以处理的文件多。 因此,缓存管理器耗尽了可用的分页池内存。
备份程序尝试备份一个文件,该文件的大小超过了备份 API 在该操作系统版本中可以访问的限制。 结果相同(即分页池已耗尽)。
注意
第二个问题更有可能发生在基于 Windows NT 4.0 的Microsoft计算机上。
每个问题的解决方法因你在 Windows Server 2003、Microsoft Windows 2000 或 Windows NT 4.0 中遇到问题而异。
决议
Windows Server 2003 和 Windows 2000
重要
此部分(或称方法或任务)介绍了修改注册表的步骤。 但是,注册表修改不当可能会出现严重问题。 因此,按以下步骤操作时请务必谨慎。 作为额外保护措施,请在修改注册表之前先将其备份。 如果之后出现问题,您就可以还原注册表。 有关如何备份和还原注册表的详细信息,请单击下面的文章编号,查看相应的 Microsoft 知识库文章:
322756 如何备份和还原 Windows 中的注册表
可能需要更改两个注册表设置。 始终要更改第一个设置。 根据系统的配置,可能还需要更改第二个设置。
注册表设置 1
依次单击“开始”、“运行”,在“打开”框中键入“regedit”,然后单击“确定”。
找到并单击下面的注册表子项:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management在“编辑”菜单上,指向“新建”,然后单击“DWORD 值”。
键入 PoolUsageMaximum 作为条目名称,然后按 Enter。
右键单击 PoolUsageMaximum,然后单击“ 修改”。
单击“小数”。
在 “值”数据 框中,键入 60,然后单击“ 确定”。
重要
- 使用 60 作为初始值。 如果备份未成功,请使用 40 作为值。 如果仍然不起作用,您需要调整备份程序的设置,以降低分页内存池的需求。 如果值有效,可能需要将该值增加大约 25%,直到备份停止工作。 如果备份失败,请使用本文中所述的第二个注册表设置。
- 确保此注册表设置的值不超过 60。
- 如果使用 /3GB 交换机,请使用 40 作为初始设置。 请注意,此值是百分比值。
退出注册表编辑器。
重新启动计算机。
由于必须在最紧张的备份期间测试这些设置,因此如果不确定哪个备份消耗最多的资源,可能需要等待一个月才能完成整个备份周期。 由于这种情况,Microsoft建议先测试低值。 有关详细信息,请单击下面的文章编号,查看相应的 Microsoft 知识库文章:
312362 服务器无法从系统分页池分配内存
注册表设置 2
单击“开始”,单击“运行”,在“打开”框中键入 regedit,然后单击“确定”
找到并单击下面的注册表子项:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management在“编辑”菜单上,指向 “新建”,然后单击 “DWORD 值”。
键入 PagedPoolSize 作为条目名称,然后按 Enter。
右键单击 PagedPoolSize,然后单击“ 修改”。
单击 十六进制。
在 “值”数据 框中,键入 FFFFFFFF 的值,然后单击“ 确定”。
重要
将 PagedPoolSize 设置为 0xFFFFFFFF(-1)会将最大分页池而不是其他资源分配给计算机。 这通常需要在域控制器或终端服务器上。 默认情况下,大多数 Windows 2000 系统似乎限制为 160 MB 的分页池最大大小。 可以通过从公共网站下载内核调试器并在要使用的调试器中打开内核转储来验证这一点。 要使用的命令是 !vm 。 例如,这显示分页池的最大值为163840 KB。 添加此值可减少系统上可用的页表条目(PTE),并将分页池的最大值扩展到 Windows 2000 中的 343 MB。 在 Windows Server 2003 中,分页池的最大尺寸可以扩展到更大的数值。
Windows Server 2003 的默认和最大分页池值比 Windows 2000 中的值要大得多。 通常,Windows Server 2003 值至少比 Windows 2000 中找到的值高出 50%。 这些较大的值使得你更不可能遇到分页池值可能导致的本文中所述的问题。 但是,此问题仍然存在。
此值限制可用的系统 PTE。 PTE 是系统使用的另一个无关系统资源。 此设置可能会导致操作系统意外停止,并在启动时在蓝屏上显示停止0x3F错误。 可以使用系统重启菜单或恢复控制台上的“上次已知良好”选项恢复系统。 使用性能监视器查看免费系统页表条目计数器。 如果观察到的自由值超过 40,000,则可以添加 PagePoolSize 设置。
在同时使用 /3GB 和 /PAE 时,不要在未进行充分测试的情况下进行配置设置,确保已明确环境中所需的系统 PTES 数量。 你可能会看到 10,000-20,000 免费范围内的值。 利用文档来配置分页池内存,但不要低于 10,000 个可用系统 PTE。 如果使用 /3GB 开关,请不要将其设置为任何其他值。 唯一支持的值是 0、0A000000 和 FFFFFFFF。
退出注册表编辑器。
重新启动计算机。
Windows NT 4.0
重要
此部分(或称方法或任务)介绍了修改注册表的步骤。 但是,注册表修改不当可能会出现严重问题。 因此,按以下步骤操作时请务必谨慎。 作为额外保护措施,请在修改注册表之前先将其备份。 如果之后出现问题,您就可以还原注册表。 有关如何备份和还原注册表的详细信息,请单击下面的文章编号,查看相应的 Microsoft 知识库文章:
322756 如何备份和还原 Windows 中的注册表
注意
必须使用 Windows NT 4.0 Service Pack 6a。
解决第一个问题
启动注册表编辑器(Regedt32.exe)。
找到并单击下面的注册表子项:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory_Management在“编辑”菜单上,单击“添加值”,然后添加以下注册表值:
值名称:未使用的文件缓存
数据类型:REG_DWORD
基数:十进制
数据值:15注意
此数字表示未使用的部分可以消耗的池百分比。 值为 0 表示系统将使用类似于 Windows NT 4.0 Service Pack 3 的默认行为。 值为 5 到 40 表示系统将根据池使用情况剪裁未使用的文件缓存。 5 是最激进的(也就是说,它增加缓存的大小最少),而 40 是最不激进的(也就是说,它允许缓存在修剪缓存之前增长到最大)。
重要
使用 15 作为初始值。 如果备份未成功,请使用 5 作为值。 如果这样不起作用,则必须更改备份程序的行为以减少分页池内存的需求,或者必须升级到 Windows 2000,其中可用的分页池内存是以前的两倍以上(有关详细信息,请参阅“Windows 2000”部分)。 如果此值有效,可能需要将其增加大约 20%,直到备份失败。 如果备份失败,请使用本文中所述的第二个注册表设置。
如果使用 /3GB 交换机,请使用 5 作为初始设置。
退出注册表编辑器。
重新启动计算机。
由于必须在最紧张的备份期间测试这些设置,因此如果不确定哪个备份消耗最多的资源,可能需要等待一个月才能完成整个备份周期。 因此,Microsoft建议先测试低值。
解决第二个问题
一种可能的解决方法是限制备份,以便一次备份一个文件。 它可能或可能不起作用,具体取决于要备份的文件的大小。 (预计它适用于小于 180 GB 的文件 [GB]。)如果要备份多个大型文件,但每个文件小于 180 GB,还可以尝试此分辨率。 按照步骤解决第一个问题。 对于大于 180 GB 的文件,不存在解决方法。 因此,必须将系统升级到 Windows 2000。 如果尝试以解决方法远程备份系统,将遇到相同的问题。
启动注册表编辑器(Regedt32.exe)。
找到并单击下面的注册表子项:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory_Management在“编辑”菜单上,单击“添加值”,然后添加以下注册表值:
值名称:DisablePagedPoolHint
数据类型:REG_DWORD
基数:十进制
值数据:1退出注册表编辑器。
重新启动计算机。
状态
Microsoft 已经确认这是一个列于“适用范围”部分的 Microsoft 产品问题。
详细信息
NTBackupread 和 NTBackupwrite 都使用缓冲 I/O。 这意味着 Windows NT 缓存针对流执行的 I/O。 它也是唯一将备份文件元数据的 API。 此缓存从有限的资源中获取:即,内存池和非分页池。 因此,大量文件或大型文件可能会导致池资源运行不足。
多个因素可能会耗尽分页池内存的容量。 可以开启池标记功能,并在不同的时间间隔采用 poolsnaps,以帮助您了解哪个驱动程序耗尽分页池内存。 如果 poolsnaps 表明 MmSt 标记(Mm 节对象原型 PTEs)是最大的资源使用者,并且超过 80 MB,则服务器上可能打开了大量文件。
计算机上的可能最大分页池内存为 Windows 2000 中分页池的 343 MB,分页池键设置为 FFFFFFFF;如果密钥不存在,则为 164 MB。 Windows NT 中可能的最大分页池内存为 192 MB。 默认情况下,当系统达到总分页池的 80% 时,内存管理器会尝试剪裁已分配的分页池内存。 例如,343 MB 的 80% 为 274 MB。 如果内存管理器无法快速剪裁以满足需求,则可能会发生本文的“症状”部分中列出的事件。 如果将内存管理器调整为更早启动修整过程的时间(例如,当其达到 40% 时),则计算机可以在突然的高峰使用期间满足持续的分页池需求,避免耗尽分页池内存。
本文中提到的第三方产品由 Microsoft 以外的其他公司提供。 对于这些产品的性能或可靠性,Microsoft 不作任何暗示保证或其他形式的保证。