NTFS, собственная файловая система Windows 2000, непрерывно совершенствовалась со времени выпуска Windows NT 3.1. Она изначально обладала возможностями высокоуровневой файловой системы, но в Windows 2000 появились важные изменения, которые были сделаны в связи с необходимостью решать проблемы, возникающие на корпоративном уровне при переходе организаций на NT. Например, благодаря консолидации информации о безопасности повышается эффективность повседневной работы с NTFS; другие функции, такие, как управление квотами, должны использоваться в прикладных программах или активизироваться и применяться администратором.
На этот раз я расскажу о возможностях версии NTFS 5.0 (NTFS5), вошедшей в состав Windows 2000, и о влиянии новых функций на поведение и формат диска NTFS. Приступая к чтению статьи, важно четко понимать основные принципы построения дисковой структуры NTFS, а также иметь представление о главной таблице файлов (Master File Table, MFT), типах атрибутов и резидентных и нерезидентных атрибутах. Подробно основы NTFS описаны в статье Шона Дейли «NTFS5 против FAT32» (Windows 2000 Magazine/RE №4, 2000). Во врезке « Исследуем дисковые структуры NTFS » рассказано о некоторых инструментах просмотра и источниках информации об элементах внутренней структуры данных NTFS.
Файловая система флешки. Какую выбрать — ntfs, exFAT или fat32?
Универсальная индексация
Некоторые новые свойства NTFS5 основываются на фундаментальной особенности NTFS, именуемой индексацией атрибутов (attribute indexing). Индексация атрибутов заключается в сортировке элементов с атрибутом определенного типа при помощи эффективного механизма хранения, обеспечивающего быстрый просмотр.
В версиях NTFS, предшествовавших Windows 2000, индексация допускалась только для индексного атрибута $I30, в котором хранятся элементы каталога. В процессе индексации атрибутов элементы каталога сортируются по имени и сохраняются в B+ дереве (форма двоичного дерева, в каждом узле которого хранится несколько элементов).
На Рисунке 1 показана запись MFT каталога, в трех узлах которой содержится девять элементов, по три в каждом узле. Корень B+ дерева находится в атрибуте index root (корень индекса). В записи MFT каталога девять элементов не умещается, поэтому некоторые элементы приходится хранить в другом месте. Для этого NTFS выделяет два буфера размещения индексов (index allocation) для хранения двух записей (как правило, корень индекса и буферы размещения индексов мо-гут хранить элементы для более чем трех файлов, в зависимости от длины имен). Размер записи MFT — 1 Кбайт, а размер буферов размещения индексов — 4 Кбайт.
Получив VCN начального кластера индексного буфера, NTFS читает буфер размещения индексов и просматривает его в поисках совпадений. На Рисунке 1 первый же элемент индексного буфера совпадает с критерием поиска, и NTFS читает номер записи MFT e.bak из элемента каталога e.bak. В элементах каталога хранится и другая информация: в частности, временные отметки (например, время создания и последнего изменения), размер и атрибуты. NTFS хранит эту информацию и в записи MFT файла, но, благодаря дублированию информации в элементе каталога, читать запись MFT файла при составлении списков каталогов и выполнении простых файловых запросов не требуется.
Утилита без которой нельзя переехать на Mac. Как читать, писать, форматировать NTFS диски на Mac?
Элементы каталогов сортируются по алфавиту, и именно поэтому в списках каталогов NTFS файлы всегда располагаются в алфавитном порядке. В отличие от NTFS, FAT не сортирует каталог, поэтому списки FAT не сортированы. Кроме того, поскольку элементы NTFS хранятся в B+ дереве, механизм поиска конкретных файлов в больших каталогах очень эффективен; обычно достаточно просмотреть лишь часть каталога. Данный подход отличается от линейного метода FAT, при использовании которого для поиска одного имени иногда приходится просматривать весь каталог.
В версиях NTFS, предшествовавших Windows 2000, индексировались только имена файлов, но NTFS5 обеспечивает универсальную индексацию, сохраняя в индексах произвольные данные и сортируя элементы данных не по имени, а по другим параметрам. Универсальная индексация используется для управления дескрипторами безопасности, информацией о квотах, точках повторной обработки и идентификаторах файловых объектов, т. е. элементами NTFS5, о которых идет речь в данной статье.
Консолидированная безопасность
NTFS всегда располагала функциями безопасности, позволяющими администратору указать пользователей, которым разрешен или запрещен доступ к тем или иным файлам и каталогам. В версиях NTFS, предшествовавших Windows 2000, дескриптор безопасности каждого файла и каталога хранился в его собственном атрибуте безопасности. В большинстве случаев администраторы назначают единые параметры безопасности всему дереву каталогов, что приводит к дублированию дескрипторов безопасности для всех файлов и подкаталогов, к которым применяются параметры. Такое дублирование может привести к значительным потерям дискового пространства в многопользовательских средах, таких, как Windows 2000 Server Terminal Services и NT Server 4.0, Terminal Server Edition (WTS), где дескрипторы безопасности могут содержать элементы для многих учетных записей. NTFS5 оптимизирует выделение дискового пространства для хранения дескрипторов безопасности, сохраняя лишь один экземпляр каждого дескриптора безопасности на томе в центральном файле метаданных с именем $Secure.
Рисунок 2. Как работает файл метаданных $Secure.
В файле $Secure хранятся два индексных атрибута — $SDH и $SII — и атрибут потока данных, именуемый $SDS (см. Рисунок 2). NTFS5 назначает каждому уникальному дескриптору на томе внутренний идентификатор безопасности NTFS (не путать с SID, уникально идентифицирующим компьютеры и учетные записи пользователей) и хеширует дескриптор безопасности в соответствии с простым хеш-алгоритмом. Хеш-значение — потенциально неуникальное сокращенное представление дескриптора. Элементы в индексе $SDH отображают хеш-значения дескриптора безопасности на область хранения дескриптора безопасности в атрибуте данных $SDS, а индекс $SII отображает на область хранения дескриптора безопасности в атрибуте данных $SDS идентификаторы безопасности NTFS5.
Назначив дескриптор безопасности файлу или каталогу, NTFS получает хеш-значение дескриптора и просматривает индекс $SDH в поисках совпадений. NTFS сортирует элементы индекса $SDH согласно хеш-значению соответствующего дескриптора безопасности и сохраняет элементы в B+ дереве. Обнаружив для дескриптора совпадение в индексе $SDH, NTFS определяет смещение дескриптора безопасности элемента из записи $SDS Offset и считывает дескриптор безопасности из атрибута $SDS. Если совпадают хеш-значения, но не дескрипторы безопасности, то NTFS ищет еще один совпадающий элемент в индексе $SDH. Если NTFS обнаруживает полное совпадение, то файл или каталог, которому назначен дескриптор безопасности, может установить связь с дескриптором безопасности в атрибуте $SDS.
NTFS устанавливает связь, считывая идентификатор безопасности из элемента $SDH и сохраняя его в атрибуте $STANDARD_INFORMATION файла или каталога. В атрибуте $STANDARD_INFORMATION системы NTFS, который имеют все файлы и каталоги, хранится базовая информация о файле, в том числе атрибуты и временные метки. В Windows 2000 этот атрибут расширен, в нем появилась дополнительная информация, например идентификатор безопасности файла.
Если NTFS не обнаруживает в индексе $SDH элемента с дескриптором безопасности, совпадающим с назначаемым, значит, новый дескриптор уникален для тома, и NTFS назначает ему новый внутренний ID безопасности. Внутренние ID безопасности NTFS представляют собой 32-разрядные величины, а идентификаторы SID обычно в несколько раз длиннее, поэтому представление идентификаторов SID идентификаторами безопасности NTFS позволяет сэкономить место в атрибуте $STANDARD_INFORMATION. Затем NTFS добавляет дескриптор безопасности в атрибут $SDS, который сортируется в B+ дереве по ID безопасности NTFS, и дополняет индексы $SDH и $SII элементами, указывающими на смещение дескриптора в массиве данных $SDS.
Когда приложение пытается открыть файл или каталог, NTFS отыскивает дескриптор безопасности файла или каталога с помощью индекса $SII.
NTFS читает внутренний ID безопасности файла или каталога из атрибута $STANDARD_INFORMATION записи MFT, а затем использует индекс $SII файла $Secure для поиска элемента ID в атрибуте $SDS. По смещению в атрибуте $SDS система NTFS считывает дескриптор безопасности и завершает проверку безопасности. NTFS5 не удаляет элементы файла $Secure, даже если с ним не связано ни одного файла или каталога на томе. Наличие неудаленных элементов не приводит к значительной потере дискового пространства, так как число уникальных дескрипторов безопасности на большинстве томов, даже используемых в течение длительного времени, сравнительно невелико.
Благодаря универсальной индексации NTFS5 файлы и каталоги с одинаковыми параметрами безопасности эффективно используют общие дескрипторы. С помощью индекса $SII NTFS быстро отыскивает дескрипторы безопасности в файле $Secure в ходе проверок безопасности, а индекс $SDH позволяет быстро определить, имеется ли в файле $Secure ранее сохраненный дескриптор безопасности, пригодный для совместного использования с данным файлом или каталогом.
Точки повторной обработки
Точки повторной обработки позволяют приложению связать блок своих данных с файлом или каталогом, а диспетчеру объектов Object Manager — выполнить повторный поиск имени, когда прикладная программа обнаруживает точку повторной обработки. Помимо данных в точке повторной обработки хранится программный код, который идентифицирует принадлежность точки повторной обработки определенному приложению. Сами по себе точки повторной обработки бесполезны, но благодаря им программисты могут наращивать функциональность NTFS. В Windows 2000 предусмотрено несколько типов точек повторной обработки, в том числе точки монтирования томов, подсоединения каталогов NTFS и управления иерархическими хранилищами данных (Hierarchical Storage Management, HSM). Я объясню, как работают все эти функции, а затем подробно расскажу о реализации точек повторной обработки.
Любой том NTFS доступен лишь после того, как ему присвоено символьное обозначение. Точки монтирования NTFS5 позволяют привязать том к каталогу монтирования на родительском томе NTFS5, не присваивая символьного обозначения дочернему тому. В результате появляется возможность объединить несколько томов под одной буквой.
Например, если смонтировать том, содержащий каталог articles, к точке монтирования с именем C:documents, то можно использовать путь C:articlesdocuments для доступа к файлам каталога documents. Точка монтирования представляет собой точку повторной обработки, данные которой состоят из внутреннего имени тома. Внутреннее имя имеет форму ??Volume, где X — числа, образующие глобальный уникальный ID (GUID), присвоенный тому операционной системой.
Точки подсоединения каталогов NTFS похожи на точки монтирования, и диспетчер ввода/вывода и Object Manager выполняют подсоединение так же, как монтирование. Однако точки подсоединения устанавливают связь с каталогами, а не с томами. Точки подсоединения Windows 2000 эквивалентны символьным ссылкам UNIX (но в отличие от символьных ссылок UNIX, точки подсоединения нельзя применять к файлам).
Если создать точку подсоединения C:articlesdocuments, связанную с каталогом D:documents, то можно обращаться к файлам в D:documents, используя путь C:articlesdocuments. В точке подсоединения хранится информация о перенаправленном пути, и если NTFS обнаруживает точку подсоединения, то, как и в случае с точкой монтирования, диспетчер ввода/вывода изменяет имя и инициирует повторный поиск имени. Принцип действия точки подсоединения показан на Рисунке 3. Когда приложение открывает C:directory1file, NTFS обнаруживает точку повторной обработки в каталоге C:directory1, указывающую на каталог C:directory2. Диспетчер ввода/вывода изменяет имя на C:directory2file, и приложение в итоге открывает файл C:directory2file.
Рисунок 3. Пример точки повторной обработки.
В Windows 2000 нет инструментов для создания точек подсоединения, и Microsoft официально не поддерживает такие инструменты, так как использование путей с подсоединением может нарушить работу некоторых прикладных программ. Однако создавать подсоединения и составлять их списки можно с помощью инструмента Linkd из набора ресурсов Microsoft Windows 2000 Resource Kit или бесплатной утилиты Junction .
Повторный анализ пути используется не во всех точках повторной обработки. В системе HSM точки повторной обработки HSM служат для прозрачной миграции редко используемых файлов в резервное хранилище данных. Когда HSM переносит файл в архив, содержимое файла удаляется, а на его месте создается точка повторной обработки.
В данных точки повторной обработки содержится информация, используемая системой HSM для поиска файла на архивном носителе. Если впоследствии приложение обращается к хранящемуся в HSM файлу, то HSM-драйвер RsFilter.sys (Remote Storage Filter — фильтр удаленного хранения данных) перехватывает код повторной обработки, пересылаемый NTFS в Object Manager. Драйвер удаляет точку повторной обработки, извлекает файл с архивного носителя, а затем повторяет первоначальный запрос. На этот раз NTFS обращается к файлу, как к любому другому, и операции по перемещению данных не влияют на работу приложения.
Если точка повторной обработки связана с файлом или каталогом, то NTFS создает для нее атрибут с именем $Reparse. В этом атрибуте хранятся код и данные точки повторной обработки. Поэтому NTFS без труда обнаруживает все точки повторной обработки на томе, а в файле метаданных с именем $Extend$Reparse хранятся элементы, связывающие номера записи MTF файла и каталога точки повторной обработки с ассоцированными с ними кодами повторной обработки. NTFS сортирует элементы по номеру записи MTF в индексе $R.
Отслеживание квот
Экран 1. Активизация квотирования.
Рисунок 4. Как работает файл метаданных $Quota.
NTFS хранит информацию о квотировании в файле метаданных $Extend$Quota, состоящих из индексов $O и $Q. На Рисунке 4 показана структура этих индексов. Точно так же, как NTFS назначает каждому дескриптору безопасности уникальный внутренний ID безопасности, каждому пользователю назначается уникальный ID пользователя.
Когда администратор определяет информацию о квоте для пользователя, NTFS назначает ID пользователя, соответствующий идентификатору SID пользователя. В индексе $O создается запись, которая отображает SID на ID пользователя, индекс сортируется по ID пользователя; в индексе $Q создается запись для управления квотой. Запись управления квотой содержит величину квоты, выделенной пользователю, а также размер занимаемого дискового пространства.
Когда приложение создает файл или каталог, NTFS получает SID пользователя программы и отыскивает соответствующий ID пользователя в индексе $O. NTFS записывает ID пользователя в атрибут $STANDARD_INFORMATION нового файла или каталога и засчитывает все дисковое пространство, выделенное файлу или каталогу, в счет квоты пользователя.
Затем NTFS отыскивает элемент квоты в индексе $Q и определяет, не превысил ли пользователь своего порога предупреждения или дискового лимита. Если выделение нового пространства привело к превышению порога, то NTFS принимает соответствующие меры: например, заносит запись в журнал системных событий или запрещает пользователю создать файл или каталог. По мере изменения размера файла или каталога NTFS обновляет запись управления квотой, связанную с ID пользователя в атрибуте $STANDARD_INFORMATION. Система NTFS использует метод универсальной индексации для эффективной привязки ID пользователя к SID учетной записи и быстрого поиска информации о квоте пользователя по его идентификатору.
Продолжение следует.
Рассказом о квотировании заканчивается первая часть данной статьи. Во второй части мы продолжим знакомство с новыми возможностями NTFS: механизмом отслеживания распределенных связей и изменений томов, функциями для работы с разреженными файлами и шифрования данных.
Исследуем дисковые структуры NTFS
Для исследования внутренних дисковых структур NTFS существует несколько общедоступных инструментов. Среди них — DiskEdit, встроенный инструмент тестирования NTFS, по недосмотру Microsoft оказавшийся на компакт-диске Windows NT 4.0 Service Pack 4 (SP4), одна из самых мощных известных мне программ просмотра NTFS. DiskEdit, окно которого представлено на Экране A, позволяет ознакомиться со структурами, образующими файлы и каталоги, а также с данными атрибутов и преобразовать пути файлов и каталогов во входные коды таблицы MFT. Документация по DiskEdit отсутствует, но я опубликовал учебное пособие в сборнике бесплатных бюллетеней Sysinternals Newsletter ( http://www.sysinternals.com/newsletter.htm ). Чтобы использовать DiskEdit вместе с Windows 2000, необходимо скопировать файлы ifsutil.dll, ulib.dll, untfs.dll и ufat.dll из каталога winntsystem32 системы Windows NT в каталог, в котором нужно разместить DiskEdit.
Экран A. Утилита DiskEdit.
Те, у кого нет компакт-диска с SP4, могут воспользоваться утилитой NTFS File Sector Information Utility (NFI), поставляемой Microsoft в составе пакета OEM Support Tools по адресу: http:\support.microsoft.com/support/ kb/articles/q253/0/66.asp (помимо NFI в пакете OEM Support Tools имеются утилиты отладки и расширения отладчика ядра, с помощью которых администраторы и программисты могут анализировать аварийные дампы).
С помощью запускаемых из командной строки шаблонов NFI можно собрать информацию о конкретном файле или каталоге или обо всех файлах на томе, найти файл или каталог, в котором расположен данный логический сектор диска, а также отыскать файл или каталог, содержащий конкретный физический сектор. Например, команда
сообщает имя файла на томе C:, который содержится в 123 секторе тома. Чтобы исследовать структуры данных NTFS, можно воспользоваться этой же командой, не указывая номер сектора, и NFI выдаст подробную информацию об атрибутах всех файлов на диске. Можно ввести имя файла метаданных, описанных в статье, и просмотреть содержащиеся в них атрибуты. Например, если выполнить команду
на квотируемом томе, то будет видно, что файл $Quota содержит индексы с именами $O и $Q:
File 24
$Extend$Quota
$STANDARD_INFORMATION (resident)
$FILE_NAME (resident)
$INDEX_ROOT $O (resident)
$INDEX_ROOT $Q (resident)
Еще один источник информации о дисковой структуре NTFS — книга Гэри Неббета «Windows NT/2000 Native API reference» (издательство New Readers Publishing, 2000). В приложении приведены определения многих дисковых структур NTFS (в некоторых случаях отражены изменения, внесенные в Windows 2000) и содержится исходный текст Win32-программы, с помощью которой можно получить доступ к структурам данных в обход драйвера файловой системы NTFS и создать дамп содержимого тома.
Похожие публикации
- Восстановление информации на жестком диске. Утилиты для восстановления данных
- Windows 2003 Professional
- Windows Vista против Windows XP — битва насмерть
Источник: www.windxp.com.ru
Файловая система NTFS — хранение и восстановление данных
Основные отличия и ключевые моменты файловой системы, а также определим, был ли переход с FAT на NTFS оправданным.
Файловая система NTFS — хранение и восстановление данных
Перед массовым распространением операционных систем семейства Windows NT (2000, XP, Vista, 7, 10, Server и т.д.) большинство продуктов Microsoft, а также MS DOS использовали файловую систему FAT, которая была разработана Б. Гейтсом еще в середине 80-ых годов. FAT зарекомендовала себя как надежная и проверенная файловая система (ФС), но с развитием технологий и увеличением объемов накопителей, Microsoft представили NTFS – новую ФС, которая активно используется и до сих пор.
NTFS – «файловая система новой технологии»
ФС FAT была разработана специально для использования с дискетами, которые ушли в прошлое с массовым распространением компакт-дисков и USB-накопителей. FAT плохо подходил для масштабирования, а максимальный размер файла в 4 гигабайта накладывал множество ограничений. Помимо этого, устаревший формат файловой системы не обладал требуемыми функциями безопасности, а также не позволял производить восстановление удаленной информации. Эти причины заставили Microsoft заняться разработкой новой ФС.
Интересный факт: по состоянию на 2016 год производством 3.5” дискет занимается всего один завод в Тайване.
Во время разработки NTFS, Microsoft использовали некоторые наработки, а также отдельные моменты уже существующих ФС FAT и HPFS (файловая система для операционной системы OS/2, которая разрабатывалась Microsoft совместно с IBM). После нескольких лет активной разработки, Microsoft представили свою новую ФС NTFS в Windows NT 3.1 – специализированной ОС для серверов и рабочих станций.
NTFS представляет собой необычную файловую систему, которая основана на… файлах. Действительно, каждый элемент NTFS представляет собой файл. Даже сама структура NTFS: её журнал, главная таблица файлов (MFT) и другие элементы построены и ориентированы непосредственно на файлы.
Разберемся с основными моментами и преимуществами NTFS более детально.
Масштабируемость
Microsoft занимались разработкой ФС NTFS во времена, когда объем в 1 гигабайт считался весьма значительным. Тем не менее, разработчики предвидели мощный скачок цифровых технологий, поэтому новая файловая система создавалась «с запасом». Таким образом максимальный теоретический размер тома ограничивается 16 экзабайтами, что равно примерно одному миллиону терабайт. В данный момент не существует такого носителя для частного использования, который бы хоть-сколько приблизился к этой отметке. С этого можно сделать вывод, что NTFS имеет превосходную масштабируемость, значительно обогнавшую своё время.
Интересный факт: одним из самых объемных и в то же время мобильных накопителей является хранилище на базе грузовика Snowmobile от Amazon. Его емкость составляет 100000 терабайт, а само запоминающее устройство транспортируется в морском контейнере, установленном на 18-ти колесном тягаче. Такое решение необходимо для быстрой транспортировки сверх объёмных архивов компаний, государственных корпораций и других учреждений.
Надёжность
Надежность никогда не была сильной стороной файловой системы FAT. Из-за особенности её строения, даже незначительное повреждение таблицы размещения файлов может со временем привести к потере значительного количества информации .
В NTFS такая проблема была нивелирована внедрением теневых копий тома , а также автоматическим ведением журнала файловой системы , куда фиксируются все записи. В случае сбоя, система может обратиться к записи в журнале и откатить все незафиксированные изменения .
В то же время, функция теневого копирования, не только позволяет восстанавливать данные, но и выбирать необходимые перезаписанные версии файлов (включая системные компоненты, настройки, программные компоненты и т.д.), которые для удобства, могут записываться на сторонний носитель.
Безопасность
ФС FAT32 напрочь лишена встроенной системы безопасности. У неё отсутствует управление доступом, шифрование системы, а также уровневое шифрование с привязкой к конкретной учетной записи.
NTFS обладает всеми вышеописанными функциями, а также предлагает дополнительный функционал безопасности.
Безопасность на уровне ОС включает в себя списки контроля доступа , управляющие разрешениями для каждого файла, папки или другого объекта. В списках указывается какие пользователи или группы (локальные или сетевые) могут выполнять с объектами различные манипуляции (только чтение, изменение, удаление, без доступа и т.д.).
Стоит отметить, что подобная мера безопасности не является помехой для восстановления утерянной информации. К примеру, утилита для восстановления данных RS NTFS Recovery превосходно справляется со своей задачей, обходя разрешения, установленные файловой системой.
Тем не менее, в NTFS присутствует еще несколько мер безопасности, о которых следует рассказать более детально.
NTFS может производить шифрование на уровне отдельного объекта , что позволяет шифровать конкретные папки и файлы от других пользователей на одном компьютере. Суть этого состоит в том, что выбранные файлы для шифрования будут автоматически расшифровываться при входе с нужной учетной записи. В то же время, для всех других – объекты останутся недоступными.
Важно заметить, если пользователь утеряет данные для доступа к учетной записи (пароль может сбросить администратор компьютера или его могут изменить с помощью вредоносного ПО), скорее всего файлы так и останутся заблокированными без возможности прочтения или разблокировки.
Отметим, зашифрованные файлы в NTFS сохраняют свою структуру, поэтому удаленные зашифрованные данные можно восстановить при помощи RS Partition Recovery или RS NTFS Recovery точно так же, как и файлы, не подвергающиеся шифрованию. К тому же, восстановленные файлы будут сохранять шифрование, которое можно снять при наличии соответствующего пароля.
Встроенное шифрование NTFS отлично подходит для защиты данных на системном уровне (между пользователями одного ПК), но для большей безопасности в Windows присутствует дополнительная система шифрования BitLocker, предназначенная для шифрования целых логических разделов.
Это позволяет безопасно пользоваться и работать нескольким пользователям за одним компьютером, а также предотвращать офлайн-атаки (к примеру, когда злоумышленники извлекли жесткий диск с ценной информацией и попытались считать его на другом ПК, разделы не будут доступны, пока не будет введен специальный ключ для дешифровки).
Важно! После введения ключа BitLocker, зашифрованные разделы станут доступны всем пользователям ПК.
Технология сжатия NTFS
Другой особенностью файловой системы NTFS является возможность сжимать содержимое файлов и папок для экономии места на носителе. Данная функция достаточно быстро работает, а также позволяет считывать отдельные фрагменты данных, без необходимости распаковывания целого файла.
Сжатый файл воспринимается файловой системой NTFS в виде обычной информации, поэтому при утере сжатых данных, пользователь может воспользоваться RS Partition Recovery или RS NTFS Recovery для восстановления сжатой информации без каких-либо потерь.
Альтернативные потоки данных в NTFS
В NTFS реализована поддержка альтернативных потоков данных, которые изначально были разработаны для обеспечения совместимости различных файловых систем.
В данный момент альтернативные потоки данных используются в целях безопасности, поскольку данная технология позволяет ставить «метки» на файлах, по которым система в автоматическом режиме может определять потенциально опасные объекты . В метках могут содержаться данные об производителе или авторе файла, а также о его происхождении.
Помимо этого, в альтернативных потоках могут находиться абсолютно любые файлы с практически произвольным размером, который может превышать размер файла из основного потока. Такая возможность альтернативных потоков данных является серьезной брешью в безопасности, которой часто пользуются разработчики вредоносного ПО. К счастью, большинство современных антивирусов имеют надежный системы сканирования, которые также проверяют информацию в альтернативных потоках.
Утилита для восстановления информации RS NTFS Recovery работает с альтернативными потоками данных, поэтому удаленные файлы после восстановления будут сохранять все потоки и их содержимое.
Разреженные файлы
Необычной дополнительной особенностью NTFS является работа с так называемыми «Разреженными файлами» («Sparse files»).
В разреженных файла неиспользуемые (пустые) области представляются в виде метаданных, которые в свою очередь не занимают физического места на носителе .
Чем это полезно? Представим базу данных, которая состоит из одного главного файла объемом в несколько терабайт. Чтобы создать или сохранить файл такого размера на жестком диске, системе может понадобиться значительное количество времени для заполнения неиспользуемого пространства накопителя нулями . При использовании NTFS данный процесс можно значительно ускорить, поскольку ФС поддерживает указание пустых областей в виде ссылок на метаданные .
Точки повторной обработки
Точки повторной обработки или Reparse Points позволяют создавать в файловой системе NTFS жесткие или символические ссылки , при помощи которых пользователь может выполнять различные манипуляции с данными и их местоположением. Более детально узнать про данную функцию можно в статье: « Символические и жесткие ссылки в Windows », где приведены примеры их создания, а также их основные возможности.
Отметим, программа RS NTFS Recovery , как и другие утилиты от Recovery Software , отлично справляются с подобными данными.
Источник: dzen.ru
Программа ntfs для чего
NTFS (NT File System) – файловая система, которая разрабатывалась Microsoft специально для Windows NT. Написание NTFS шло параллельно с разработкой самой этой ОС. Известно, что NT зарождалась не в вакууме; в ее основу были положены идеи серверной системы VMS «high-end» класса компании DEC (в 1998 она была куплена Compaq, которая затем была поглощена Hewlett-Packard).
ОС VMS работала на железе DEC, включая 32-битные компьютеры VAX и 64-битные машины на основе процессора Alpha. Каким-то образом команда, работавшая над созданием VMS, перекочевала в Microsoft для создания NT. Во главе этой команды находился Дэйв Катлер (Dave Cutler), крестный отец NT, разработчик ядра системы.
Основная версия причины перехода Катлера в Microsoft – закрытие проекта разработки нового RISC-процессора и соответствующей ОС, в котором он работал вместе со своей командой инженеров. В результате, не без участия Билла Гейтса, Дэйв со своей командой оказался в Microsoft. Кстати, Гейтс был очень заинтересован в создании новой ОС, потому что у Microsoft на тот момент была только Windows, пригодная для домашних пользователей, а выхода на рынок серверов не было.
Архитекторами NTFS были Том Миллер (Tom Miller) и Гэри Кимура (Gary Kimura), которые работали программистами в команде Катлера в DEC. Так же, как NT влила в себя идеи VMS, NTFS основывалась на идеях файловой системы VMS – Files-11, в которой, в частности, поддерживались списки контроля доступом (ACL), а также ввод/вывод, ориентированный на записи (record-oriented I/O) [1] [2].
- Восстанавливаемость. В случае сбоя диска, NTFS должна привести себя в рабочее, целостное состояние. В лучшем случае, NTFS вернется в состояние, которое непосредственно предшествовало сбою, в худшем какая-то пользовательская информация может быть потеряна, но том останется в рабочем состоянии. Восстанавливаемость реализуется через модель обработки транзакций. Транзакция не что иное, как операция I/O, которая изменяет структуры NTFS. Если такая операция не завершается полностью, то NTFS откатывает свои структуры данных до состояния перед выполнением транзакции.
- Защита от несанкционированного доступа. Файлы и каталоги NTFS обладают дескрипторами защиты, что позволяет контролировать доступ к ним в рамках общей модели безопасности NT. Подобными дескрипторами защиты обладают все объекты NT (процессы, потоки, разделы и пр.).
- Отказоустойчивость. Если восстанавливаемость гарантирует целостность тома после сбоя, то отказоустойчивость может гарантировать восстановление пользовательских данных. Это реализуется за счет избыточности данных и RAID. Дублирование данных осуществляется на уровне диспетчера томов, который копирует записываемые данные на другом диске.
- Диски и файлы большого объема. В NTFS реализуется очень эффективная поддержка больших дисков и файлов. Для хранения номера кластера используется 64 бита или 8 байт. Т. о. NTFS позволяет адресовывать 2^64 кластеров, при стандартном размере кластера в 4KB и максимальном 64KB. Под размер файлов также выделено 8 байт, что позволяет адресовывать очень большие файлы.
- Поддержка POSIX. Также как NT, NTFS полностью соответствует стандарту POSIX 1003.1. Главная особенность формата заключается в назначении имен файлам с учетом регистра символов, а также реализация жестких связей (hard links). Жесткие связи позволяют файлам из разных каталогов ссылаться на одни и те же данные. Жесткая связь создается для существующего файла и указывает на его данные, хотя для пользователя такой объект выглядит как файл.
Разработка новой файловой системы, которая должна удовлетворять вышеперечисленным требованиям очень сложный процесс и здесь разработчики учли опыт MS в разработке FAT и HPFS. Том Миллер так описывает процесс разработки новой ФС:
Работа над файловой системой – это, пожалуй, самое ужасное [при разработке операционной системы]. Если обнаружилась в ядре системы, или что-нибудь странное происходит с дисплеем, то можно просто перезагрузить машину и продолжать работу. Но если что-то случилось с жестким диском, то часто дальнейшая работа вообще невозможна. Всех страшно раздражают ошибки в файловой системе. Никому не хочется, чтобы его постоянная память стала не постоянной.
- Версия 1.0. Была выпущена вместе с NT 3.1 в середине 1993. Включает самый основной функционал ФС.
- Версия 1.1. Была выпущена вместе с NT 3.5 в 1994.
- Версия 1.2. Была написана для NT 3.51 (середина 1995) и для NT 4 (середина 1996); последняя, также известна как «NTFS 4.0». Добавлена поддержка сжатия файлов, именованных потоков, защита файлов на основе списков ACL.
- Версия 3.0. Поставляется с Windows 2000 (известна как «NTFS V5.0»). Добавлена поддержка дисковых квот, шифрования, разреженных файлов (sparse files), точек повторного разбора (reparse points), служебный метакаталог $Extend и его файлы
- Версия 3.1. Поставляется с Windows XP (осень 2001, «NTFS V5.1»), Windows 2003 (весна 2003, «NTFS V5.2»), Windows Vista (середина 2005, «NTFS V6.0»).
Общие концепции NTFS
- Метафайлы NTFS – служебные файлы, используемые NTFS для поддержания своей внутренней структуры.
- Том (volume) NTFS – раздел, отформатированный под NTFS.
- Главная загрузочная запись (Master Boot Record) – первый сектор жесткого диска, который содержит загрузочный код (bootstrap code) и таблицу разделов (partition table). Загрузочный код читает таблицу разделов, ищет активный (флаг 0x80) раздел и передает управление на его первый сектор (загрузочный сектор).
- Загрузочный сектор (boot sector) – первый сектор тома, в котором хранятся параметры ФС. Также в загрузочный сектор входит код, который отвечает за чтение ntldr в память. Такой код несет смысл только если том является системным (т. е. только для диска C). В процессе монтирования тома, ntfs.sys проводит валидацию загрузочного сектора и признает его своим в случае совпадение необходимых параметров.
- Системный том (system volume) – том, на котором располагается ntldr. Для NT системным томом может быть только первый том – С:. Загрузочный том (boot volume) – том, на котором располагается папка windows (winnt).
Формат загрузочного сектора NTFS описывается следующей таблицей (как и все остальные описываемые структуры, наилучшим руководством по ним может служить книга Брайана Кэрриэ «Криминалистический анализ файловых систем»).
0x0 | 3 | Команда перехода на загрузочный код. |
0x3 | 8 | Сигнатура ‘NTFS ’. |
0xB | 2 | Количество байт на сектор |
0xD | 1 | Количество секторов в кластере. |
0xE | 2 | Должно равняться нулю. |
0x10 | 1 | Должно равняться нулю. |
0x11 | 2 | Должно равняться нулю. |
0x13 | 2 | Должно равняться нулю. |
0x15 | 1 | Тип носителя |
0x16 | 2 | Должно равняться нулю. |
0x18 | 2 | Должно равняться нулю. |
0x1A | 2 | Должно равняться нулю. |
0x1C | 4 | Не используется. |
0x20 | 4 | Должно равняться нулю. |
0x24 | 4 | Не используется. |
0x28 | 8 | Число секторов в томе. |
0x30 | 8 | Стартовый кластер MFT. |
0x38 | 8 | Стартовый кластер копии MFT. |
0x40 | 1 | Кластеров на запись MFT. |
0x41 | 3 | Не используется. |
0x44 | 1 | Кластеров на индексную запись. |
0x45 | 3 | Не используется. |
0x48 | 8 | Серийный номер тома. Уникален. Создается в процессе форматирования. |
0x50 | 4 | Не используется. |
0x54 | 426 | Загрузочный код. |
0x1FE | 2 | Маркер конца. Равен 0xAA55. |
Соответствующие структуры имеют вид (определения взяты из исходников Linux-NTFS Project, там же можно найти очень много информации о структурах ntfs). Так же как и FAT, NTFS хранит часть информации в блоке, называемом BIOS Parameter Block, который входит в состав boot sector.
typedef struct _BIOS_PARAMETER_BLOCK < /*0x0b*/USHORT bytes_per_sector; /* Размер сектора, в байтах */ /*0x0d*/UCHAR sectors_per_cluster; /* Секторов в кластере */ /*0x0e*/USHORT reserved_sectors; /* должен быть ноль */ /*0x10*/UCHAR fats; /* должен быть ноль */ /*0x11*/USHORT root_entries; /* должен быть ноль */ /*0x13*/USHORT sectors; /* должен быть ноль */ /*0x15*/UCHAR media_type; /* тип носителя, 0xf8 = hard disk */ /*0x16*/USHORT sectors_per_fat; /* должен быть ноль */ /*0x18*/USHORT sectors_per_track; /* не используется */ /*0x1a*/USHORT heads; /* не используется */ /*0x1c*/ULONG hidden_sectors; /* не используется */ /*0x20*/ULONG large_sectors; /* должен быть ноль */ /* sizeof() = 25 (0x19) bytes */ >BIOS_PARAMETER_BLOCK, *PBIOS_PARAMETER_BLOCK; typedef struct _NTFS_BOOT_SECTOR < /*0x00*/UCHAR jump[3]; /* переход на загрузочный код */ /*0x03*/ULARGE_INTEGER oem_id; /* сигнатура «NTFS «. */ /*0x0b*/BIOS_PARAMETER_BLOCK bpb; /*0x24*/UCHAR physical_drive; /* не используется */ /*0x25*/UCHAR current_head; /* не используется */ /*0x26*/UCHAR extended_boot_signature; /* не используется */ /*0x27*/UCHAR reserved2; /* не используется */ /*0x28*/ULARGE_INTEGER number_of_sectors; /* Количество секторов на томе. */ /*0x30*/ULARGE_INTEGER mft_lcn; /* Стартовый кластер MFT. */ /*0x38*/ULARGE_INTEGER mftmirr_lcn;/* Стартовый кластер копии MFT */ /*0x40*/CHAR clusters_per_mft_record; /* Размер MFT записи в кластерах. */ /*0x41*/UCHAR reserved0[3]; /* зарезервировано */ /*0x44*/CHAR clusters_per_index_record;/* Размер индексной записи в кластерах. */ /*0x45*/UCHAR reserved1[3]; /* зарезервировано */ /*0x48*/ULARGE_INTEGER volume_serial_number; /* уникальный серийный номер тома */ /*0x50*/ULONG checksum; /* не используется */ /*0x54*/UCHAR bootstrap[426]; /* загрузочный-код */ /*0x1fe*/USHORT end_of_sector_marker; /* конец загрузочного сектора, сигнатура 0xaa55 */ /* sizeof() = 512 (0x200) bytes */ >NTFS_BOOT_SECTOR, *PNTFS_BOOT_SECTOR;
При проверке факта, что том является NTFS, необходимо прежде всего проверить сигнатуру «NTFS ».
if( NtfsBootSector->oem_id.QuadPart != 0x202020205346544E ) return FALSE;
Потом некоторые параметры бут сектора, как например кол-во байт в секторе и количество секторов в кластере на кратность двойки в степени.
if( NtfsBootSector->bpb.bytes_per_sector < 0x100 || NtfsBootSector->bpb.bytes_per_sector > 0x1000 ) return FALSE; //check sectors per cluster switch( NtfsBootSector->bpb.sectors_per_cluster )
Все проверки в функции ntfs_boot_sector_is_ntfs из Linux-NTFS Project.
Таблица MFT
Об MFT слышал, наверное, каждый и информация по ней есть и у Руссиновича и в статьях, например у Касперски в «NTFS изнутри и снаружи», все же я продублирую и обобщу ее.
В NTFS ключевым местом для хранения информации о файлах является таблица MFT (Master File Table). В ней содержится информацию обо всех файлах в системе. MFT состоит из записей (mft record) фиксированного размера, размер записи указывается в параметре clusters_per_mft_record структуры бут сектора.
- Любой объект файловой системы представляется хотя бы одной записью в MFT и, по сути, является файлом. Например, бут сектор — файл $Boot, сам MFT – $Mft.
- Файл представляет собой набор атрибутов, в которых хранятся все данные. Например, атрибут $STANDART_INFORMATION хранит информацию о файле. Атрибутом также являются и данные. Если файл имеет альтернативные потоки (streams), то таких атрибутов несколько, по числу потоков.
- LCN – смещение в кластерах относительно тома, VCN – смещение в кластерах относительно файла. Для перевода LCN в смещение на томе следует использовать формулу offs = lcn * bytes_per_sector * sectors_per_cluster, соответствующие значения хранятся в BIOS_PARAMETER_BLOCK в бут секторе.
MFT состоит из заголовка записи MFT_RECORD, за которым следуют данные записи – атрибуты.
typedef struct _MFT_RECORD < /*0x00*/ ULONG signature; //сигнатура ‘FILE’ /*0x04*/ USHORT usa_offs; /*0x06*/ USHORT usa_count; /*0x08*/ ULARGE_INTEGER lsn; /*0x10*/ USHORT sequence_number; /*0x12*/ USHORT link_count; /*0x14*/ USHORT attrs_offset; /*0x16*/ USHORT flags;//флаги, см. MFT_RECORD_FLAGS /*0x18*/ ULONG bytes_in_use; /*0x1C*/ ULONG bytes_allocated; /*0x20*/ ULARGE_INTEGER base_mft_record; //адрес базовой MFT-записи /*0x28*/ USHORT next_attr_instance; /*0x2A*/ USHORT reserved; /*0x2C*/ ULONG mft_record_number; //size — 48 b >MFT_RECORD, *PMFT_RECORD;
Начало записи MFT идентифицируется сигнатурой “FILE”. Флаги указывают, является ли запись каталогом, или файлом и используется ли запись вообще.
typedef enum < MFT_RECORD_NOT_USED = 0, //запись не используется MFT_RECORD_IN_USE = 1, //запись используется MFT_RECORD_IS_DIRECTORY = 2 //запись описывает каталог >MFT_RECORD_FLAGS;
Если файловая запись используется и описывает каталог, тогда поле flags равно MFT_RECORD_IN_USE | MFT_RECORD_IS_DIRECTORY (3). Для файла, flags равен MFT_RECORD_IN_USE.
Записи адресуются через структуру
struct MFT_REF < unsigned __int64 index : 48; //индекс элемента в таблице unsigned __int64 ordinal : 16; //порядковый номер >;
Для адресации записей используется младшее поле index, а ordinal нужно для определения несоответствий внутри самой файловой системы.
Смещение первого элемента MFT (в кластерах), т. е. его начало хранится в поле mft_lcn. Размер записи хранится в поле clusters_per_mft_record. Особенность этого поля заключается в том, что оно может хранить отрицательное значение, в таком случае это указание на то, что размер записи задается не в кластерах, а в байтах, причем задается не количество байт, а отрицательное значение степени двойки (логарифм двойки). Для получения количества байт нужно сделать инверсию значения в положительное и возвести двойку в степень этого значения. Например, так.
if( boot_sect.clusters_per_mft_record > 0 ) bpmftrec = bps * spc * boot_sect.clusters_per_mft_record; else bpmftrec = 2
Задача с поиском элемента в MFT осложняется тем, что сам файл MFT может быть фрагментирован и тогда линейная индексация его как массива не представляется возможной. Для последующего чтения записей в MFT, лучше сразу скэшировать информацию об отрезках для файла MFT.
Первые записи MFT стандартизированы и описывают служебные файлы самой NTFS.
Утилита Руссиновича nfi позволяет сдампить элементы в MFT и просмотреть их атрибуты, например, nfi C.
Источник: citforum.ru