Дефрагментация тоже происходит интересно. Стандартный API дефрагментации в силу малопонятных ограничений оперирует не единичными кластерами, а блоками! Минимальный размер блока составляет 16 кластеров, причем начало блока должно быть кратно 16 кластерам в файле! Количество мелких "дыр" после дефрагментации только возрастает, а непрерывных областей свободного пространства практически совсем не остается.
Не забывайте, что перемещать что-либо внутрь зоны MFT тоже нельзя. Наверняка вы знакомы с системным сообщением примерно следующего вида:
На томе С: свободно 17%, но только 5% доступно для использования
дефрагментатора диска. Для эффективной работы дефрагментатор требует
по крайней мере 15% доступного свободного места.
"Недоступное" для дефрагментатора пространство находится внутри зоны MFT, потому что, как вы помните, при форматировании диска для хранения файла
$MFT
резервируется 12,5% от емкости тома. Затем, по мере исчерпания дискового пространства, файл $MFT усекается наполовину, а освободившееся за счет этого дисковое пространство отдается для хранения пользовательских файлов. Иначе говоря, для гарантированной работы дефрагментатора ему нужно
10% + 15% == 25%
свободного дискового пространства. Не слишком ли высока эта плата за дефрагментацию? Если же у вас свободно свыше 25%, настоятельно рекомендуется создать на диске временный файл и выполнить
seek
, чтобы заполнить все более или менее крупные "дыры", что не позволит дефрагментатору их изуродовать. Разумеется, после дефрагментации этот файл нужно удалить. К счастью, на сжатые файлы ограничение на минимальный размер блока в 16 кластеров не распространяется, поэтому мелкие файлы очень выгодно держать в сжатом состоянии, так как это существенно уменьшает фрагментацию тома. Чаще дефрагментируйте свой диск! Это не только увеличит быстродействие, но и упростит восстановление удаленных файлов с затертой файловой записью.
Вообще говоря, восстановление файлов — операция несложная, но нудная и кропотливая. Если по долгу службы или в силу иных обстоятельств вам приходится заниматься восстановлением постоянно, то этот процесс можно "автоматизировать", написав несколько простых утилит. Чтобы получить доступ к логическому разделу в Windows NT, достаточно открыть одноименное устройство с помощью функции
CreateFile("\\.\X:", GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0)
, где
X:
— буквенное обозначение логического диска. Более подробную информацию по данному вопросу можно найти в документации Platform SDK.
Не думайте, что все уже написано задолго до вас! Утилит, пригодных для профессионального восстановления данных, под NTFS до сих пор нет. Во всяком случае, их нет в открытой продаже. Имеющиеся же средства восстановления страдают массой нелепых ограничений. Например, они не могут ограничить диапазон секторного поиска только свободным или только занятым пространством. Так что дерзайте!
Методики изучения механизма фрагментации
Существуют, по меньшей мере, две методики исследования стратегии выделения дискового пространства: статическая и динамическая. При использовании статической методики мы просто запускаем дисковый редактор (предпочтение следует отдать DiskExplorer от Runtime Software) и анализируем списки отрезков уже существующих файлов, записанных в различное время и различными способами. Например, можно скопировать файл из одного каталога в другой или попеременно увеличивать размер нескольких файлов — стратегии выделения свободного пространства в обоих случаях будут различны (рис. 7.3). Статический подход полезен тем, что дает бесценный статистический результат для всего тома в целом. Однако этот метод позволяет определить лишь окончательный результат, но не путь, которым этот результат был достигнут.
Рис. 7.3. Статический анализ стратегии выделения дискового пространства, выполняемый при помощи DiskExplorer от Runtime Software
Утилита Diskmon.exe, разработанная Марком Руссиновичем (Mark Russinovich) и доступная для свободного скачивания на его сайте (http://www.sysinternals.com), позволяет заглянуть в "святая святых" файловой системы и увидеть, как именно она выделяет дисковое пространство для хранения файлов (рис. 7.4). Особенно интересно запускать Diskmon.exe параллельно с дефрагментатором или утилитой chkdsk, так как в этом случае все тайное сразу становится явным.
Рис. 7.4. Динамический анализ стратегии выделения дискового пространства, выполняемый при помощи Дискового Монитора Марка Руссиновича
Совет
Если, несмотря на все усилия, восстановить удаленный файл так и не удается, попробуйте отыскать его резервную копию. Многие приложения создают такие копии, но не все афишируют их присутствие. Не стоит забывать и о файле подкачки, временных файлах, дампе памяти и других источниках, которые могут хранить фрагменты восстанавливаемого файла. Если вам повезет, можно даже найти там весь файл целиком. Даже если эти источники информации тоже уже были удалены, возможно, принадлежащие им файловые записи еще не затерты, и тогда восстановление не займет много времени.
Восстановление разделов NTFS после форматирования
Представьте себе, что случилось самое страшное: вы потеряли весь раздел NTFS целиком. Возможно, вы случайно отформатировали его или пережили разрушительный дисковый сбой. Где-то там остались миллиарды байт бесценных данных, теперь уже недоступных операционной системе. Как вернуть информацию к жизни? До сих пор мы рассматривали лишь незначительные дисковые сбои и легкие разрушения данных наподобие ошибочно удаленных файлов. Теперь настал черед рассмотреть восстановление после тяжелых повреждений, при которых прежнее содержимое тома становится недоступно операционной системе. Причиной этому может быть, например, непредумышленное форматирование или искажение главной файловой таблицы.
Но не падайте духом! Из любых переделок NTFS выходит с минимальными потерями, и во всех этих случаях возможно полное восстановление данных, если к делу подойти правильно.
Проще всего начать с форматирования. Для экспериментов нам потребуется утилита format.com, входящая в стандартный комплект поставки Windows NT/2000/XP, а также дисковый раздел, не содержащий никакой ценной информации.
Совет
Лучше всего проводить эксперименты на виртуальной машине — Virtual PC или VMWare, эмулирующей жесткий диск и ускоряющей процедуру форматирования в сотни раз (рис. 7.5). Ведь время — это не только деньги, но и бесцельно прожитые годы, проведенные за созерцанием индикатора прогресса.
Рис. 7.5. Форматирование виртуального диска в среде VMWare
"Живой" винчестер лучше не трогать, во всяком случае, до тех пор, пока вы не научитесь его восстанавливать. Кроме виртуальной машины, можно использовать привод ZIP (который, кстати говоря, намного надежнее оптических накопителей) и форматировать дискеты под NTFS, поскольку штатная утилита форматирования это позволяет. С обычными трехдюймовыми дискетами дело обстоит сложнее. По мнению Microsoft, их емкости недостаточно для размещения всех структур данных, хотя, простейший расчет показывает, что это утверждение не соответствует действительности, что утилита NTFSflp от Марка Руссиновича, собственно говоря, и демонстрирует. Статья "NTFS Support for Floppy Disks" (http://www.sysinternals.com/ntw2k/freeware/ntfsfloppy.shtml) подробно описывает, как обхитрить систему, заставив ее отформатировать гибкий диск под NTFS. Следует, правда, отметить, что для этого вам потребуется SoftIce.