Windows XP PRO

       

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


Автор: Дмитрий Михайлов
Источник: http://www.mtu-net.ru/pinetar/dm

Дата публикации: 22.03.2002
Категория: Windows

 

Или факты, которые Diskeeper 'забывает'нам рассказать...

    В самом начале утверждалось, что 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. Кладем следующий - после хвоста,естественно. Через некоторое время, поосвобождению хвоста, имеем дырку

    Таким образом, имеется двапримерно равнозначных варианта. Первый -часто оптимизировать диск такимдефрагментатором, смиряясь при этом с дикойфрагментацией заново созданных файлов.Второй вариант - вообще ничего не трогать, исмириться с равномерной, но гораздо болееслабой фрагментацией всех файлов на диске.

!      Пока есть один дефрагментатор,который игнорирует API дефрагментации иработает как-то более напрямую - Norton Speeddisk 5.0для NT. Когда его пытаются сравнить со всемиостальными - Diskeeper, O&O defrag, т.д. - неупоминают этого главного, самогопринципиального, отличия. Просто потому,что эта проблема тщательно скрывается, покрайней мере уж точно не афишируется накаждом шагу. Speeddisk - единственная насегодняшний день программа, которая можетоптимизировать диск полностью, не создаваямаленьких незаполненных фрагментовсвободного места. Стоит добавить также, что стандартное API не может дефрагментировать тома NTFS с кластером более 4 Кбайт - а SpeedDisk, по прежнему, может.


    К сожалению, в Windows 2000 засунулидефрагментатор, который работает через API, исоответственно плодит дырки вредны. Если вызапускали его хоть раз - нужно запускать егопотом хотя бы раз в месяц, чтобы избавитсяот фрагментации новоприбывающих файлов. Вэтом основная суть сложностидефрагментации NTFS теми средствами, которыесложились исторически.

    Хочется выразить огромнуюблагодарность человеку по имени Mark Russinovich  (),который предоставил общественности .h ипримеры использования интерфейсадефрагментации.

    И напоследок - программа fv выводитколичество фрагментов в файлах текущегокаталога, а с ключом /v [имя файла] - списокразмеров блоков(фрагментов) указанногофайла, в кластерах. Знак ~ означает, чтоследующий фрагмент находился ближе кначалу диска, чем предыдущий. На всеостальные непонятные выводимые данныесоветую внимания не обращать - что-то я тудавписал, что-то было - в любом случае не оченьполезные данные :)
Написал Андрей Шабалин ()

Исходные тексты (проект VC6)
    Также была попытка написатьдефрагментатор :). Дело дошло до написаниямною программы, которая расчищаетуказанный участок диска, разбрасывая файлыкуда попало. Она даже работает! Ну, в умелыхруках  :). В общем, вам её не запустить дажедля этой цели, слишком всё коряво - ну даразработчики меня поймут..
Тем не менее,основа любого дефрагментатора уже написана.Криво, правда, но дело поправимо. Комуинтересно - могу отдать и описать, как онаработает. В текущем виде какая либодеятельность отключена, единственное чтоона делает - кладет битовую картусвободного места с указанного диска в файлi4.dat. В принципе, если вы хотите посмотреть,как распределяется свободное место навашем NTFS диске - тоже полезная программа :). Яиногда её использую для этого.

страницы: 1 Обсуждение этой статьи :: Версия для печати ::
Статьи по теме:
  • Краткий обзор клиентских версий Windows XP
  • Windows XP: что это такое и с чем ее едят
  • По просьбам трудящихся: Как корректно удалить WinXP/2K и восстановить Windows 95 или 98главнаяWindowsПрограммыИз рассылкиВокруг софта



  • Содержание раздела