6

Windows 中磁盘碎片整理和磁盘检查背后的逻辑是什么?我可以使用 C# 编码吗?

4

5 回答 5

8

为了完整起见,这是一个用于碎片整理的 C# API 包装器:

http://blogs.msdn.com/jeffrey_wall/archive/2004/09/13/229137.aspx

如今,使用这些 API 进行碎片整理(应该是)非常安全。即使您愿意,也不应该破坏文件系统。

商业碎片整理程序使用相同的 API。

于 2009-08-20T23:18:10.267 回答
3

查看 msdn 上的Defragmenting Files以了解可能的 API 帮助程序。

您应该仔细考虑使用 C# 来执行此任务,因为它可能会引入一些不需要的开销来编组到本机 Win32。

于 2009-07-06T07:59:06.200 回答
3

如果您不知道碎片整理的逻辑,并且如果您没有自己编写文件系统,因此您无法权威地检查它是否有错误,那么为什么不启动运行“defrag”和“chkdsk”的新进程呢?

于 2009-07-06T08:00:20.300 回答
3

Mark Russinovich 不久前写了一篇Inside Windows NT Disk Defragmentation的文章,其中提供了深入的细节。如果你真的想这样做,我真的建议你使用内置的碎片整理工具。更重要的是,在最近的操作系统上,我从来没有看到用户需要关心碎片整理。它会按计划自动完成,MS 的 NTFS 人员在这方面肯定比你聪明(抱歉,他们现在这样做了一段时间,你没有)。

于 2009-07-06T08:14:53.690 回答
1

尽管它很重要,但文件系统只不过是一种将文件名映射到磁盘块列表的数据结构。并跟踪元信息,例如文件的实际长度和保存文件列表的特殊文件(例如,目录)。磁盘检查器验证数据结构是否一致。也就是说,每个磁盘块必须要么可以分配给一个文件,要么属于一个文件。它还可以检查某些情况下,一组磁盘块似乎是应该在目录中但由于某种原因不在目录中的文件。

碎片整理是关于查看分配给每个文件的磁盘块列表。如果文件使用一组连续的块而不是分散在磁盘上的块,它们通常会加载得更快。通常,如果所有正在使用的磁盘块都将自己限制在磁盘的单个连续范围内,则整个文件系统将表现最佳。因此,诀窍是在不破坏文件系统的情况下安全地移动磁盘块以达到此目的。

这里的主要困难是在使用磁盘时运行这些应用程序。这是可能的,但必须非常、非常、非常小心,不要犯某种明显或极其微妙的错误并破坏大部分或全部文件。离线处理文件系统更容易。

另一个困难是处理文件系统的复杂性。例如,构建支持 FAT32 而不是 NTFS 的东西会更好,因为前者是一个非常简单的文件系统。

只要您具有低级块访问权限和一些处理并发问题的明智方法(最好在不使用文件系统时处理它),您就可以使用 C#、perl 或任何您喜欢的语言来执行此操作。

但要非常小心。 该程序的早期版本将破坏整个文件系统。以后的版本会这样做,但只是在不明确的情况下。如果您破坏他们的数据,用户会非常愤怒和诉讼。

于 2009-07-06T08:06:30.100 回答