我们有一个应用程序在工厂的专用机器(在 NTFS 磁盘上运行 Windows Embedded)上运行。在极少数情况下,“损坏的文件”会导致软件停止运行。删除损坏的文件可以解决问题……但文件中的所有数据都会丢失。
到目前为止,在实验室中重现此问题已证明是不可能的。我们终于设法找回了一台可以演示此问题的 PC。到目前为止,所有已知的“损坏文件”实例都是我们的软件使用的 INI 文件。当我尝试查看该文件(在记事本中)时,会显示以下错误:
尝试在 Windows 资源管理器中复制文件进行离线分析时出现以下错误消息:
该文件的属性在命令提示符中看起来正常。尝试使用 手动复制该文件copy mStats.ini D:
会产生此错误:
将 Windows 加载到安全模式无济于事(文件仍然损坏且无法恢复)。这似乎指向 Windows NTFS 主文件表 (MFT) 中的损坏条目。系统的其余部分似乎不受影响。删除该文件可以完全恢复。
- 什么原因导致这种情况发生?
- 数据可以恢复吗或者MFT可以更正吗?
- 是否有可能重现此类问题(无论是在软件中还是手动)?
- 是否有任何关于读取/写入文件的一般建议来保证这种事情不会发生?
更新 1
根据建议这里我chkdsk C: /V
从命令提示符运行并返回:
\PATH\mStats.ini
Windows found errors on the disk, but will not fix them
because disk checking was run without the /F (fix) parameter.
\PATH\mStats.ini first allocation unit is not valid. The entry will be truncated.
\PATH\mStats__.ini
\PATH\mStats__.ini first allocation unit is not valid. The entry will be truncated.
文件仍然损坏。我正忙着用该/F
标志重新运行命令。
更新2
chkdsk
使用该标志运行后/F
,文件现在已修复。这实际上并不是一个好消息,因为现在我的电脑上没有损坏的文件!在 Windows > 应用程序事件日志中出现以下条目:
\PATH\mStats.ini first allocation unit is not valid. The entry will be truncated.
\PATH\mStats__.ini first allocation unit is not valid. The entry will be truncated.
还有大约十几个其他文件(大部分在Temporary Internet Files
文件夹中)也存在同样的问题。
答案1
如果缺乏广泛测试和重现问题的能力,任何建议都只是猜测。
然而,它肯定声音就像软件问题一样。如果是硬件问题,例如硬盘或内存,那么从统计上看,只有单个文件损坏的可能性极低。不过,检查硬件也无妨。运行memtest86测试机器内存是否有故障。此外,在硬盘上运行磁盘扫描程序并检查是否有错误。更好的方法是用固态磁盘替换硬盘,以防工厂中的振动导致错误。
尝试使用十六进制编辑器打开损坏的文件,如下所示一。检查是否有任何数据可读且可恢复。作为安全措施,请创建一个脚本或使用一个程序,以您认为可接受的频率备份该文件。
最后,我会与该软件的制造商进行沟通,因为听起来该程序正在将损坏的数据写入文件,从而使其无法读取。