检查硬盘上的坏扇区

Posted

技术标签:

【中文标题】检查硬盘上的坏扇区【英文标题】:check for bad sectors on hard disk 【发布时间】:2013-03-18 16:56:33 【问题描述】:

最近几次停电后,我的电脑变得很乱(不时出现蓝屏,整个操作系统的行为真的很奇怪)。

现在我有一个程序在我的电脑出现故障之前运行得非常好。这个程序基本上只是使用CreateFile 创建一个文件并使用WriteFile 写入它。这个程序还有其他的东西基于这个文件做他们的事情。我注意到整个程序的行为也很奇怪。

我的调试结果:

我注意到在CreateFile 之后,文件是在它所在的位置创建的 应该是(使用资源管理器和命令行检查)。 WriteFile 没有写入文件(再次使用资源管理器和命令行检查)。 WriteFile 之后,每当我在资源管理器中双击该文件或对该文件执行任何操作时,一切都表现为该文件不存在。 所有 API 都返回了各自的成功代码。绝对没有错误。

在我停止我的程序并退出 IDE 后,我进入资源管理器并尝试删除包含上面创建的文件的文件夹,它显示了这个:

文件已被删除。

注意:上述情况并不总是发生。

由于上述调试,我得出的结论是,由于我的整个操作系统表现异常,我的程序也表现异常。我的程序没有错误(因为在那些该死的停电之前一切正常)。

不管怎样,微软有this to say about that error。基本上我的硬盘有很多坏扇区。

我的问题:有没有办法以编程方式检查硬盘在 C 语言中是否正常?这种检测不需要是 100% 正确的。但是,我确实希望此检查非常快(因为我做了很多写操作等)。

我想要这个检查,因为到目前为止,我的程序的其余部分认为文件在那里并且准备好了(因为没有返回错误)并且随之而来的是各种奇怪的行为。作为一个可能不知道他/她的硬盘被分区的用户,我希望我的程序建议运行磁盘检查。

【问题讨论】:

google.co.uk/search?q=windows+check+disk+for+errors @NPE, “有没有办法以编程方式检查硬盘驱动器在 C 语言中是否正常? 除非您的程序是某种应该知道此类问题的实用程序,否则建议用户检查磁盘是否有错误会很奇怪 @msam,该消息只是一种可能性。但我绝对不希望我的程序在发现这种情况时继续运行。 尝试使用FILE_FLAG_NO_BUFFERING 标志打开文件,以便写入立即刷新到磁盘并且不通过磁盘缓存...所以您可能会在返回中看到一些错误WriteFile 的代码。但是,这也会降低性能。 【参考方案1】:

您最好通过一个 API 来查看 S.M.A.R.T 故障前通知,该 API 允许在驱动器问题发生之前对其进行早期警告。 Here 是我很快找到的一种实现,它似乎适用于您的平台,但我尚未对其进行测试。

我怀疑有更好的可用。这种 SMART 方法的主要优点是在问题变得重要之前发现问题。但是,许多操作系统都内置了此功能,除了磁盘实用程序之外,很少在应用程序级别使用此功能。

【讨论】:

【参考方案2】:

由于您的应用程序是在操作系统之上构建的,因此您必须依赖它的错误报告并将它们传递出去。您不能假设特定错误意味着它需要磁盘检查。

在您的情况下,我建议运行全盘检查并照常进行。

【讨论】:

以上是关于检查硬盘上的坏扇区的主要内容,如果未能解决你的问题,请参考以下文章

从坏扇区硬盘恢复数据

Exadata Adaptive Scrubbing Schedule

磁盘扇区、IO块、inode、文件、目录、硬链接与软链接到底是啥?

磁盘出现坏道,到底该如何屏蔽坏道?

.edox文件用啥打开

遇到硬盘数据丢失问题,选择EasyRecovery