Как увидеть фрагментацию конкретного файла?

есть ли инструмент, который показал бы мне конкретный файл на диске, насколько он фрагментирован? (Сколько поисков нужно сделать физическому диску, если я должен был прочитать этот файл линейным способом)

5 ответов


можно использовать DeviceIoControl С FSCTL_GET_VOLUME_BITMAP, FSCTL_GET_RETRIEVAL_POINTERS и FSCTL_MOVE_FILE см. Дефрагментируя Файлы.

вы также можете найти различные примеры кода, если вы ищете FSCTL_MOVE_FILE.
Вот один в C и еще один в .NET.


инструмент Sysinternals contig с параметром -a можете сделать это для файла или всех файлов в папке и ее подпапках.


и, конечно же, "фрагментация" подозрительна:

  1. файл может быть в кусках в том же цилиндре. Никаких накладных расходов, только задержка вращения. Или нет, поскольку фигуры могут быть оптимальным порядком (шансы близки к нулю для этого).
  2. файл может быть "смежным", но через несколько цилиндров. Даже чтение последовательно приведет к поискам.
  3. файл может быть на наборе полос, и вы понятия не имеете, где находятся границы. Вы можете перейти к другому контроллер, другой шпиндель или другой раздел на том же диске.

будьте осторожны в том, какие выводы вы делаете.


filefrag-это инструмент, который вы ищете, если вы используете Linux. Используйте параметр-v с именем файла, чтобы получить подробный список фрагментации. http://linux.die.net/man/8/filefrag


fsutil file queryallocranges offset=<o> length=<l> <file> покажет вам экстенты файла, вам понадобятся права администратора.