我在NTFS中有一个包含数万个文件的文件夹。我删除了该文件夹中的所有文件,保存1.我运行contig.exe对该文件夹进行碎片整理,所以现在它只在1个片段中。但是,该文件夹的大小仍然是8MB。这意味着指数存在很大差距。这是为什么?如果我删除那个文件,索引的大小会自动变为零。我的猜测是因为它崩溃了进入MFT。有没有办法让NTFS通过根据文件内容对其进行碎片整理来真正对索引文件进行碎片整理?您知道的任何API? Contig.exe只对物理文件进行碎片整理。
答案 0 :(得分:6)
我想这是NTFS就像几乎所有其他FS一样的方式 - 它们似乎都不像缩小目录。
所以你应该运用一种涉及使用高级语言的高科技方法,“BAT”:)
collapse.bat
REM Invoke as "collapse dirname"
ren dirname dirname.old
mkdir dirname
cd dirname.old
move * ../dirname/
cd ..
rmdir dirname.old
答案 1 :(得分:2)
索引中有松弛,但不是间隙。我明确表示存在技术上浪费的空间,但它不像NTFS必须解析8MB才能枚举/查询/无论索引如何。它知道它的树的根在哪里,它恰好有剩余的额外分配。可能过于详细的反应,因为它是多么无益。
碎片可能是一个单独的问题。
答案 2 :(得分:2)
看一下这个问题的接受答案:NTFS performance and large volumes of files and directories
作者提供了一些有关文件索引碎片的其他未记录的信息,他在事件发生期间从Microsoft技术支持部门收到了这些信息。简短版本是,DEFRAG不对文件夹索引进行碎片整理,只对该文件夹中的文件进行碎片整理。如果要对文件索引进行碎片整理,则必须使用SysInternals的CONTIG工具,该工具现在由Microsoft拥有并分发(免费)。答案提供了CONTIG的链接。