Точка повторной обработки NTFS — это тип объекта файловой системы NTFS . Она доступна с NTFS v3.0, обнаруженной в Windows 2000 или более поздних версиях. Точки повторной обработки предоставляют способ расширения файловой системы NTFS. Точка повторной обработки содержит тег повторной обработки и данные, которые интерпретируются драйвером фильтра файловой системы, идентифицированным тегом. Microsoft включает несколько тегов по умолчанию, включая символические ссылки NTFS , точки соединения каталогов , точки монтирования томов и сокеты домена Unix . Кроме того, точки повторной обработки используются в качестве заполнителей для файлов, перемещенных системой удаленного хранения данных Windows 2000. Они также могут действовать как жесткие ссылки [ требуется ссылка ] , но не ограничиваются указанием на файлы на том же томе: они могут указывать на каталоги на любом локальном томе. Функция [ which? ] унаследована от ReFS . [1]
Драйвер NTFS-3G с открытым исходным кодом реализует встроенную поддержку точек повторной обработки типа ссылок, а именно символических ссылок и точек соединения. Система фильтров плагинов доступна для обработки дополнительных типов точек повторной обработки, что позволяет читать файлы с дедупликацией фрагментов, файлы, сжатые системой, и файлы OneDrive . [2]
Точка повторной обработки имеет следующую общую структуру в форме структуры C:
struct REPARSE_BUFFER { uint32_t ReparseTag ; uint32_t ReparseDataLength ; uint16_t Reserved ; uint8_t DataBuffer []; // гибкий член массива }
Тег повторной обработки [3] уникален для каждого типа точки повторной обработки. Он определяет, какому обработчику точки повторной обработки (обычно драйверу фильтра файловой системы) менеджер ввода-вывода делегирует обработку. [4] Microsoft предоставляет документацию по некоторым «публичным» типам тегов. [5]
Точки монтирования томов похожи на точки монтирования Unix , где корень другой файловой системы прикрепляется к каталогу. В NTFS это позволяет монтировать дополнительные файловые системы без необходимости отдельной буквы диска (например, или ) для каждой.C:
D:
После того, как том был смонтирован поверх существующего каталога другого тома, содержимое, ранее указанное в этом каталоге, становится невидимым и заменяется содержимым корневого каталога смонтированного тома. [ необходима цитата ] Смонтированный том может по-прежнему иметь свою собственную букву диска, назначенную отдельно. Файловая система не позволяет томам быть взаимно смонтированными друг на друга. Точки монтирования тома могут быть сделаны либо постоянными (автоматически перемонтированными после перезагрузки системы), либо не постоянными (должны быть вручную перемонтированы после перезагрузки). [ необходима цитата ]
Смонтированные тома могут использовать другие файловые системы, а не только NTFS, возможно, со своими собственными настройками безопасности и перераспределением прав доступа в соответствии с политикой удаленной файловой системы.
Заменяющие имена точек монтирования томов используют форму пространства имен NT \??\DeviceName\
. [6] [7] [4] Соединения обычно используют \??\<drive>:\
для ссылки на том с существующей буквой драйвера, в то время как истинные точки монтирования томов используют \??\Volume{<guid>}
для ссылки на любой том. Пути UNC недопустимы для соединений. [8]
Соединения каталогов определяются с использованием того же самого механизма (и reparse tag: IO_REPARSE_TAG_MOUNT_POINT
), что и точки монтирования томов. Единственное отличие состоит в том, что их заменяющие имена указывают на подкаталог другого тома, который обычно уже имеет букву диска. Эта функция концептуально похожа на символические ссылки на каталоги в Unix , за исключением того, что целью в NTFS всегда должен быть другой каталог (типичные файловые системы Unix позволяют цели символической ссылки быть любым типом файла). [4]
Например, каталог C:\exampledir
с атрибутом соединения каталогов, содержащим ссылку на, D:\linkeddir
будет автоматически ссылаться на каталог, D:\linkeddir
когда к нему будет обращаться приложение пользовательского режима. [9]
Соединения каталогов (которые можно создать с помощью команды MKLINK /J junctionName targetDirectory
и удалить с помощью RMDIR junctionName
из командной строки) являются постоянными и разрешаются на стороне сервера, поскольку они совместно используют ту же область безопасности локальной системы или домена, на которой смонтирован родительский том, и те же настройки безопасности для его содержимого, что и для содержимого целевого каталога; однако само соединение может иметь различные настройки безопасности. Отмена связи соединения каталогов не удаляет файлы в целевом каталоге.
Некоторые соединения каталогов устанавливаются по умолчанию в Windows Vista для совместимости с предыдущими версиями Windows, например, Documents and Settings
в корневом каталоге системного диска, который ссылается на Users
физический каталог в корневом каталоге того же тома. Однако они скрыты по умолчанию, и их параметры безопасности настроены так, что Windows Explorer откажется открывать их из Shell или в большинстве приложений, за исключением локального встроенного пользователя SYSTEM или локальной группы Administrators (обе учетные записи пользователей используются установщиками системного программного обеспечения). Это дополнительное ограничение безопасности, вероятно, было сделано для того, чтобы пользователи не находили явные дубликаты файлов в присоединенных каталогах и не удаляли их по ошибке, поскольку семантика соединений каталогов не такая же, как для жестких ссылок; подсчет ссылок не используется для целевого содержимого и даже для самого контейнера, на который указывает ссылка. [ необходима цитата ]
Соединения каталогов представляют собой мягкие ссылки (они сохранятся даже при удалении целевого каталога), работающие как ограниченная форма символических ссылок (с дополнительным ограничением на местоположение цели), но это оптимизированная версия, позволяющая быстрее обрабатывать точку повторной обработки, с которой они реализованы, с меньшими накладными расходами, чем более новые символические ссылки NTFS, и могут быть разрешены на стороне сервера (когда они находятся в удаленных общих каталогах). [ необходима цитата ]
Символические ссылки (или мягкие ссылки) были введены в Windows Vista. [10] Символические ссылки разрешаются на стороне клиента. Поэтому, когда символическая ссылка является общей, цель подчиняется ограничениям доступа на стороне клиента, а не сервера. [ необходима цитата ]
Символические ссылки могут быть созданы либо для файлов (созданных с помощью MKLINK symLink targetFilename
), либо для каталогов (созданных с помощью MKLINK /D symLinkD targetDirectory
), но (в отличие от символических ссылок Unix) семантика ссылки должна быть предоставлена вместе с созданной ссылкой. Однако цель не обязательно должна существовать или быть доступной при создании символической ссылки: когда символическая ссылка будет доступна и цель будет проверена на доступность, NTFS также проверит, имеет ли она правильный тип (файл или каталог); она вернет ошибку «не найдено», если существующая цель имеет неправильный тип. [ необходима цитата ]
Они также могут ссылаться на общие каталоги на удаленных хостах или файлы и подкаталоги в общих каталогах: их цель не монтируется немедленно при загрузке, а только временно по требованию при открытии их с помощью API OpenFile()
или CreateFile()
. Их определение постоянно на томе NTFS, где они созданы (все типы символических ссылок могут быть удалены, как если бы они были файлами, с помощью DEL symLink
командной строки или пакета). [ необходима цитата ]
Данные символической ссылки похожи на данные точки монтирования, в том, что оба используют путь пространства имен NT. Разница в том, что символические ссылки принимают пути UNC , но не монтирования Volume{guid}. [8]
Отслеживание распределенных ссылок позволяет приложениям отслеживать файлы, ярлыки оболочек или ссылки OLE, даже если они были переименованы или перемещены на другой том в пределах той же машины, домена или рабочей группы. [11] Отслеживание реализовано как системная служба, которая использует индекс идентификатора объекта (OID), сохраненный в метафайле . [12] Когда приложение запрашивает отслеживание файла или каталога, служба отслеживания создает запись OID, которая указывает на файл, а операция переименования, копирования или перемещения файла на том NTFS v3 также копирует идентификатор объекта. Это позволяет службе отслеживания в конечном итоге найти целевой файл.
Когда есть несколько каталогов с разными, но похожими файлами, некоторые из этих файлов могут иметь одинаковое содержимое. Хранилище отдельных экземпляров , встречающееся в Windows Server 2000 — Windows Storage Server 2008, позволяет объединять идентичные файлы в один файл и создавать ссылки на этот объединенный файл. SIS состоит из фильтра файловой системы, который управляет копиями, изменениями и объединениями с файлами; и службы пользовательского пространства (или groveler ), которая ищет файлы, которые идентичны и нуждаются в объединении. SIS в основном была разработана для удаленных установочных серверов, поскольку они могут иметь несколько установочных образов, содержащих много одинаковых файлов; SIS позволяет объединять их, но, в отличие, например, от жестких ссылок, каждый файл остается отдельным; изменения в одной копии файла оставят другие неизменными. Это похоже на копирование при записи , которое представляет собой метод, при котором копирование памяти на самом деле не выполняется, пока одна копия не будет изменена. [13]
Начиная с Windows Server 2012, появился новый механизм дедупликации данных на основе фрагментов (тег 0x80000013), который позволяет дедуплицировать файлы с похожим содержимым, если они содержат фрагменты идентичных данных. [2] Этот механизм более мощный, чем SIS. [14] Начиная с Windows Server 2019, эта функция полностью поддерживается в ReFS. [15]
Hierarchical Storage Management — это способ переноса файлов, которые не используются в течение некоторого периода времени, на менее дорогие носители. При следующем доступе к файлу точка повторной обработки этого файла определяет, что он нужен, и извлекает его из хранилища. [ необходима цитата ]
NSS была технологией хранения документов ActiveX , которая с тех пор была прекращена Microsoft. [ требуется цитата ] Она позволяла хранить документы ActiveX в том же многопоточном формате, который ActiveX использует внутри. Фильтр файловой системы NSS загружался и использовался для обработки нескольких потоков прозрачно для приложения, и когда файл переносился на дисковый том, не отформатированный в NTFS, он также переносил несколько потоков в один поток. [16]
В Windows 10 build 17063 (для стабильной версии 1803) Microsoft представила доменные сокеты Unix в Windows. Они реализованы с помощью драйвера ядра afunix.sys и новой точки повторной обработки в файловой системе. Доменные сокеты Unix распространены в системах BSD и Linux и могут рассматриваться как стандарт для межпроцессного взаимодействия в этих системах; поэтому их введение в Windows позволит упростить принятие кода и кроссплатформенную переносимость. [17]
В Windows 10 представлены алгоритмы сжатия CompactOS только для чтения для файловой системы NTFS, взятые из формата Windows Imaging Format (WIM); они предназначены для сжатия системных файлов Windows и сокращения использования дискового пространства. [18]
Внутри сжатый файл записывается как точка повторной обработки с тегом IO_REPARSE_TAG_WOF (0x80000017), где WoF означает Windows Overlay Filter, [19] а фактические данные сохраняются в альтернативном потоке данных с именем «WofCompressedData», который обрабатывается фильтром файловой системы WOF . [20] [21] [2]
CompactOS — это улучшенный вариант WIMBoot из Windows 8.1 , в котором системные файлы могут храниться в сжатом образе WIM на скрытом разделе диска , [22] а драйвер фильтра WOF распаковывает содержимое файла из этого файла WIM; использование альтернативных потоков данных вместо образов WIM только для чтения позволяет CompactOS повторно сжимать системные файлы, когда их необходимо перезаписать обновленной версией. [23]
OneDrive помечает файлы и каталоги, которые он загрузил в локальное хранилище, как точку повторной обработки с тегом 0x9000001a. Фактические данные сохраняются в обычном режиме. [2]
Stuxnet , как часть своей серии эксплойтов Win32, использует точки соединения NTFS как часть своего общего режима работы. [ необходима цитата ]