>>> Фрагментация MFT
$MTF (Master File Table– Главная Таблица Файлов) это служебный файл, хранящий важнейшие структуры данных, без которых NTFS не может функционировать. Он хранит имена, атрибуты и схему размещения всех файлов на диске (в том числе и самого себя, поскольку все структуры данных в NTFS представлены файлами).
Производительность NTFS во многом зависит от скорости доступа к $MFT-файлу. Обычно он располагается в начале раздела и резервирует 12,5% от объема не отформатированного раздела (не всего жесткого диска!), что предотвращает его фрагментацию. Однако, если свободное пространство заканчивается, NTFS делит остаток резерва напополам, одна половина остается за $MFT, другая — отдается на растерзание пользовательским файлам. Этот процесс может происходить многократно, до тех пор пока весь резерв не будет исчерпан целиком. Что происходит с $MFT, когда ему некуда дальше расти? (А ведь он растет!) Система находит свободный регион за пределами зарезервированной зоны и размешает продолжение $MFT там. То есть, $MFT не обязательно должен быть сосредоточен в одном месте и сохраняет свою работоспособность даже если его размазать по всему диску. Естественно, за экономию дискового пространства приходится расплачиваться скоростью, точнее полным отсутствуем таковой. Самое неприятное, что сокращение зарезервированной области обратного хода не имеет и она никогда не восстанавливается назад. Если хотя бы один раз заполнить диск более чем на 100 – 12,5% == 87,5% мы получим пожизненные тормоза!
Штатный дефрагментатор не умеет дефрагментировать $MFT, а это значит, что мы обречены на деградацию и неуклонное снижение производительности. Полная версия дефрагментирует $MFT, но "подсаживаться" на нее никому не в радость. Лучше надергать травы и сварить молока.
Рисунок 6 не всем нравится NTFS
Существует "магический" способ, позволяющий настроить размер зарезервированной области, выделяемой под $MFT (в разных источниках он называется и как MFT Breathing Room, и как MFT's buffer zone — устоявшегося термина нет), однако, он пригоден только для вновь создаваемых/форматируемых NTFS-томов, и не воздействует на уже существующие.
Запустите Редактор Реестр и найдите ветвь HKLM\SYSTEM\CurrentControlSet\ Control\FileSystem и создайте там раздел NtfsMftZoneReservation типа REG_DWORD, если только она уже не была кем-то создана ранее. Теперь выберите значение по своему вкусу: 1 — резервирует 12,5% дискового пространства, 2 — 25%, 3 — 37,5%, 4 — 50%. Обратите внимание, что это именно резерв, а отнюдь не предельный размер $MFT, как утверждают некоторые левые твикеры. То есть это то пространство, которое будет выделено пользовательским файлам в последнюю очередь, но после того как это случиться, начнется необратимая фрагментация $MFT и тормоза. Сам же $MFT может расти сколько угодно.
Оценить приблизительный размер $MFT можно так: одна файловая запись (т. е. структура данных типа FILE Record) по умолчанию занимает 1 Кб. В грубом приближении, для каждого файла раздела создается одна FILE Record, однако для описания схема размещения сильно фрагментированных файлов может потребоваться несколько FILE Record. Тем не менее, в общем случае, размер $MFT в килобайтах равен количеству имеющихся файлов. На самом деле, это очень приближенная оценка, поскольку при удалении файлов немедленного уничтожения соответствующих им FILE Record не происходит и при создании новых файлов $MFT продолжает расти, вместо того, чтобы использовать уже освобожденные FILE Record'ы. Разумеется, система использует их, но… не сразу, а со временем. Конкретная стратегия нигде не описана и мыщъх подозревает, что она меняется от версии к версии, поэтому вывести точную формулу не получается, да она и не нужна. Возьмем раздел размером 1 ГГбайт. По умолчанию для $MFT файла будет выделено 128 Мбайт, что хватит для описания ~130.000 файлов. Да куда нам столько!
(Вообще-то, при желании возможно изменить размер зарезервированной области и без форматирования диска, и не только для $MFT, но и для любого файла, например, файла подкачки, реестра и т.д., однако, это довольно сложная операция, осуществляемая в суровых условиях дискового редактора, одно неверное движение которого способно угробить весь диск целиком, поэтому здесь эта тема не рассматривается, а всех любопытствующих мы отсылаем к "технике восстановления данных" крис касперси, где это подробно описано, а сами продолжаем повествование).
Рисунок 7 утилита Diskeeper из набора Microsoft Windows Resource Kit позволяет наблюдать за $MFT-файлов (выделен зеленым цветом)