Файловая система NT ( NTFS ) (обычно называемая файловой системой новой технологии ) — это фирменная журналируемая файловая система, разработанная корпорацией Microsoft в 1990-х годах. [11] [12] [2]
Она была разработана для преодоления масштабируемости, безопасности и других ограничений FAT . [13] NTFS добавляет несколько функций, которых нет в FAT и HPFS , в том числе: списки управления доступом (ACL); шифрование файловой системы; прозрачное сжатие; разреженные файлы ; журналирование файловой системы и теневое копирование томов — функция, которая позволяет создавать резервные копии системы во время ее использования.
Начиная с Windows NT 3.1 , это файловая система по умолчанию семейства Windows NT, заменяющая файловую систему File Allocation Table (FAT). [14] Поддержка чтения/записи NTFS доступна в Linux и BSD с использованием NTFS3 в Linux и NTFS-3G в BSD . [15] [16]
NTFS использует несколько скрытых от пользователя файлов для хранения метаданных о других файлах, хранящихся на диске, что может помочь повысить скорость и производительность при чтении данных. [1]
В середине 1980-х годов Microsoft и IBM сформировали совместный проект по созданию следующего поколения графической операционной системы ; результатом стали OS/2 и HPFS . Поскольку Microsoft не соглашалась с IBM по многим важным вопросам, они в конечном итоге разделились; OS/2 осталась проектом IBM, а Microsoft работала над разработкой Windows NT и NTFS.
Файловая система HPFS для OS/2 содержала несколько важных новых функций. Когда Microsoft создавала свою новую операционную систему, они позаимствовали многие из этих концепций для NTFS. [17] Первоначальными разработчиками NTFS были Том Миллер , Гэри Кимура, Брайан Эндрю и Дэвид Гебель. [18]
Вероятно, в результате этого общего происхождения HPFS и NTFS используют один и тот же код типа идентификации раздела диска (07). Использование одного и того же номера записи идентификатора раздела крайне необычно, поскольку были доступны десятки неиспользуемых кодовых номеров, а другие основные файловые системы имеют свои собственные коды. Например, у FAT их больше девяти (по одному для FAT12 , FAT16 , FAT32 и т. д.). Алгоритмы, идентифицирующие файловую систему в разделе типа 07, должны выполнять дополнительные проверки, чтобы различать HPFS и NTFS.
Microsoft выпустила пять версий NTFS:
Номер NTFS.sys
версии (например, v5.0 в Windows 2000) основан на версии операционной системы; его не следует путать с номером версии NTFS (v3.1 начиная с Windows XP). [22] [23]
Хотя последующие версии Windows добавили новые функции, связанные с файловой системой, они не изменили саму NTFS. Например, Windows Vista реализовала символические ссылки NTFS , транзакционную NTFS , сжатие разделов и самовосстановление. [24] Символические ссылки NTFS — это новая функция в файловой системе; все остальные — это новые функции операционной системы, которые используют уже имеющиеся функции NTFS.
NTFS оптимизирована для кластеров размером 4 КБ [a] , но поддерживает максимальный размер кластера 2 МБ [a] . (Более ранние реализации поддерживают до 64 КБ) [6] Максимальный размер тома NTFS, который может поддерживать спецификация, составляет 2 64 − 1 кластеров, но не все реализации достигают этого теоретического максимума, как обсуждается ниже.
Максимальный размер тома NTFS, реализованный в Windows XP Professional, составляет 2 32 − 1 кластеров, отчасти из-за ограничений таблицы разделов. Например, при использовании кластеров по 64 КБ максимальный размер тома NTFS Windows XP составляет 256 ТБ минус 64 КБ . При использовании размера кластера по умолчанию 4 КБ максимальный размер тома NTFS составляет 16 ТБ минус 4 КБ. Оба эти значения значительно превышают ограничение в 128 ГБ [a] в Windows XP SP1 . Размер раздела в основной загрузочной записи (MBR) ограничен 2 ТиБ с жестким диском с 512-байтовыми физическими секторами, [25] [26] хотя для физического сектора 4 КБ ограничение размера раздела MBR составляет 16 ТиБ. Альтернативой является использование нескольких томов таблицы разделов GUID (GPT или «динамических») для объединения с целью создания одного тома NTFS размером более 2 ТиБ. Для загрузки с тома GPT в среду Windows поддерживаемым Microsoft способом требуется система с интерфейсом Unified Extensible Firmware Interface (UEFI) и поддержкой 64-разрядных [b] ОС. [27] Диски данных GPT поддерживаются в системах с BIOS.
Максимальный теоретический предел NTFS для размера отдельных файлов составляет 16 ЭБ [a] [28] ( 16 × 1024 6 или 2 64 байта ) минус 1 КБ, что в сумме составляет 18 446 744 073 709 550 592 байта. В Windows 10 версии 1709 и Windows Server 2019 максимальный реализованный размер файла составляет 8 ПБ [a] минус 2 МБ или 9 007 199 252 643 840 байт. [6]
Хотя различные версии NTFS по большей части полностью совместимы вперед и назад , существуют технические соображения по монтированию новых томов NTFS в старых версиях Microsoft Windows. Это влияет на двойную загрузку и внешние переносные жесткие диски. Например, попытка использовать раздел NTFS с «Предыдущими версиями» ( Теневое копирование тома ) в операционной системе, которая его не поддерживает, приведет к потере содержимого этих предыдущих версий. [29] Утилита командной строки Windows под названием convert.exe может преобразовывать поддерживаемые файловые системы в NTFS, включая HPFS (только в Windows NT 3.1, 3.5 и 3.51), FAT16 и FAT32 (в Windows 2000 и более поздних версиях). [30] [31]
FreeBSD 3.2, выпущенная в мае 1999 года, включала поддержку NTFS только для чтения, написанную Семёном Устименко. [32] [33] Эта реализация была перенесена в NetBSD Христосом Зуласом и Яромиром Долечеком и выпущена с NetBSD 1.5 в декабре 2000 года. [34] Реализация NTFS из FreeBSD также была перенесена в OpenBSD Жюльеном Борде и предлагает встроенную поддержку NTFS только для чтения по умолчанию на платформах i386 и amd64, начиная с версии 4.9, выпущенной 1 мая 2011 года. [35] [33][обновлять]
Версии ядра Linux 2.1.74 и более поздние включают драйвер, написанный Мартином фон Лёвисом, который имеет возможность читать разделы NTFS; [36] версии ядра 2.5.11 и более поздние содержат новый драйвер, написанный Антоном Альтапармаковым ( Кембриджский университет ) и Ричардом Рассоном, который поддерживает чтение файлов. [37] [38] [36] Возможность записи в файлы была представлена в версии ядра 2.6.15 в 2006 году, что позволяет пользователям писать в существующие файлы, но не позволяет создавать новые. [39] Драйвер NTFS от Paragon (см. ниже) был объединен с версией ядра 5.15 и поддерживает чтение/запись обычных, сжатых и разреженных файлов, а также воспроизведение журнала. [40]
NTFS-3G — это бесплатная реализация NTFS FUSE с лицензией GPL , которая изначально была разработана как драйвер ядра Linux Сабольчем Сакачитсом. Она была переписана как программа FUSE для работы на других системах, которые поддерживает FUSE, таких как macOS , FreeBSD, NetBSD, OpenBSD , [41] Solaris, QNX и Haiku [42], и позволяет читать и записывать в разделы NTFS. Коммерческая версия NTFS-3G с улучшенной производительностью, называемая « Tuxera NTFS for Mac», также доступна разработчиками NTFS-3G. [43]
Captive NTFS , драйвер-«обертка», использующий собственный драйвер Windows ntfs.sys , существует для Linux. Он был создан как программа Filesystem in Userspace (FUSE) и выпущен под лицензией GPL, но работа над Captive NTFS была прекращена в 2006 году. [44]
Версии ядра Linux 5.15 и более поздние содержат NTFS3 — полнофункциональный драйвер чтения-записи NTFS, который работает с версиями NTFS до 3.1 и поддерживается в основном Paragon Software Group .
Mac OS X 10.3 включала реализацию NTFS только для чтения Устименко из FreeBSD. Затем в 2006 году Apple наняла Антона Альтапармакова для написания новой реализации NTFS для Mac OS X 10.6 . [45] Собственная поддержка записи NTFS включена в 10.6 и более поздние версии, но не активирована по умолчанию, хотя существуют обходные пути для включения этой функциональности. Однако, по сообщениям пользователей, эта функциональность нестабильна и имеет тенденцию вызывать панику ядра . [46]
Paragon Software Group продает драйвер чтения-записи под названием NTFS для Mac , [47] который также включен в некоторые модели жестких дисков Seagate . [48]
Пакет NetDrive для OS/2 (и производных, таких как eComStation и ArcaOS ) поддерживает плагин, который обеспечивает доступ для чтения и записи к томам NTFS. [49] [50]
Существует бесплатный для личного использования драйвер чтения/записи для MS-DOS от Avira под названием «NTFS4DOS». [51] [52]
Компания Ahead Software разработала драйвер «NTFSREAD» (версия 1.200) для DR-DOS 7.0x в период с 2002 по 2004 год. Он был частью их программного обеспечения Nero Burning ROM .
NTFS использует списки контроля доступа и шифрование на уровне пользователя для защиты пользовательских данных.
В NTFS каждому файлу или папке назначается дескриптор безопасности , который определяет его владельца и содержит два списка управления доступом (ACL). Первый ACL, называемый списком управления доступом на основе дискреционных прав (DACL), точно определяет, какие типы взаимодействий (например, чтение, запись, выполнение или удаление) разрешены или запрещены каким пользователем или группами пользователей. Например, файлы в C:\Program Files
папке могут быть прочитаны и выполнены всеми пользователями, но изменены только пользователем с правами администратора. [53] Windows Vista добавляет обязательную информацию об управлении доступом в DACL. DACL являются основным фокусом контроля учетных записей пользователей в Windows Vista и более поздних версиях.
Второй ACL, называемый системным списком контроля доступа (SACL), определяет, какие взаимодействия с файлом или папкой должны быть проверены и должны ли они быть зарегистрированы, когда активность успешна, неуспешна или и то, и другое. Например, аудит может быть включен для конфиденциальных файлов компании, чтобы ее менеджеры знали, когда кто-то пытается удалить их или сделать их копию, и удаётся ли им это. [53]
Шифрованная файловая система (EFS) обеспечивает прозрачное для пользователя шифрование любого файла или папки на томе NTFS. [54] EFS работает совместно со службой EFS, CryptoAPI от Microsoft и библиотекой времени выполнения файловой системы EFS (FSRTL). EFS работает, шифруя файл с помощью объемного симметричного ключа (также известного как ключ шифрования файлов или FEK), который используется, поскольку для шифрования и дешифрования больших объемов данных требуется относительно небольшое количество времени, чем при использовании асимметричного ключа шифрования. Симметричный ключ, который используется для шифрования файла, затем шифруется с помощью открытого ключа , который связан с пользователем, который зашифровал файл, и эти зашифрованные данные сохраняются в альтернативном потоке данных зашифрованного файла. Чтобы расшифровать файл, файловая система использует закрытый ключ пользователя для расшифровки симметричного ключа, который хранится в потоке данных. Затем она использует симметричный ключ для расшифровки файла. Поскольку это делается на уровне файловой системы, это прозрачно для пользователя. [55] Кроме того, в случае потери пользователем доступа к своему ключу, в систему EFS встроена поддержка дополнительных ключей дешифрования, так что агент восстановления все равно может получить доступ к файлам, если это необходимо. Шифрование, предоставляемое NTFS, и сжатие, предоставляемое NTFS, являются взаимоисключающими; однако NTFS может использоваться для одного, а сторонний инструмент — для другого.
Поддержка EFS недоступна в версиях Windows Basic, Home и MediaCenter и должна быть активирована после установки версий Windows Professional, Ultimate и Server или с помощью корпоративных средств развертывания в доменах Windows.
NTFS — это журналируемая файловая система , которая использует журнал NTFS ( $LogFile ) для записи изменений метаданных в томе. Это функция, которую FAT не предоставляет и которая имеет решающее значение для NTFS, чтобы гарантировать, что ее сложные внутренние структуры данных останутся согласованными в случае сбоев системы или перемещения данных, выполняемых API дефрагментации , и позволять легко откатывать незафиксированные изменения этих критических структур данных при повторном монтировании тома. В частности, затронутыми структурами являются битовая карта распределения тома, изменения в записях MFT, такие как перемещения некоторых атрибутов переменной длины, хранящихся в записях MFT и списках атрибутов, а также индексы для каталогов и дескрипторов безопасности .
Формат ( $LogFile ) развивался в нескольких версиях:
Несовместимость версий $LogFile, реализованных в Windows 8 , Windows 10 , Windows 11, не позволяет Windows 7 (и более ранним версиям Windows) распознавать версию 2.0 $ LogFile . Обратная совместимость обеспечивается понижением $LogFile до версии 1.1 при чистом размонтировании тома NTFS. Он снова обновляется до версии 2.0 при монтировании в совместимой версии Windows. Однако при переходе в спящий режим на диск в состоянии выхода из системы (также известном как гибридная загрузка или быстрая загрузка, которая включена по умолчанию) смонтированные файловые системы не размонтируются, и, таким образом, $LogFile любых активных файловых систем не понижаются до версии 1.1. Неспособность обработать версию 2.0 $LogFile версиями Windows старше 8.0 приводит к ненужному вызову утилиты восстановления диска CHKDSK . Это особенно важно в сценарии с несколькими загрузками , включающем версии Windows до и после 8.0, или при частом перемещении устройства хранения между старыми и новыми версиями. Существует параметр реестра Windows , предотвращающий автоматическое обновление $LogFile до новой версии. Эту проблему также можно решить, отключив гибридную загрузку. [56]
Журнал USN (журнал порядковых номеров обновлений) — это функция управления системой, которая записывает (в $Extend\$UsnJrnl ) изменения файлов, потоков и каталогов на томе, а также их различные атрибуты и настройки безопасности. Журнал доступен приложениям для отслеживания изменений в томе. [57] Этот журнал можно включить или отключить на несистемных томах. [58]
Функция жесткой ссылки позволяет различным именам файлов напрямую ссылаться на одно и то же содержимое файла. Жесткие ссылки могут ссылаться только на файлы в одном томе, поскольку каждый том имеет свою собственную MFT. Жесткие ссылки изначально были включены для поддержки подсистемы POSIX в Windows NT. [59]
Хотя жесткие ссылки используют ту же запись MFT ( inode ), которая записывает метаданные файла, такие как размер файла, дата изменения и атрибуты, NTFS также кэширует эти данные в записи каталога в качестве повышения производительности. Это означает, что при выводе списка содержимого каталога с использованием семейства API FindFirstFile/FindNextFile (эквивалентных API POSIX opendir/readdir) вы также получите эту кэшированную информацию в дополнение к имени и inode. Однако вы можете не увидеть актуальную информацию, поскольку эта информация гарантированно обновляется только при закрытии файла, и то только для каталога, из которого файл был открыт. [60] Это означает, что если файл имеет несколько имен через жесткие ссылки, обновление файла через одно имя не обновляет кэшированные данные, связанные с другим именем. Вы всегда можете получить актуальные данные с помощью GetFileInformationByHandle (что является истинным эквивалентом функции POSIX stat). Это можно сделать с помощью дескриптора, который не имеет доступа к самому файлу (передача нуля в CreateFile для dwDesiredAccess), а закрытие этого дескриптора имеет побочный эффект обновления кэшированной информации.
Windows использует жесткие ссылки для поддержки коротких (8.3) имен файлов в NTFS. Поддержка операционной системы необходима, поскольку существуют устаревшие приложения, которые могут работать только с именами файлов 8.3, но поддержка может быть отключена. В этом случае добавляется дополнительная запись имени файла и запись каталога, но и 8.3, и длинное имя файла связаны и обновляются вместе, в отличие от обычной жесткой ссылки.
Файловая система NTFS имеет ограничение в 1024 жестких ссылок на файл. [61]
Альтернативные потоки данных позволяют связать более одного потока данных с именем файла ( ответвление ), используя формат "имя_файла:имя_потока" (например, "text.txt:extrastream"). Эти потоки не отображаются и не редактируются пользователями через какое-либо типичное приложение GUI, встроенное в Windows по умолчанию, что скрывает их существование от большинства пользователей. Хотя они предназначены для полезных метаданных , их таинственная природа делает их потенциальным местом укрытия для вредоносных программ, шпионских программ, невидимой истории браузера и другой потенциально нежелательной информации.
Альтернативные потоки не перечислены в проводнике Windows, и их размер не включен в размер файла. Когда файл копируется или перемещается в другую файловую систему без поддержки ADS, пользователь предупреждается, что альтернативные потоки данных не могут быть сохранены. Такое предупреждение обычно не предоставляется, если файл прикреплен к электронному письму или загружен на веб-сайт. Таким образом, использование альтернативных потоков для критически важных данных может вызвать проблемы. Microsoft предоставляет загружаемый инструмент под названием Streams [62] для просмотра потоков на выбранном томе. Начиная с Windows PowerShell 3.0, можно управлять ADS изначально с помощью шести командлетов: Add-Content, Clear-Content, Get-Content, Get-Item, Remove-Item, Set-Content. [63]
Небольшой ADS с именем Zone.Identifier
добавляется Internet Explorer и большинством браузеров, чтобы пометить файлы, загруженные с внешних сайтов, как потенциально небезопасные для запуска; затем локальная оболочка потребует подтверждения пользователя перед их открытием. [64] Когда пользователь указывает, что он больше не хочет этого диалогового окна подтверждения, этот ADS удаляется. Эта функция также известна как « Mark of the Web ». [65] [66] Без глубоких изменений исходного кода все веб-браузеры на базе Chromium (например, Google Chrome ) и FirefoxZone.Identifier
также записывают поток в загруженные файлы. Начиная с Windows 10, содержимое потока Zone.Identifer
структурировано как INI-файл (т. е. хранилище ключей и значений ), который включает ключи HostIpAddress
, HostUrl
и ReferrerUrl
. В некоторой степени это поля, определяемые реализацией, но они обычно содержат доменное имя и точный URL-адрес исходного местоположения онлайн-загрузки, потенциально предлагая глубоко эзотерический метод отслеживания истории просмотров с сопутствующими рисками для конфиденциальности. [67] Если загруженный файл является исполняемым (например, установщиком), Zone
ADS может использоваться для отражения , позволяя программе определить, откуда он был загружен, что иногда может использоваться для телеметрии и/или в целях безопасности, посредством чего программа может попытаться проверить, что он был загружен из официального источника (при условии, что поток не был удален или подделан ), и может передать информацию обратно через Интернет (примером этого в действии является установщик BiglyBT ).
Вредоносное ПО использовало альтернативные потоки данных для сокрытия кода. [68] С конца 2000-х годов некоторые сканеры вредоносных программ и другие специальные инструменты проверяют альтернативные потоки данных. Из-за рисков, связанных с ADS, особенно связанных с конфиденциальностью и Zone.Identifier
потоком, существует программное обеспечение, специально разработанное для извлечения потоков из файлов (определенных потоков с предполагаемым риском или всех потоков) удобным для пользователя способом. [69]
Потоки NTFS были введены в Windows NT 3.1 , чтобы позволить службам для Macintosh (SFM) хранить вилки ресурсов . Хотя текущие версии Windows Server больше не включают SFM, сторонние продукты Apple Filing Protocol (AFP) (например, ExtremeZ-IP от GroupLogic ) по-прежнему используют эту функцию файловой системы.
Сжатие включается для каждой папки или каждого файла путем установки атрибута «сжатый». Когда сжатие включено для папки, любые файлы, перемещенные или сохраненные в этой папке, будут автоматически сжаты с использованием алгоритма LZNT1 (вариант LZ77 ). [70] Алгоритм сжатия разработан для поддержки размеров кластеров до 4 КБ; когда размер кластера больше 4 КБ на томе NTFS, сжатие NTFS недоступно. [71] Данные сжимаются в 16-кластерные фрагменты (размером до 64 КБ); если сжатие уменьшает 64 КБ данных до 60 КБ или меньше, NTFS обрабатывает ненужные страницы размером 4 КБ как пустые разреженные файловые кластеры — они не записываются. Это обеспечивает разумное время произвольного доступа, поскольку ОС просто должна следовать цепочке фрагментов.
Сжатие лучше всего работает с файлами, которые имеют повторяющееся содержимое, редко записываются, обычно доступны последовательно и сами по себе не сжимаются. Однопользовательские системы с ограниченным пространством на жестком диске могут извлечь выгоду из сжатия NTFS для небольших файлов, от 4 КБ до 64 КБ или более, в зависимости от сжимаемости. Файлы размером менее 900 байт хранятся в записи каталога MFT. [72]
Пользователи быстрых многоядерных процессоров обнаружат улучшения в скорости работы приложений за счет сжатия своих приложений и данных, а также сокращение используемого пространства. Даже когда контроллеры SSD уже сжимают данные, все равно происходит сокращение ввода-вывода, поскольку передается меньше данных. [73]
Согласно исследованию группы разработчиков NTFS от Microsoft, 50–60 ГБ — это разумный максимальный размер для сжатого файла на томе NTFS с размером кластера (блока) 4 КБ (по умолчанию). Этот разумный максимальный размер резко уменьшается для томов с меньшими размерами кластера. [74]
Большие сжимаемые файлы становятся сильно фрагментированными, поскольку каждый фрагмент размером менее 64 КБ становится фрагментом. [74] [75] Флэш-память, такая как SSD -накопители, не имеет задержек движения головки и большого времени доступа , как механические жесткие диски , поэтому фрагментация имеет лишь меньшие потери.
Если системные файлы, необходимые во время загрузки (например, драйверы, NTLDR, winload.exe или BOOTMGR), сжаты, система может не загрузиться правильно, поскольку фильтры распаковки еще не загружены. [76] [ проверка не удалась ] Более поздние выпуски Windows [ какие? ] не позволяют сжимать важные системные файлы.
Начиная с Windows 10 , Microsoft представила новую схему сжатия файлов, основанную на алгоритме XPRESS с размером блока 4K/8K/16K [77] и алгоритме LZX ; [78] оба являются вариантами LZ77 , обновленными с помощью энтропийного кодирования Хаффмана и кодирования диапазона , которых не хватало LZNT1. Эти алгоритмы сжатия были взяты из формата Windows Imaging Format (файл WIM).
Новая схема сжатия используется функцией CompactOS, которая уменьшает использование диска за счет сжатия системных файлов Windows. [79] CompactOS не является расширением сжатия файлов NTFS и не использует атрибут «сжатый»; вместо этого она устанавливает точку повторной обработки для каждого сжатого файла с тегом WOF (Windows Overlay Filter), [80] но фактические данные хранятся в альтернативном потоке данных с именем «WofCompressedData», который распаковывается на лету драйвером фильтра файловой системы WOF , а основной файл представляет собой пустой разреженный файл . [80] Эта конструкция предназначена исключительно для доступа только для чтения, поэтому любые записи в сжатые файлы приводят к автоматической распаковке. [80] [81] [82]
Сжатие CompactOS предназначено для OEM-производителей , которые готовят образы ОС с /compact
флагом инструмента DISM
в Windows ADK , [83] но его также можно вручную включить для каждого файла с помощью /exe
флага команды compact
. [84] Алгоритм CompactOS избегает фрагментации файлов , записывая сжатые данные в непрерывно выделенные фрагменты, в отличие от основного сжатия NTFS. [ необходима цитата ]
Сжатие файлов CompactOS — это улучшенная версия функции WIMBoot, представленной в Windows 8.1 . WIMBoot сокращает использование диска Windows, сохраняя системные файлы в сжатом образе WIM на отдельном скрытом разделе диска . [85] Подобно CompactOS, системные каталоги Windows содержат только разреженные файлы, отмеченные точкой повторной обработки с тегом WOF, а драйвер Windows Overlay Filter распаковывает содержимое файлов «на лету» из образа WIM. Однако WIMBoot менее эффективен, чем CompactOS, поскольку новые обновленные версии системных файлов необходимо записывать в системный раздел, что потребляет дисковое пространство. [80]
Разреженные файлы — это файлы, перемежающиеся пустыми сегментами, для которых не используется фактическое дисковое пространство. Для приложений файл выглядит как обычный файл с пустыми областями, которые рассматриваются как области, заполненные нулями; файловая система поддерживает внутренний список таких областей для каждого разреженного файла. [86] Разреженный файл не обязательно включает области разреженных нулей; атрибут «разреженный файл» просто означает, что файлу разрешено их иметь.
Например, приложения баз данных могут использовать разреженные файлы. [87] Как и в случае с сжатыми файлами, фактические размеры разреженных файлов не учитываются при определении пределов квот. [88]
Служба теневого копирования томов (VSS) сохраняет исторические версии файлов и папок на томах NTFS, копируя старые, недавно перезаписанные данные в теневую копию с помощью техники копирования при записи . Пользователь может позже запросить восстановление более ранней версии. Это также позволяет программам резервного копирования данных архивировать файлы, которые в данный момент используются файловой системой.
Windows Vista также представила постоянные теневые копии для использования с функциями восстановления системы и предыдущих версий . Однако постоянные теневые копии удаляются, когда старая операционная система монтирует этот том NTFS. Это происходит потому, что старая операционная система не понимает новый формат постоянных теневых копий. [29]
Начиная с Windows Vista, приложения могут использовать транзакционную NTFS (TxF) для группировки нескольких изменений в файлах в одну транзакцию. Транзакция гарантирует, что либо все изменения произойдут, либо ни одно из них не произойдет, и что ни одно приложение вне транзакции не увидит изменения, пока они не будут зафиксированы. [89]
Он использует те же методы, что и для теневых копий томов (т. е. копирование при записи), чтобы гарантировать возможность безопасного отката перезаписанных данных, а также журнал CLFS для маркировки транзакций, которые еще не были зафиксированы или были зафиксированы, но еще не полностью применены (в случае сбоя системы во время фиксации одним из участников).
Транзакционная NTFS не ограничивает транзакции только локальным томом NTFS, но также включает другие транзакционные данные или операции в других местах, такие как данные, хранящиеся в отдельных томах, локальном реестре или базах данных SQL, или текущие состояния системных служб или удаленных служб. Эти транзакции координируются в масштабах всей сети со всеми участниками, использующими определенную службу, DTC , чтобы гарантировать, что все участники получат одинаковое состояние фиксации, и для передачи изменений, которые были проверены любым участником (чтобы другие могли аннулировать свои локальные кэши для старых данных или откатить свои текущие незафиксированные изменения). Транзакционная NTFS позволяет, например, создавать согласованные распределенные файловые системы в масштабах всей сети, в том числе с их локальными живыми или автономными кэшами.
Microsoft теперь не рекомендует использовать TxF: «Microsoft настоятельно рекомендует разработчикам использовать альтернативные средства», поскольку «TxF может быть недоступен в будущих версиях Microsoft Windows». [90]
Дисковые квоты были введены в NTFS v3. Они позволяют администратору компьютера, работающего под управлением версии Windows, поддерживающей NTFS, устанавливать пороговое значение дискового пространства, которое могут использовать пользователи. Это также позволяет администраторам отслеживать, сколько дискового пространства использует каждый пользователь. Администратор может указать определенный уровень дискового пространства, которое пользователь может использовать до того, как получит предупреждение, а затем запретить доступ пользователю, как только он достигнет своего верхнего предела пространства. Дисковые квоты не учитывают прозрачное сжатие файлов NTFS , если оно включено. Приложения, запрашивающие объем свободного пространства, также увидят объем свободного пространства, оставшийся для пользователя, к которому применена квота.
Представленные в NTFS v3, точки повторной обработки NTFS используются путем связывания тега повторной обработки в атрибуте пользовательского пространства файла или каталога. Microsoft включает несколько тегов по умолчанию, включая символические ссылки , точки соединения каталогов и точки монтирования томов . Когда диспетчер объектов анализирует поиск имени файловой системы и обнаруживает атрибут повторной обработки, он повторно анализирует поиск имени, передавая контролируемые пользователем данные повторной обработки каждому драйверу фильтра файловой системы, загруженному в Windows. Каждый драйвер фильтра проверяет данные повторной обработки, чтобы увидеть, связаны ли они с этой точкой повторной обработки, и если этот драйвер фильтра определяет совпадение, то он перехватывает запрос файловой системы и выполняет свою специальную функциональность.
Начиная с Windows Vista, Microsoft добавила встроенную возможность сжимать или расширять раздел. Однако эта возможность не перемещает фрагменты файла подкачки или файлы, помеченные как неперемещаемые, поэтому сжатие тома часто требует перемещения или отключения любого файла подкачки , индекса поиска Windows и любого теневого копирования, используемого восстановлением системы . Различные сторонние инструменты способны изменять размер разделов NTFS.
С 2017 года Microsoft требует, чтобы файловая структура OneDrive находилась на диске NTFS. [91] Это связано с тем, что функция OneDrive Files On-Demand использует точки повторной обработки NTFS для связывания файлов и папок, хранящихся в OneDrive, с локальной файловой системой, что делает файл или папку непригодными для использования с любой предыдущей версией Windows, с любым другим драйвером файловой системы NTFS или любой файловой системой и утилитами резервного копирования, не обновленными для ее поддержки. [92]
NTFS состоит из нескольких компонентов, включая: загрузочный сектор раздела (PBS), содержащий загрузочную информацию; главную таблицу файлов, в которой хранятся записи всех файлов и папок в файловой системе; ряд метафайлов, помогающих более эффективно структурировать метаданные; потоки данных и механизмы блокировки.
Внутри себя NTFS использует B-деревья для индексации данных файловой системы. Журнал файловой системы используется для гарантии целостности метаданных файловой системы, но не содержимого отдельных файлов. Известно, что системы, использующие NTFS, имеют повышенную надежность по сравнению с файловыми системами FAT. [93]
NTFS допускает любую последовательность 16-битных значений для кодировки имен (например, имена файлов, имена потоков или имена индексов), за исключением 0x0000. Это означает, что поддерживаются кодовые единицы UTF-16 , но файловая система не проверяет, является ли последовательность допустимой UTF-16 (она допускает любую последовательность коротких значений, не ограничиваясь теми, что указаны в стандарте Unicode). В пространстве имен Win32 любые кодовые единицы UTF-16 нечувствительны к регистру, тогда как в пространстве имен POSIX они чувствительны к регистру. Имена файлов ограничены 255 кодовыми единицами UTF-16. Некоторые имена зарезервированы в корневом каталоге тома и не могут использоваться для файлов. Это $MFT
, $MFTMirr
, $LogFile
, $Volume
, $AttrDef
, .
(точка), $Bitmap
, $Boot
, $BadClus
, $Secure
, $UpCase
, и $Extend
. [5] .
(точка) и $Extend
оба являются каталогами; остальные являются файлами. Ядро NT ограничивает полные пути 32 767 кодовыми единицами UTF-16. Существуют некоторые дополнительные ограничения на кодовые точки и имена файлов. [94]
Этот формат загрузочного раздела примерно основан на более ранней файловой системе FAT , но поля находятся в разных местах. Некоторые из этих полей, особенно поля "sectors per track", "number of heads" и "hidden sectors", могут содержать фиктивные значения на дисках, где они либо не имеют смысла, либо не поддаются определению.
Сначала ОС просматривает 8 байтов по адресу 0x30, чтобы найти номер кластера $MFT, затем умножает это число на количество секторов в кластере (1 байт находится по адресу 0x0D). Это значение является смещением сектора ( LBA ) к $MFT, которое описано ниже.
В NTFS все данные файлов, каталогов и метафайлов — имя файла, дата создания, разрешения на доступ (с помощью списков управления доступом ) и размер — хранятся в виде метаданных в главной таблице файлов ( MFT ). Этот абстрактный подход позволил легко добавлять функции файловой системы во время разработки Windows NT — примером является добавление полей для индексации, используемых Active Directory и Windows Search . Это также позволяет программному обеспечению быстрого поиска файлов очень быстро находить именованные локальные файлы и папки, включенные в MFT, без необходимости в каком-либо другом индексе.
Структура MFT поддерживает алгоритмы, которые минимизируют фрагментацию диска . [97] Запись каталога состоит из имени файла и «идентификатора файла» (аналога номера инода ), который является номером записи, представляющим файл в главной таблице файлов. Идентификатор файла также содержит счетчик повторного использования для обнаружения устаревших ссылок. Хотя это сильно напоминает W_FID из Files-11 , другие структуры NTFS радикально отличаются.
Частичная копия MFT, называемая зеркалом MFT, хранится для использования в случае повреждения. [98] Если первая запись MFT повреждена, NTFS считывает вторую запись, чтобы найти файл зеркала MFT. Местоположение обоих файлов хранится в загрузочном секторе. [99]
NTFS содержит несколько файлов, которые определяют и организуют файловую систему. Во всех отношениях большинство этих файлов структурированы как любой другой пользовательский файл ($Volume является наиболее своеобразным), но не представляют прямого интереса для клиентов файловой системы. [100] Эти метафайлы определяют файлы, создают резервные копии критических данных файловой системы, буферизуют изменения файловой системы, управляют распределением свободного пространства, удовлетворяют ожиданиям BIOS , отслеживают плохие блоки распределения и хранят информацию о безопасности и использовании дискового пространства. Все содержимое находится в безымянном потоке данных, если не указано иное.
Эти метафайлы обрабатываются Windows особым образом, обрабатываются непосредственно драйвером NTFS.SYS
и их трудно просматривать напрямую: необходимы специальные специализированные инструменты. [c] Начиная с Windows 7, драйвер NTFS полностью запрещает доступ пользователя, что приводит к BSoD при каждой попытке выполнить файл метаданных. Одним из таких инструментов является nfi.exe («NTFS File Sector Information Utility»), который свободно распространяется как часть Microsoft «OEM Support Tools». Например, чтобы получить информацию о сегменте главной файловой таблицы «$MFT», используется следующая команда: nfi.exe c:\$MFT
[101] Другой способ обойти ограничение — использовать файловый менеджер 7-Zip и перейти к низкоуровневому пути NTFS \\.\X:\
(где X:\
напоминает любой диск/раздел). Здесь появятся 3 новые папки: $EXTEND
, [DELETED]
(псевдопапка, которую 7-Zip использует для присоединения файлов, удаленных из файловой системы, для просмотра) и [SYSTEM]
(еще одна псевдопапка, которая содержит все файлы метаданных NTFS). Этот трюк можно использовать со съемными устройствами ( USB- флеш-накопителями, внешними жесткими дисками , SD-картами и т. д.) внутри Windows, но для выполнения этого на активном разделе требуется автономный доступ (а именно WinRE ).
Для каждого файла (или каталога), описанного в записи MFT, существует линейный репозиторий дескрипторов потоков (также называемых атрибутами ), упакованных вместе в одну или несколько записей MFT (содержащих так называемый список атрибутов ), с дополнительным заполнением для заполнения фиксированного размера 1 КБ каждой записи MFT, и который полностью описывает эффективные потоки, связанные с этим файлом.
Каждый атрибут имеет тип атрибута (целое число фиксированного размера, отображающее определение атрибута в файле $AttrDef ), необязательное имя атрибута (например, используемое в качестве имени для альтернативного потока данных) и значение, представленное в последовательности байтов. Для NTFS стандартные данные файлов, альтернативные потоки данных или индексные данные для каталогов хранятся как атрибуты.
Согласно $AttrDef , некоторые атрибуты могут быть как резидентными, так и нерезидентными. Атрибут $DATA , содержащий данные файла, является таким примером. Когда атрибут является резидентным (что представлено флагом), его значение хранится непосредственно в записи MFT. В противном случае для данных выделяются кластеры, а информация о местоположении кластера сохраняется по мере запуска данных в атрибуте.
Все атрибуты заданного файла могут быть отображены с помощью nfi.exe («NTFS File Sector Information Utility»), которая свободно распространяется как часть «OEM Support Tools» Microsoft. [101]
Системные вызовы Windows могут обрабатывать альтернативные потоки данных. [5] В зависимости от операционной системы, утилиты и удаленной файловой системы передача файлов может молча удалять потоки данных. [5] Безопасный способ копирования или перемещения файлов — использовать системные вызовы BackupRead и BackupWrite, которые позволяют программам перечислять потоки, проверять, следует ли записывать каждый поток на целевой том, и заведомо пропускать нежелательные потоки. [5]
Чтобы оптимизировать хранилище и сократить накладные расходы ввода-вывода для очень распространенного случая атрибутов с очень малым связанным значением, NTFS предпочитает размещать значение внутри самого атрибута (если размер атрибута не превышает максимальный размер записи MFT), вместо того, чтобы использовать пространство записи MFT для перечисления кластеров, содержащих данные; в этом случае атрибут не будет хранить данные напрямую, а будет просто хранить карту распределения (в форме запусков данных ), указывающую на фактические данные, хранящиеся в другом месте тома. [102] Когда к значению можно получить доступ напрямую из атрибута, оно называется «резидентными данными» (специалистами по компьютерной криминалистике ). Объем данных, которые помещаются, сильно зависит от характеристик файла, но 700–800 байт являются обычным явлением в однопотоковых файлах с недлинными именами файлов и без ACL.
Карта распределения хранится в виде прогонов данных со сжатым кодированием. Каждый прогон данных представляет собой непрерывную группу кластеров, которые хранят значение атрибута. Для файлов на многогигабайтном томе каждая запись может быть закодирована как 5-7 байтов, что означаетЗапись MFT размером 1 КБ может хранить около 100 таких прогонов данных. Однако, поскольку $ATTRIBUTE_LIST также имеет ограничение по размеру, опасно иметь более 1 миллиона фрагментов одного файла на томе NTFS, что также подразумевает, что в целом не рекомендуется использовать сжатие NTFS для файла размером более10 ГБ . [103]
Драйвер файловой системы NTFS иногда пытается переместить данные некоторых атрибутов, которые можно сделать нерезидентными, в кластеры, а также пытается переместить данные, хранящиеся в кластерах, обратно в атрибут внутри записи MFT, основываясь на приоритете и предпочтительных правилах упорядочивания, а также ограничениях по размеру.
Поскольку резидентные файлы не занимают кластеры («единицы распределения») напрямую, возможно, что том NTFS будет содержать больше файлов на томе, чем кластеров. Например,Раздел NTFS форматов 74,5 ГБ с 19 543 064 кластерами4 КБ . Вычитание системных файлов (a64 МБ лог-файла, 2 442 888-байтовый файл Bitmap и около 25 кластеров фиксированных накладных расходов) оставляет 19 526 158 кластеров свободными для файлов и индексов. Поскольку на кластер приходится четыре записи MFT, этот том теоретически может содержать почти 4 × 19 526 158 = 78 104 632 резидентных файлов.
Оппортунистические блокировки файлов (oplocks) позволяют клиентам изменять стратегию буферизации для заданного файла или потока с целью повышения производительности и снижения использования сети. [104] Oplocks применяются к заданному открытому потоку файла и не влияют на oplocks в другом потоке.
Oplocks можно использовать для прозрачного доступа к файлам в фоновом режиме. Сетевой клиент может избегать записи информации в файл на удаленном сервере, если никакой другой процесс не обращается к данным, или может буферизировать данные опережающего чтения, если никакой другой процесс не записывает данные.
Windows поддерживает четыре различных типа оппортунистических блокировок:
Оппортунистические блокировки были улучшены в Windows 7 и Windows Server 2008 R2 с помощью ключей oplock для каждого клиента. [105]
Windows NT и ее потомки сохраняют внутренние временные метки в формате UTC и выполняют соответствующие преобразования для отображения; все временные метки NTFS указаны в формате UTC. [ необходима ссылка ]
По историческим причинам версии Windows, не поддерживающие NTFS, все сохраняют время внутри себя как локальное поясное время, и, следовательно, так делают все файловые системы, кроме NTFS, которые поддерживаются текущими версиями Windows. Это означает, что когда файлы копируются или перемещаются между разделами NTFS и не-NTFS, ОС должна преобразовывать временные метки на лету. Но если некоторые файлы перемещаются, когда действует летнее время (DST), а другие файлы перемещаются, когда действует стандартное время , могут возникнуть некоторые неоднозначности в преобразованиях. В результате, особенно вскоре после одного из дней, когда меняется локальное поясное время, пользователи могут заметить, что некоторые файлы имеют временные метки, которые неверны на один час. Из-за различий в реализации DST в разных юрисдикциях это может привести к потенциальной ошибке временной метки до 4 часов в любые заданные 12 месяцев. [106]
dir
команда командной строки вывела бы список метафайлов в корневом каталоге, если бы /a
они были указаны. В Windows 2000 dir /a
перестал работать, но dir /a \$MFT
работал.NTFS использует размер кластера по умолчанию 4 КБ, максимальный размер кластера 64 КБ в операционной системе Windows 10 v1703 и Windows Server 2016 и более ранних версиях, и 2 МБ в операционной системе Windows 10 v1709 и Windows Server 2019 и более поздних версиях, а минимальный размер кластера 512 байт.
Одним из компонентов Windows, использующим несколько потоков данных, является служба выполнения вложений[...] в зависимости от того, из какой зоны был загружен файл [...] Проводник Windows может предупредить пользователя
Утилита информации о секторе файловой системы Windows NT (NTFS) ... Инструмент, используемый для дампа информации о томе NTFS