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

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


person Ghostrider    schedule 13.05.2010    source источник


Ответы (5)


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

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

person Oleg    schedule 13.05.2010

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

person Albin Sunnanbo    schedule 25.08.2010
comment
@SmitJohnth, вау, это все еще было полезно? Я думал, что с сегодняшними SSD фрагментация вряд ли будет проблемой. - person Albin Sunnanbo; 16.07.2016
comment
SSD все еще слишком дорог, чтобы хранить на нем всю хрень, даже после того, как цены на HDD почти не упали за последние годы. Я создал большой текстовый файл, попытался выполнить в нем поиск и заметил, что он работает слишком медленно. Я измерил скорость чтения, а потом начал что-то подозревать... Теперь это исправлено. - person Smit Johnth; 17.07.2016

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

person Sami Lehtinen    schedule 14.02.2012

И, конечно, "фрагментация" вызывает подозрение:

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

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

person MJZ    schedule 17.09.2010

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

person Dominik Weber    schedule 25.08.2010
comment
Это проверяет только диапазоны для разреженных файлов. Если файл цельный, но фрагментированный, он покажет одну часть. - person Michael Yutsis; 05.06.2021