当页面文件与操作系统驱动器分离时,为什么Windows 7不会记录崩溃细节,我可以对此做些什么吗?


5

我有专门用于虚拟内存分页文件的辅助硬盘(单独的物理设备,而不是逻辑分区)。驱动器比我的RAM大3.5倍,所以它足够大。

当我配置Windows 7的虚拟内存以将分页文件放在第二个硬盘驱动器上时 与操作系统相同的驱动器,我警告说,

如果禁用页面文件或将初始大小设置为小于800兆字节并且发生系统错误,Windows可能不会记录有助于识别问题的详细信息。你想继续吗?

换句话说,如果我得到一个蓝屏死机,我将无法调查原因,只是因为我将我的分页文件放在一个更有效的位置。

我可以通过搜索网络找到的最佳解释是Windows不希望在与操作系统位置分开的驱动器上进行错误转储。 有人可以给我一个不那么废话的解释吗?

我不想告诉Windows,“当然,继续管理主驱动器上的页面文件,” 只是 所以我可以得到一个调试转储,因为这完全违背了物理上分离的页面文件的目的。 是否有解决方法将我的页面文件放在一个单独的驱动器上仍然得到错误转储?


1
这可能是因为系统驱动器在崩溃时最有可能出现(根据LMiller7的答案)。您可以在系统驱动器上尝试手动控制的800MB页面文件,其余部分在交换光盘上。
AFH

@AFH如果您有多个页面文件,那么每次Windows想要向页面文件写入内容时,它都将使用最近最不忙的磁盘上的文件。 (这取决于“平均请求队列深度”,您可以在性能监视器中看到的滚动平均值。)因此,通常可以很好地解决此问题。
Jamie Hanrahan

@JamieHanrahan - 感谢您的洞察力和您的回答。
AFH

Answers:


3

这个答案是关于OP问题的第二部分 - “我可以对此做点什么吗?” 是!

Windows Vista及更高版本允许您指定称为“专用转储文件”的内容。 (我将简称DDF。)

可以把它想象成一个页面文件,但操作系统已被告知永远不要将它用于页面文件(从而在分页驱动器上保留实际的页面文件I / O)。但是因为它“像页面文件”,操作系统可以在BSOD时使用它来临时存储转储信息。重新启动后,它将被复制到您以正常方式指定的转储文件。

更重要的是,DDF甚至不必在您的启动分区上!它可以位于“可以支持页面文件的任何本地卷”上。 (这消除了可移动驱动器,例如USB和Windows群集存储上的任何东西。)

设置起来很简单,但没有用户界面,所以它确实需要注册表。

在注册表项中 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\CrashControl ,创建一个名为的值 DedicatedDumpFile 类型REG_SZ。将字符串设置为DDF所在的完整路径。您不必自己预先创建文件。例如, C:\DUMPTEMP.SYS

默认情况下,操作系统会将其大小设置为RAM + 256 MB。您可以使用同一键下的另一个注册表值手动指定大小:值名称 DumpFileSize,键入REG_DWORD,value =您想要的大小 以兆字节为单位 。那些将是微软风格的“二进制兆字节”。因此,如果你想要它是“4 GB”,真的是“4 GiB”,你应该在这里使用1024作为值。

更多信息请参阅 这篇MSDN文章

虽然我在这里,但如果我没有指出“一个物理上分离的页面文件”通常没什么区别,除非你经常访问它,否则我会感到疏忽...如果你是,那就太多了添加RAM更有效。

您的所有进程正在使用的所有exe,dll和其他映射文件?实际上,这些也是页面文件!因此,将页面文件移动到另一个驱动器只会隔离该文件的分页I / O.您的系统仍将从OS驱动器上的所有其他内存映射文件进行分页,在某些情况下仍将分页。

同样,禁用页面文件不会消除磁盘分页(当然也不会关闭虚拟内存) - 它只会消除一个 OS页面的文件。

