3

我想尝试写一些东西来显示硬盘驱动器的碎片程度。也许甚至可以对其进行碎片整理。

但我意识到我并不完全理解这是如何工作的。

任何人都可以向我解释这一点,也许可以提供一些我可以从哪里开始的建议?

我主要使用 C# - 这是否是一种合适的语言来尝试将某些东西放在一起。

提前致谢

4

3 回答 3

5

请从关于磁盘碎片的维基百科文章开始

之后,就看你想走多低层次了。

首先官方howto看MSDN上的碎片整理文件

从文章中......

  1. 使用 FSCTL_GET_VOLUME_BITMAP 控制代码在卷上找到一个足以容纳整个文件的位置。注意 如有必要,请移动其他文件以腾出足够大的位置。理想情况下,文件的第一个扩展区之后有足够的未分配簇,您可以将后续扩展区移动到第一个扩展区之后的空间中。
  2. 使用 FSCTL_GET_RETRIEVAL_POINTERS 控制代码获取磁盘上文件当前布局的映射。
  3. 遍历 FSCTL_GET_RETRIEVAL_POINTERS 返回的 RETRIEVAL_POINTERS_BUFFER 结构。
  4. 使用 FSCTL_MOVE_FILE 控制代码在您走动结构时移动每个集群。注意您可能需要更新位图或检索结构,或在其他进程写入磁盘时在不同时间更新两者。

有关上述内容的 C# 包装器,请查看此博客文章

最后,根据您的情况,您可以在 Win32_Volume 类上使用WMI Defrag 方法。

希望这可以帮助。

于 2010-02-12T13:51:40.060 回答
0

要显示文件系统的碎片状态,您必须找出磁盘的哪些块属于哪些文件。所有不完全由连续块组成的文件都是碎片化的;它们包含孔和/或块分散在磁盘上。

要对文件系统进行碎片整理,您必须在块周围移动,以便所有文件都是连续的,并重写元数据以使文件系统最终处于一致状态。

于 2010-02-12T13:38:46.160 回答
0

保存文件时,它们使用的字节被放入分配的块中,如果文件增长并且下一个连续块不可用,则操作系统开始写入下一个可用块,将文件分成 2 个片段。

碎片整理通过将块移开(进入空闲空间)将文件收集到连续的块中,以便进行碎片整理的文件可以具有连续的块。对于非固态硬盘,这会影响性能(因为读取连续块没有寻道时间)

一些碎片整理程序将更常用的读取文件移动到磁盘外部(因为它旋转得越快,离主轴越远)。

于 2010-02-12T13:42:39.787 回答