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