我们正在测试我们的系统(目前运行在嵌入式 Windows 7 上)在没有警告的情况下断电时会如何表现。我们的 PC 故意不使用 UPS 运行。
在一次测试中,我们在记事本中创建了一个简单的文本文件,添加了一些文本,保存了该文件,然后几秒钟后关闭电源,即不是正常关机。
当我们重新打开电源时,文件的更改尚未保存。
经过进一步调查,我们注意到我们的 Crucial MX200 SSD 已选中“在设备上启用写入缓存”。
后取消勾选在该设置下,我们再次尝试了测试,假设磁盘写入将被立即写入,而不是被缓存。
但与以前一样,如果我们在“保存”文件几秒钟后切断电源,对文件的更改仍然不会被保存。
更新 - 我们使用 2 个不同品牌的 SSD 和 HDD 测试了此行为,行为相同。看起来写入缓存从未被禁用...
我们还遗漏了什么吗?
答案1
一旦我们确认我们的问题不是特定于某个特定品牌或类型的驱动器,我们就怀疑这是 Windows 的行为,在我们的例子中是 Windows 7。
经过进一步搜索,我们发现了这篇文章: Windows 多久刷新一次写入缓存?
这证实完全刷新 Windows 内部文件缓存需要 8 秒。
解决方法是更新我们的源代码,如下所示 -https://jeffpar.github.io/kbarchive/kb/066/Q66052/。
在使用 打开文件时fopen
,我们将 Microsoft 特定的模式选项“c”作为最后一个选项,并_flushall()
在调用之前立即使用fclose()
。