Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #63, ФЕВРАЛЬ 2006 г.

разгон на четыре буквы

NEZUMI

Спецвыпуск: Хакер, номер #063, стр. 063-010-3


Штатный дефрагментатор не умеет дефрагментировать $MFT, следовательно, мы обречены на деградацию и неуклонное снижение производительности. Полная версия дефрагментирует $MFT, но «подсаживаться» на нее никому не в радость. Лучше надергать травы и сварить молока.

Для того чтобы настроить размер зарезервированной области, выделяемой под $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, но и для любого файла, например для файла подкачки, реестра и т.д. Однако эта операция довольно сложная, она осуществляется в суровых условиях дискового редактора, одно неверное движение которого способно угробить весь диск, поэтому здесь она не рассматривается.)

Назад на стр. 063-010-2  Содержание  Вперед на стр. 063-010-4