![为什么 Windows 不保存错误检查的小型转储?](https://linux22.com/image/1349143/%E4%B8%BA%E4%BB%80%E4%B9%88%20Windows%20%E4%B8%8D%E4%BF%9D%E5%AD%98%E9%94%99%E8%AF%AF%E6%A3%80%E6%9F%A5%E7%9A%84%E5%B0%8F%E5%9E%8B%E8%BD%AC%E5%82%A8%EF%BC%9F.png)
我如何修复下面描述的 Windows,以便在%SystemRoot%\Minidump
发生错误检查时保存小型转储?,因为它应该正常进行。我需要小型转储来知道哪个驱动程序发生故障,需要删除或更改
recoveros
设置recoveros
正确
wmic recoveros list /format:list && wmic recoveros get debuginfotype,minidumpdirectory /format:list
AutoReboot=TRUE
WriteDebugInfo=TRUE
WriteToSystemLog=TRUE
DebugInfoType=3
MiniDumpDirectory=%SystemRoot%\Minidump
禁用自动重启也没关系
wmic recoveros set autoreboot=false
错误检测编号
没有迹象表明错误检测编号很重要(某些错误检测编号会保存小型转储),因为
307 (2012-12-03 - 2013-10-06) 天内未保存任何小型转储
根据
Control Panel\System and Security\Action Center\Reliability Monitor
未保存的错误检测名称的示例为
PROCESS_HAS_LOCKED_PAGES
no bugcheck name (the "BugCheck name" row in the topic "Bugcheck display" isn't written)
错误检测显示
错误检查显示的消息与保存小型转储事件(1001)时的消息相同(并不表示它没有保存小型转储)
A problem has been detected and Windows has been shutdown to prevent damage to your computer.
BugCheck name (this row is sometimes not displayed)
General information
Technical information:
*** STOP: BugCheck code (arguments)
*** driver where BugCheck was called
Collecting data for crash dump ...
Initializing disk for crash dump ...
Physical memory dump complete.
Contact your system administrator or technical support group for further assistance.
wevtutil
当发生错误检查时
Windows 不保存小型转储事件(1001)
wevtutil qe system /q:*[System[EventID=1001]] /rd:true /f:text /c:1
Windows 保存其他错误检测事件
wevtutil qe system /q:*[System[EventID=41]] /rd:true /f:text /c:1
Date: 2013-01-29T19:15:42.198
The system has rebooted without cleanly shutting down first. This error could be caused if the system stopped responding, crashed, or lost power unexpectedly.
wevtutil qe system /q:*[System[EventID=6008]] /rd:true /f:text /c:1
Date: 2013-01-29T19:15:47.000
The previous system shutdown at 7:14:47 PM on 1/29/2013 was unexpected.
wevtutil qe system /q:*[System[EventID=1076]] /rd:true /f:text /c:1
Date: 2013-01-29T19:16:49.000
The reason supplied by user PC\User for the last unexpected shutdown of this computer is: System Failure: Stop error
Reason Code: 0x805000f
Problem ID:
Bugcheck String:
Comment:
werfault
werfault
在 BugCheck 之后启动时,Windows 不会显示此对话框
Windows 已从意外关机中恢复
Windows 可以在线检查该问题的解决方案。
可靠性监控器
当错误检查没有保存小型转储时,可靠性监视器历史记录会显示此消息
关键事件
Windows 没有正确关闭
上次系统关闭时间为 2013 年 8 月 21 日凌晨 2:11:08,是意外事件。
当错误检查保存小型转储时,不会出现此消息
关键事件
Windows 停止工作
计算机已从错误检测中重新启动。错误检测为:0x0000003b (0x00000000c0000005, 0xfffff96000352e77, 0xfffff8802385fea0, 0x0000000000000000)。转储已保存在:C:\Windows\Minidump\100613-14570-01.dmp。报告 ID:100613-14570-01。
minidumpscount
minidumpscount
大于 0(并且,如果重要的话,高于小型转储的数量)
reg query hklm\system\currentcontrolset\control\crashcontrol /v minidumpscount
minidumpscount REG_DWORD 0x3e7
dir %systemroot%\minidump | tail -2
35 File(s) 9▒917▒969 bytes
pagefileset
保存小型转储的适当pagefileset
大小尚不清楚。可能是这个大小
wmic pagefileset list /format:list
InitialSize=1000
MaximumSize=1000
这些尺寸都试过了,问题还是没有解决
wmic pagefileset where name="c:\\pagefile.sys" set initialsize=2000,maximumsize=2000
wmic pagefileset where name="c:\\pagefile.sys" set initialsize=3000,maximumsize=3000
wmic pagefileset where name="c:\\pagefile.sys" set initialsize=4000,maximumsize=4000
wmic computersystem where name="%computername%" set automaticmanagedpagefile=true
attrib
小型转储文件夹不是只读的(即允许 BugCheck 保存小型转储)
attrib %SystemRoot%\Minidump
I C:\Windows\Minidump
icacls
小型转储文件夹安全性正确(即允许 BugCheck 保存小型转储)
icacls %SystemRoot%\Minidump
C:\Windows\Minidump BUILTIN\Administrators:(OI)(CI)(F)
NT AUTHORITY\SYSTEM:(OI)(CI)(F)
Successfully processed 1 files; Failed processing 0 files
rmdir
minidump 文件夹被删除,因为
- 这会降低文件夹安全性错误的可能性,因为这通常会导致下一个 BugCheck 创建具有正确安全性的文件夹
rmdir /s /q %SystemRoot%\Minidump
但是,BugCheck 不会创建名为 %SystemRoot%\Minidump 的文件夹。但使用mkdir
以下命令手动创建 minidump 文件夹不会导致 BugCheck 保存 minidump
mkdir %SystemRoot%\Minidump
上次小型转储
最后 41 个有小型转储的事件是
wevtutil qe system /q:*[System[EventID=41]] /rd:true /f:text /c:6
Event[5]:
Date: 2012-12-03T06:21:37.590
dir %systemroot%\minidump /o:-d | head -8 | tail -1
2012-12-03 06:21 322▒616 120312-37830-01.dmp
系统
我的系统是
Operating System
Windows 7 Ultimate 64-bit SP1
CPU
Intel Core i7 3770K @ 3.50GHz 49 °C
Ivy Bridge 22nm Technology
RAM
32,0GB Dual-Channel DDR3 @ 668MHz (9-9-9-24)
Motherboard
ASUSTeK COMPUTER INC. P8Z77-M PRO (LGA1155) 36 °C
Graphics
DELL U2312HM (1920x1080@60Hz)
BenQG2222HDL (1920x1080@60Hz)
Intel HD Graphics 4000 (ASUStek Computer Inc)
1024MB ATI AMD Radeon HD 6800 Series (XFX Pine Group) 79 °C
Hard Drives
112GB OCZ-VERTEX2 ATA Device (SSD) 30 °C
Optical Drives
QBCNK MRSHA3S5 SCSI CdRom Device
Audio
Corsair Vengeance 2000 Headset
可用的 c: 磁盘空间为
fsutil volume diskfree c:
Total # of free bytes : 19957088256
Total # of bytes : 119926681600
Total # of avail free bytes : 19957088256
答案1
回答
将 pagefile.sys 大小更改为 ≥ RAM 大小
解决方案是将 pagefile.sys 大小更改为 ≥ RAM 大小
wmic computersystem where name="%computername%" set automaticmanagedpagefile=true
wmic pagefile list /format:list
AllocatedBaseSize=32635
CurrentUsage=0
PeakUsage=0
dir /ah c:\pagefile.sys
2013-10-06 14:29 34 220 941 312 pagefile.sys
此后,即使将页面文件更改为小于问题中使用的最大页面文件大小(4000),仍会保存小型转储
wmic pagefileset where name="c:\\pagefile.sys" set initialsize=10000,maximumsize=10000
wmic pagefileset where name="c:\\pagefile.sys" set initialsize=5000,maximumsize=5000
wmic pagefileset where name="c:\\pagefile.sys" set initialsize=4000,maximumsize=4000
wmic pagefileset where name="c:\\pagefile.sys" set initialsize=3000,maximumsize=3000
wmic pagefileset where name="c:\\pagefile.sys" set initialsize=2000,maximumsize=2000
将可用 c: 磁盘空间增加到 ≥ RAM 大小
并且/或者解决方案是将可用的 c: 磁盘空间更改为 ≥ RAM 大小(并将页面文件大小设置为至少 2000),因为
- 无法确定哪个更改解决了该问题(在“更改磁盘大小或页面文件大小后问题解决”中描述)
更改磁盘大小或页面文件大小后问题解决
问题解决后
将页面文件大小更改为 > RAM 大小
和/或将可用 c: 磁盘空间更改为 ≥ RAM 大小
此后,注意到将页面文件大小从 32 G(automaticmanagedpagefile=true)减少到 2 G(maximumsize=2000)并没有再次出现问题
无法确定哪个更改解决了该问题,因为
将可用磁盘空间和页面文件大小更改为 > RAM 大小 (32 G) 后,问题得到解决
在问题中,当页面文件大小为 4 G(最大大小 = 4000)时,BugCheck 应该保存小型转储,因为在 BugCheck 再次开始保存小型转储后,它会在页面文件大小减小到 4 G(最大大小 = 2000)以下后继续保存它们
系统
与问题中的主题“系统”相比,系统(Speccy 输出)的差异是
Hard Drives
233GB Samsung SSD 840 EVO 250GB ATA Device (SSD) 34 °C
磁盘空间
可用的 c: 磁盘空间为
fsutil volume diskfree c:
Total # of free bytes : 82576859136
Total # of bytes : 249844199424
Total # of avail free bytes : 82576859136
页面文件大小和小型转储
如下输出中所述,BugCheck 将为其创建小型转储的页面文件大小
wmic computersystem where name="%computername%" set automaticmanagedpagefile=true
dir %systemroot%\minidump /o:-d | head -9 | tail -2
2013-10-06 14:29 324▒949 100613-14570-01.dmp
2012-12-03 07:21 322▒616 120312-37830-01.dmp
wmic pagefileset where name="c:\\pagefile.sys" set initialsize=10000,maximumsize=10000
dir %systemroot%\minidump /o:-d | head -9 | tail -2
2013-10-11 18:46 324▒045 101113-13587-01.dmp
2013-10-06 14:29 324▒949 100613-14570-01.dmp
wmic pagefileset where name="c:\\pagefile.sys" set initialsize=5000,maximumsize=5000
dir %systemroot%\minidump /o:-d | head -9 | tail -2
2014-01-05 04:50 325▒061 010514-12417-01.dmp
2013-10-11 17:46 324▒045 101113-13587-01.dmp
wmic pagefileset where name="c:\\pagefile.sys" set initialsize=4000,maximumsize=4000
dir %systemroot%\minidump /o:-d | head -9 | tail -2
2014-01-23 03:45 323▒205 012314-11481-01.dmp
2014-01-05 04:50 325▒061 010514-12417-01.dmp
wmic pagefileset where name="c:\\pagefile.sys" set initialsize=3000,maximumsize=3000
dir %systemroot%\minidump /o:-d | head -9 | tail -2
2014-02-15 02:12 323▒013 021514-10873-01.dmp
2014-01-23 03:45 323▒205 012314-11481-01.dmp
未解决的问题
即使应用主题“答案”中描述的解决方案后,这些问题仍然没有解决
未描述 minidump 的最小 pagefile.sys
微软尚未明确描述当 RAM 为 32 GB 时 Windows 保存小型转储的最小 pagefile.sys 大小
误导性的 BugCheck 屏幕消息
当小型转储未保存时,微软也会在 BugCheck 屏幕上显示“物理内存转储已完成”,从而误导用户
Samsung Magician 的建议并未表明它会导致 Windows 无法保存小型转储
三星并未指出三星 Magician 4.2.1 中“系统管理 > 操作系统优化”中的 pagefile.sys 大小建议可能会导致 BugCheck 无法保存小型转储
Samsung Magician 4.2.1“系统管理 > 操作系统优化”建议
Maximum Capacity and Maximum Reliability
Virtual Memory
Virtual memory will be set to an initial size of 200 MB and a maximum of 1 GB.
Advanced
Manually set virtual memory in Windows Performance Options. If your PC has more than 4 GB of RAM, Samsung recommends you initially set virtual memory to 200 MB with a maximum of 2 GB. Use the shortcut to the right to adjsut settings.
因此“高级”建议是
wmic pagefileset where name="c:\\pagefile.sys" set initialsize=200,maximumsize=2000
推荐
描述最小 pagefile.sys 大小
微软应该描述 BugCheck 保存小型转储的最小 c:\pagefile.sys 大小,因为
当 RAM 大小为 32 GB RAM 时,“wmic pagefile list /format:list”的“PeakUsage”输出有时为 0。也就是说 pagefile.sys 的实用性为 0
32 GB SSD 的成本超过 0(约 15 欧元)
更改 Windows,以便当 pagefile.sys 较小时 BugCheck 保存小型转储
微软应该改变 Windows,以便当 c:\pagefile.sys 较小(例如 0.2 GB)时保存小型转储,因为
- 先前建议中的理由
- minidump 有一个实用程序(识别导致 BugCheck 的驱动程序)。Iow BugCheck 应该始终创建它