我想写一些能够显示硬盘驱动器状态的内容。也许甚至可以去除碎片。
但我意识到我并不完全明白这是如何运作的。
任何人都可以向我解释这个问题,或许可以就我可能从哪里开始提出一些建议吗?
我主要使用C# - 这是一种合适的语言,可以放在一起。
提前致谢
答案 0 :(得分:4)
然后,这取决于你想要去的低级别。
首先是官方如何在MSDN上查看Defragmenting Files。
从文章....
- 使用FSCTL_GET_VOLUME_BITMAP控制代码在卷上找到足够大的位置以接受整个文件。 注意如有必要,请移动其他文件以创建足够大的位置。理想情况下,在文件的第一个范围之后有足够的未分配的集群,您可以将后续扩展区移动到第一个扩展区之后的空间中。
- 使用FSCTL_GET_RETRIEVAL_POINTERS控制代码获取磁盘上文件当前布局的映射。
- 走FSCTL_GET_RETRIEVAL_POINTERS返回的RETRIEVAL_POINTERS_BUFFER结构。
- 使用FSCTL_MOVE_FILE控制代码在您移动结构时移动每个群集。 注意当其他进程写入磁盘时,您可能需要在不同时间更新位图或检索结构,或两者都更新。
醇>
对于上述的C#包装器,请查看此blog post。
最后,根据您的具体情况,您可以使用Win32_Volume类上的WMI Defrag method。
希望这有帮助。
答案 1 :(得分:0)
要显示文件系统的碎片状态,您必须找出磁盘的哪些块属于哪些文件。所有不仅仅由连续块组成的文件都是碎片化的;它们包含孔和/或块分散在磁盘上。
要对文件系统进行碎片整理,您必须在块中移动,以便所有文件都是连续的,并重写元数据,以使文件系统最终处于一致状态。
答案 2 :(得分:0)
当保存文件时,它们使用的字节被放入已分配的块中,如果文件增长并且下一个连续块不可用,则操作系统开始写入下一个可用块,将文件拆分为2个片段。
碎片整理通过将块移开(进入可用空间)将文件收集到连续的块中,以便被碎片整理的文件可以具有连续的块。对于非固态硬盘驱动器,这会影响性能(因为没有寻找时间读取连续的块)
有些碎片整理程序会将更常见的读取文件移动到磁盘外部(因为它离主轴越远越快旋转)。