В самом начале утверждалось, что NTFSне подвержена фрагментации файлов. Этооказалось не совсем так, и утверждениесменили - NTFS препятствует фрагментации.Оказалось, что и это не совсем так. То естьона, конечно, препятствует, но толк от этогоблизок к нулю... Сейчас уже понятно, что NTFS -система, которая как никакая другая
предрасположена к фрагментации, что бы не утверждалосьофициально. Единственное что - логическиона не очень от этого страдает. Всевнутренние структуры построены такимобразом, что фрагментация не мешает быстронаходить фрагменты данных. Но отфизического последствия фрагментации -лишних движений головок - она, конечно, неспасает. И поэтому - вперед и с песней...
NTFS - очень экономная система.Размер кластеров в ней разумно минимален -обычно это 4 кб (на стандартных сейчасдисках в десяток-другой гигабайт). Какизвестно, система сильнее всегофрагментирует файлы когда свободное местокончается, когда приходится использоватьмелкие дырки, оставшиеся от других файлов.Тут возникает первое свойство NTFS, котороепрямо способствует серьезной фрагментации.
Диск NTFS поделен на две зоны. В началадиска идет MFT зона - зона, куда растет MFT, MasterFile Table. Зона занимает минимум 12% диска, изапись данных в эту зону невозможна. Этосделано для того, чтобы не фрагментировалсяхотя бы MFT. Но когда весь остальной дискзаполняется - зона сокращается ровно в двараза :). И так далее. Таким образом мы имеемне один заход окончания диска, а несколько.В результате если NTFS работает при диске,заполненном на около 90% - фрагментациярастет как бешенная.
- Попутное следствие - диск, заполненныйболее чем на 88%, дефрагментировать почтиневозможно - даже API дефрагментации не можетперемещать данные в MFT зону. Может оказатьсятак, что у нас не будет свободного места дляманевра.
Далее. 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кластеров. Следствия:
- В дырку свободного места менее 16кластеров нельзя ничего переместить (кромесжатых файлов, но это тонкости).
- Файл, будучи перемещенный в друге место,оставляет после себя (на новом месте) "временнозанятое место", дополняющее его поразмеру до кратности 16 кластерам.
- При попытке как-то неправильно ("некратно 16") переместить файл результатчасто непредсказуем. Что-то округляется,что-то просто не перемещается.. Тем не менее,всё место действия щедро рассыпается "временнозанятым местом". Наверное о нас заботятся,чтобы мы отстали от этого места - чтобыалгоритм дефрагментации не клинило. :)
- "Временно занятое место"освобождается через некоторое время,обычно где-то пол минуты. Гы.
Тем не менее, логично было быиспользовать это API. Его и используют.Поэтому процесс стандартнойдефрагментации, с поправками наограниченность API, идет следующими фазами,не обязательно в этом порядке:
- Вынимание файлов из MFT зоны. Не специально- просто обратно туда их положить непредставляется возможным Безобидная фаза,и даже в чем то полезная.
- Дефрагментация файлов. Безусловнополезный процесс, несколько правдаосложняемый ограничениями кратностиперемещений - файлы часто приходитсяперекладывать сильнее, чем это было былогично сделать по уму.
- Дефрагментация MFT, виртуалки (pagefile.sys) икаталогов. Возможна через API только в Windows2000,иначе - при перезагрузке, отдельнымпроцессом, как в Diskeeper-е.
- Складывание файлов ближе к началу - такназываемая дефрагментация свободногоместа. Вот это - воистину страшный процесс...
Допустим, мы хотим положить файлыподряд в начало диска. Кладем один файл. Оноставляет хвост занятости дополнения дократности 16. Кладем следующий - после хвоста,естественно. Через некоторое время, поосвобождению хвоста, имеем дырку