Как увидеть фрагментацию конкретного файла?
есть ли инструмент, который показал бы мне конкретный файл на диске, насколько он фрагментирован? (Сколько поисков нужно сделать физическому диску, если я должен был прочитать этот файл линейным способом)
5 ответов
можно использовать DeviceIoControl
С FSCTL_GET_VOLUME_BITMAP
, FSCTL_GET_RETRIEVAL_POINTERS
и FSCTL_MOVE_FILE
см. Дефрагментируя Файлы.
вы также можете найти различные примеры кода, если вы ищете FSCTL_MOVE_FILE
.
Вот один в C и еще один в .NET.
инструмент Sysinternals contig с параметром -a
можете сделать это для файла или всех файлов в папке и ее подпапках.
и, конечно же, "фрагментация" подозрительна:
- файл может быть в кусках в том же цилиндре. Никаких накладных расходов, только задержка вращения. Или нет, поскольку фигуры могут быть оптимальным порядком (шансы близки к нулю для этого).
- файл может быть "смежным", но через несколько цилиндров. Даже чтение последовательно приведет к поискам.
- файл может быть на наборе полос, и вы понятия не имеете, где находятся границы. Вы можете перейти к другому контроллер, другой шпиндель или другой раздел на том же диске.
будьте осторожны в том, какие выводы вы делаете.
filefrag-это инструмент, который вы ищете, если вы используете Linux. Используйте параметр-v с именем файла, чтобы получить подробный список фрагментации. http://linux.die.net/man/8/filefrag
fsutil file queryallocranges offset=<o> length=<l> <file>
покажет вам экстенты файла, вам понадобятся права администратора.