备份大型系统卷时备份程序失败

本文针对备份大型系统卷时备份程序失败的问题提供了解决方法。

原始 KB 数: 304101

现象

尝试使用 NTBackup.exe 或使用使用 NT 备份 API 的第三方备份程序创建备份时,可能无法成功完成备份。 即使在本地服务器上运行程序,也会发生此行为。 此外,可能会遇到以下一个或多个症状:

  • 以下一个或多个错误消息显示在应用程序日志中:
    错误消息 1

    错误 1450:系统资源不足,无法完成请求的服务。

    错误 1450:/十六进制0x5aa ERROR_NO_SYSTEM_RESOURCES

    操作系统错误 1450 系统资源不足,无法完成请求的服务。

    “device”写入失败,状态 = 1450

    错误消息 2

    错误 1130:没有足够的服务器存储可用于处理此命令。

    错误 1130 / 十六进制0x46a ERROR_NOT_ENOUGH_SERVER_MEMORY

    备份或还原操作异常终止。

  • 事件 ID 2020 和事件 ID 2021 消息可能由服务器服务生成。

    备注

    通常,不会显示事件 ID 2020 和事件 ID 2021 消息。

  • 如果运行的是 Hewlett-Packard (HP) OmniBack 备份程序,可能会收到类似于以下错误消息:

    [81:78] C:\foldername\file.name

    无法读取偏移量为 57256 字节436176408(:1): ([1450]
    系统资源不足,无法完成请求的服务。

  • 如果在 Windows 任务管理器中查看 “性能 ”选项卡,你会注意到非分页内核内存较低。

备注

你可能会收到这些错误消息,原因与本文介绍的问题无关。 如果仅在备份大型系统卷时收到这些错误消息,则本文介绍的两个最可能原因就是这些错误消息。

若要帮助确定你是否遇到此问题,请启动 Windows 任务管理器,然后单击“性能”选项卡。在右下角找到内核内存(K)区域,然后记下分页的值。 当此值达到大约 160 兆字节(MB)时,可能会遇到Microsoft Windows 2000 或 Microsoft Windows NT 4.0 中出现此问题。 或者,当此值超过 160 MB 时,你可能会在 windows Server 2003 Microsoft遇到此问题。 如果已将分页池内存的注册表项设置为更高的值,则在使用分页池内存的值要高之前,您将不会遇到此问题(当分页池内存使用率达到约 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

  1. 依次单击“开始”、“运行”,在“打开”框中键入“regedit”,然后单击“确定”

  2. 找到并单击下面的注册表子项:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management

  3. 在“编辑”菜单上,指向“新建”,然后单击“DWORD 值”

  4. 键入 PoolUsageMaximum 作为条目名称,然后按 Enter。

  5. 右键单击 PoolUsageMaximum,然后单击“ 修改”。

  6. 单击“ 小数”。

  7. “值”数据 框中,键入 60,然后单击“ 确定”。

    重要

    • 使用 60 作为初始值。 如果备份未成功,请使用 40 作为值。 如果不起作用,则必须更改备份程序的行为,以减少分页池的需求。 如果值有效,可能需要将该值增加大约 25%,直到备份不起作用。 如果备份失败,请使用本文中所述的第二个注册表设置。
    • 确保此注册表设置的值不超过 60。
    • 如果使用 /3GB 交换机,请使用 40 作为初始设置。 请注意,此值是百分比值。
  8. 退出注册表编辑器。

  9. 重新启动计算机。

由于必须在最紧张的备份期间测试这些设置,因此如果不确定哪个备份消耗最多的资源,可能需要等待一个月才能完成整个备份周期。 由于这种情况,Microsoft建议先测试低值。 有关详细信息,请单击下面的文章编号,查看相应的 Microsoft 知识库文章:

312362服务器无法从系统分页池分配内存

注册表设置 2

  1. 单击“开始”,单击“运行,在“打开”框中键入 regedit,然后单击“确定”

  2. 找到并单击下面的注册表子项:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management

  3. 在“编辑”菜单上,指向 “新建”,然后单击 “DWORD 值”。

  4. 键入 PagedPoolSize 作为条目名称,然后按 Enter。

  5. 右键单击 PagedPoolSize,然后单击“ 修改”。

  6. 单击 十六进制

  7. “值”数据 框中,键入 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。

  8. 退出注册表编辑器。

  9. 重新启动计算机。

Windows NT 4.0

重要

此部分(或称方法或任务)介绍了修改注册表的步骤。 但是,注册表修改不当可能会出现严重问题。 因此,按以下步骤操作时请务必谨慎。 作为额外保护措施,请在修改注册表之前先将其备份。 如果之后出现问题,您就可以还原注册表。 有关如何备份和还原注册表的详细信息,请单击下面的文章编号,查看相应的 Microsoft 知识库文章:
322756 如何备份和还原 Windows 中的注册表

备注

必须使用 Windows NT 4.0 Service Pack 6a。

解决第一个问题

  1. 启动注册表编辑器(Regedt32.exe)。

  2. 找到并单击下面的注册表子项:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory_Management

  3. 在“编辑”菜单上,单击“添加值”,然后添加以下注册表值:
    值名称:未使用的FileCache
    数据类型:REG_DWORD
    Radix:Decimal
    值数据:15

    备注

    此数字表示可供未使用的段使用的池百分比。 值为 0 表示系统将使用类似于 Windows NT 4.0 Service Pack 3 的默认行为。 值为 5 到 40 表示系统将根据池使用情况剪裁未使用的文件缓存。 5 是最激进的(也就是说,它增加缓存的大小最少),40 是最少攻击性的(也就是说,它允许缓存在修剪缓存之前增长最大。

    重要

    • 使用 15 作为初始值。 如果备份未成功,请使用 5 作为值。 如果不起作用,则必须更改备份程序的行为以减少分页池的需求,或者必须升级到 Windows 2000,其中分页池的两倍以上可用(有关详细信息,请参阅“Windows 2000”部分)。 如果此值有效,可能需要将其增加大约 20%,直到备份失败。 如果备份失败,请使用本文中所述的第二个注册表设置。

    • 如果使用 /3GB 交换机,请使用 5 作为初始设置。

  4. 退出注册表编辑器。

  5. 重新启动计算机。

由于必须在最紧张的备份期间测试这些设置,因此如果不确定哪个备份消耗最多的资源,可能需要等待一个月才能完成整个备份周期。 因此,Microsoft建议先测试低值。

解决第二个问题

一种可能的解决方法是限制备份,以便一次备份一个文件。 它可能或可能不起作用,具体取决于要备份的文件的大小。 (预计它适用于小于 180 GB 的文件 [GB]。)如果要备份多个大型文件,但每个文件小于 180 GB,还可以尝试此分辨率。 按照步骤解决第一个问题。 对于大于 180 GB 的文件,不存在解决方法。 因此,必须将系统升级到 Windows 2000。 如果尝试以解决方法远程备份系统,将遇到相同的问题。

  1. 启动注册表编辑器(Regedt32.exe)。

  2. 找到并单击下面的注册表子项:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory_Management

  3. 在“编辑”菜单上,单击“添加值”,然后添加以下注册表值:
    值名称:DisablePagedPoolHint
    数据类型:REG_DWORD
    Radix:Decimal
    值数据:1

  4. 退出注册表编辑器。

  5. 重新启动计算机。

Status

Microsoft 已经确认这是一个列于“适用范围”部分的 Microsoft 产品问题。

详细信息

NTBackupread 和 NTBackupwrite 都使用缓冲 I/O。 这意味着 Windows NT 缓存针对流执行的 I/O。 它也是唯一将备份文件元数据的 API。 此缓存从有限的资源(即池和非分页池)拉取。 因此,大量大型文件或文件可能会导致池资源运行不足。

多个因素可能会耗尽分页池内存的供应。 可以打开池标记并采取 poolsnaps 不同的时间间隔,以帮助了解哪个驱动程序耗尽分页池内存。 poolsnaps如果指示 MmSt 标记(Mm 节对象原型 PTE)是最大的使用者,并且超过 80 MB,则服务器上可能会打开大量文件。

计算机上的可能最大分页池内存为 Windows 2000 中分页池的 343 MB,分页池键设置为 FFFFFFFF;如果密钥不存在,则为 164 MB。 Windows NT 中可能的最大分页池内存为 192 MB。 默认情况下,当系统达到总分页池的 80% 时,内存管理器会尝试剪裁已分配的分页池内存。 例如,343 MB 的 80% 为 274 MB。 如果内存管理器无法快速剪裁以满足需求,则可能会发生本文的“症状”部分中列出的事件。 如果优化内存管理器以提前启动修整过程(例如,达到 40%),则计算机可以在突然高峰使用期间跟上分页池需求,使其不会耗尽分页池内存。

本文中提到的第三方产品由 Microsoft 以外的其他公司提供。 对于这些产品的性能或可靠性,Microsoft 不作任何暗示保证或其他形式的保证。