但是,将您的唯一页面文件移动到磁盘本身可以让您使用该驱动器的磁盘I / O性能计数器来查找系统实际执行的页面文件I / O数量。没有其他办法可以做到这一点,因为像“Page read I / O”这样的PerfMon计数器确实包含了对所有内存映射文件(如exe和dll)的页面读取I / O.


3

我相信原因是有更好的机会创建一个可靠的崩溃转储。在BSOD时,系统处于不稳定状态,并且不知道根本原因还是它的全部含义。该系统当然不能做出这样的判断,原因与精神科医生无法信任他的自己的精神状态判断相同。

因此,在进行崩溃转储时,尽可能简化操作非常重要。毕竟,BSOD的根本原因可能在于文件系统本身。因此,故障转储将写入系统驱动器上的页面文件,而不是写入新创建的文件。我相信这是绕过文件系统完成的。写入另一个驱动器上的页面文件会使这变得复杂。如果出现任何问题,其他文件或文件系统本身可能会被破坏并使问题变得更糟。

在BSOD之后的重新引导期间,系统被假定为处于稳定状态,并且故障转储从页面文件复制到其最终目的地。然后页面文件可以恢复它的正常功能。


1
“我相信这是绕过文件系统完成的”。正确。从Windows Internals,C14“Crashdmp.sys,在磁盘微型端口驱动程序和任何所需的过滤器驱动程序的支持下,将转储信息直接写入页面文件占用的磁盘上的扇区,绕过文件系统驱动程序和存储驱动程序堆栈(可能已经损坏甚至导致了崩溃。“
DavidPostill

这个答案是对的。它没有来源,这是基于OP给出的不正确信息的个人意见。

1
@FleetCommand它确实有一个来源(见上面的评论)
DavidPostill

@DavidPostill这是一个合成器......你读过我评论的第二部分吗?顺便说一句,让我们把它留在聊天室里。

这个答案是对的。这不是WIkipedia;这里有一些答案是合成。
Jamie Hanrahan

0

您错误地误解了错误消息。它说:

如果禁用分页文件或将初始大小设置为小于800兆[[snip~]

......而你把它解释为:

如果你把页面文件放在另一个驱动器上[~ship~]

你是怎么从第一个到第二个的?问自己这个问题: 您是否禁用页面文件或将其大小设置为小于800兆字节? 答案是: 一定不行!您正在将它移动到另一个驱动器

Windows会为您提供此警告消息,即使您首先在另一个驱动器上设置页面文件,因为您始终可以返回并撤消它。


无论如何,OP的解释是正确的。如果您将唯一的页面文件放在另一个驱动器上 - OP正在尝试这样做 - 操作系统将无法创建内存转储。我想如果它说错误信息会更清楚 “如果禁用操作系统分区上的页面文件,或将其初始大小设置为小于800兆字节......” 但不管怎样 在操作系统分区上有一个足够大小的页面文件(无论你是否有其他的)都会禁用系统在BSOD之后创建内存转储文件的能力。 (请参阅我的答案以获得修复)
Jamie Hanrahan

-1

如果我得到蓝屏死机,我将无法调查原因

只是因为我把我的分页文件放在一个更有效的位置。

这个说法不正确。

您可以独立于页面文件位置配置转储文件位置。

  1. 开始> “控制面板”> “系统”。

  2. 单击“高级系统设置”。

  3. 单击“高级”选项卡。

  4. 在“启动和恢复”部分中,单击“设置”。

  5. 在“写入调试信息”部分中,选择所需的转储类型和“转储文件”位置(可以在您选择的任何磁盘上)。

    enter image description here

笔记:

  • 无论任何页面文件或转储文件设置如何,基本BSOD信息都将写入系统事件日志(如果配置为这样做)

  • 转储文件可用于调查BSOD的原因。


进一步阅读


对不起,但这不符合OP的要求。它适用于将“final”memory.dmp文件放在别处,但它不会消除在OS分区上有一个页面文件以写入内存转储的需要!如某些链接中所述,操作系统分区上的页面文件用作转储信息的临时存储。除非您配置“专用转储文件” - 请参阅我的答案。
Jamie Hanrahan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.