Фрагментация NTFS

OSzone.net » Microsoft » Разное » Файловые системы » Фрагментация NTFS
Иcточник: Softodrom.ru
Опубликована: 28.01.2005
В самом начале утверждалось, что NTFSне подвержена фрагментации файлов. Этооказалось не совсем так, и утверждениесменили - NTFS препятствует фрагментации.Оказалось, что и это не совсем так. То естьона, конечно, препятствует, но толк от этогоблизок к нулю... Сейчас уже понятно, что NTFS -система, которая как никакая другая предрасположена к фрагментации, что бы не утверждалосьофициально. Единственное что - логическиона не очень от этого страдает. Всевнутренние структуры построены такимобразом, что фрагментация не мешает быстронаходить фрагменты данных. Но отфизического последствия фрагментации -лишних движений головок - она, конечно, неспасает. И поэтому - вперед и с песней...


    NTFS - очень экономная система.Размер кластеров в ней разумно минимален -обычно это 4 кб (на стандартных сейчасдисках в десяток-другой гигабайт). Какизвестно, система сильнее всегофрагментирует файлы когда свободное местокончается, когда приходится использоватьмелкие дырки, оставшиеся от других файлов.Тут возникает первое свойство NTFS, котороепрямо способствует серьезной фрагментации.

    Диск NTFS поделен на две зоны. В началадиска идет MFT зона - зона, куда растет MFT, MasterFile Table. Зона занимает минимум 12% диска, изапись данных в эту зону невозможна. Этосделано для того, чтобы не фрагментировалсяхотя бы MFT. Но когда весь остальной дискзаполняется - зона сокращается ровно в двараза :). И так далее. Таким образом мы имеемне один заход окончания диска, а несколько.В результате если NTFS работает при диске,заполненном на около 90% - фрагментациярастет как бешенная.

    Далее. NTFS работает себе и работает,и всё таки фрагментируется. Этомуспособствует странный алгоритм нахождениясвободного места - второе серьезноеупущение. Если файл пишется большимикусками - всё нормально. Но если файлмедленно растет - алгоритм такой: беретсякакой-то определенный объем диска изаполняется файлом до упора. Причем поочень интересному алгоритму: сначалазаполняются большие дырки, потом маленькие.Т.е. типичное распределение фрагментовфайла по размеру на фрагментированной NTFSвыглядит так (размеры фрагментов):

    16 - 16 - 16 - 16 - 16 - [скачек назад] - 15 - 15 - 15 -[назад] - 14 - 14 - 14 .... 1 - 1 - 1 -1 - 1...

    Так процесс идет до самых мелкихдырок в 1 кластер, несмотря на то, что надиске наверняка есть и гораздо болеебольшие куски свободного места.

    Может быть я забыл написать что-тоеще... Смысл в том, что никак нельзя сказать,что NTFS препятствует фрагментации файлов.Наоборот, она с радостью их фрагментирует.Фрагментация NTFS через пол года работыдоведет до искреннего удивления любогочеловека, знакомого с работой файловойсистемой. Поэтому приходится запускатьдефрагментатор. Но на этом все нашипроблемы не заканчиваются, а, увы, только начинаются...


    В NT существует стандартное APIдефрагментации. Обладающее интереснымограничением для перемещения блоков файлов:за один раз можно перемещать не менее 16кластеров (!), причем начинаться этикластеры должны с позиции, кратной 16кластерам в файле. В общем, операцияосуществляется исключительно по 16кластеров. Следствия:

    Тем не менее, логично было быиспользовать это API. Его и используют.Поэтому процесс стандартнойдефрагментации, с поправками наограниченность API, идет следующими фазами,не обязательно в этом порядке:

    Допустим, мы хотим положить файлыподряд в начало диска. Кладем один файл. Оноставляет хвост занятости дополнения дократности 16. Кладем следующий - после хвоста,естественно. Через некоторое время, поосвобождению хвоста, имеем дырку


Ссылка: http://www.oszone.net/1285/