这些年来我已经运行过chkdsk /F
很多次了......今天我必须在我的其中一台 2008 R2 服务器上运行它,并且收到了正常消息:
Chkdsk 无法运行,因为该卷正在被另一个进程使用。是否要安排在下次系统重新启动时检查此卷?(Y/N) y
系统下次重新启动时将检查该卷。
我在这里查看了 Technet 文档:http://technet.microsoft.com/en-us/library/cc730714.aspx以及正常的谷歌搜索和在谷歌上的 Technet 和 site:microsoft.com 上搜索,但找不到我想要的东西......
问题:
Windows 如何在/在哪里安排重启时执行此操作?它不在任务计划程序或 RunOnce 或类似程序中,如果它需要在 Windows 锁定卷之前运行,那么这是有道理的……那么 Windows 究竟在哪里设置此“计划任务”的发生,以便服务器即使在一周后的维护窗口重启期间也知道它?
答案1
好问题。答案是,该VolumeDirty
位是在卷上设置的,(我不得不假设)在启动时会进行检查。可能类似于插入闪存驱动器时检查的方式,弹出窗口显示“扫描”或“继续但不扫描”。
我曾经尝试过一种方法来为几乎无需维护的自动化服务器安排 chkdsk,即volumedirty
通过 powershell 脚本 ( dirtybitset = $true
) 设置位,但这种方法行不通。我可能会重新考虑这种方法,因为从我的链接中可以看到,有一个 ScheduleAutoChk 可以做到这一点,并且可以与 dirtybit 配合使用。
更远在这里研究状态:
每次 Windows 重新启动时,内核都会调用 Autochk.exe 来扫描所有卷,以检查卷脏位是否已设置。如果已设置脏位。
您可以在此处找到有关更多信息autochk.exe
,以帮助解释正在发生的事情Microsoft Technet 网站和维基百科维基百科指出:
一旦所有引导和系统驱动程序都已加载,内核(系统线程)就会启动会话管理器子系统 (smss.exe)。
在打开任何文件之前,smss.exe 会启动 Autochk。Autochk 会挂载所有驱动器并逐个检查它们,以查看它们是否已完全卸载。如果 autochk 确定一个或多个卷已损坏,它将自动运行 chkdsk
具体来说,如果你查看注册表,就会发现:
HKLM\System\CurrentControlSet\Control\会话管理器
有一个值BootExecute
从变为autocheck autochk *
类似autocheck autochk /p \\??\C: autocheck autochk *