Файловая система новой технологии ( NTFS ) — это собственная файловая система журналирования, разработанная Microsoft . [2] [1] Начиная с Windows NT 3.1 , это файловая система по умолчанию в семействе Windows NT . [11] Она заменила таблицу размещения файлов (FAT) в качестве предпочтительной файловой системы в Windows и также поддерживается в Linux и BSD . Поддержка чтения и записи NTFS обеспечивается с помощью бесплатной реализации ядра с открытым исходным кодом , известной как NTFS3 в Linux и драйвера NTFS-3G в BSD . [12] [13] С помощью этой convert
команды Windows может конвертировать FAT32 /16/12 в NTFS без необходимости перезаписывать все файлы. [14] NTFS использует несколько файлов, обычно скрытых от пользователя, для хранения метаданных о других файлах, хранящихся на диске, что может помочь повысить скорость и производительность при чтении данных. [1] В отличие от FAT и высокопроизводительной файловой системы (HPFS), NTFS поддерживает списки контроля доступа (ACL), шифрование файловой системы, прозрачное сжатие, разреженные файлы и ведение журнала файловой системы . NTFS также поддерживает теневое копирование , позволяющее создавать резервные копии системы во время ее работы, но функциональность теневых копий различается в разных версиях Windows. [15]
В середине 1980-х годов Microsoft и IBM сформировали совместный проект по созданию графической операционной системы следующего поколения ; результатом стали OS/2 и HPFS . Поскольку Microsoft не соглашалась с IBM по многим важным вопросам, в конечном итоге они расстались; OS/2 оставалась проектом IBM, а Microsoft работала над разработкой Windows NT и NTFS.
Файловая система HPFS для OS/2 содержала несколько важных новых функций. Когда Microsoft создавала свою новую операционную систему, они позаимствовали многие из этих концепций для NTFS. [16] Первоначальными разработчиками NTFS были Том Миллер , Гэри Кимура, Брайан Эндрю и Дэвид Гебель. [17]
Вероятно, из-за общего происхождения HPFS и NTFS используют один и тот же код типа идентификации раздела диска (07). Использование одного и того же номера записи идентификатора раздела весьма необычно, поскольку существуют десятки неиспользуемых кодовых номеров, а другие основные файловые системы имеют свои собственные коды. Например, в FAT их больше девяти (по одному для FAT12 , FAT16 , FAT32 и т. д.). Алгоритмы определения файловой системы в разделе типа 07 должны выполнять дополнительные проверки, чтобы различать HPFS и NTFS.
Microsoft выпустила пять версий NTFS:
Номер NTFS.sys
версии (например, v5.0 в Windows 2000) зависит от версии операционной системы; его не следует путать с номером версии NTFS (v3.1, начиная с Windows XP). [21]
Хотя в последующих версиях Windows были добавлены новые функции, связанные с файловой системой, они не изменили саму NTFS. Например, в Windows Vista реализованы символические ссылки NTFS , транзакционная NTFS , сжатие разделов и самовосстановление. [22] Символические ссылки NTFS — это новая функция файловой системы; все остальные — это новые функции операционной системы, в которых используются уже существующие функции NTFS.
NTFS оптимизирована для кластеров размером 4 КБ [a] , но поддерживает максимальный размер кластера 2 МБ [a] . (Более ранние реализации поддерживают до 64 КБ) [6] Максимальный размер тома NTFS, который может поддерживать спецификация, составляет 2 64 - 1 кластера, но не все реализации достигают этого теоретического максимума, как описано ниже.
Максимальный размер тома NTFS, реализованный в Windows XP Professional, составляет 2 32 − 1 кластера, отчасти из-за ограничений таблицы разделов. Например, при использовании кластеров размером 64 КБ максимальный размер тома Windows XP NTFS составляет 256 ТБ минус 64 КБ . При использовании размера кластера по умолчанию, равного 4 КБ, максимальный размер тома NTFS составляет 16 ТБ минус 4 КБ. Оба этих значения значительно превышают ограничение в 128 ГБ [a] в Windows XP SP1 . Многие прошивки BIOS ограничивают размер разделов Master Boot Records (MBR) до 2 ТиБ, [23] что является пределом для жестких дисков с размером физического сектора 512 байт, хотя для физического сектора размером 4 КиБ предел размера раздела MBR составляет 16 ТиБ. . Альтернативой является использование нескольких томов таблицы разделов GUID (GPT или «динамических») для объединения в один том NTFS размером более 2 ТиБ. Для загрузки с тома GPT в среду Windows способом, поддерживаемым Microsoft, требуется система с унифицированным расширяемым интерфейсом встроенного ПО (UEFI) и поддержкой 64-разрядной версии [b] . [24] Диски данных GPT поддерживаются в системах с BIOS.
Максимальный теоретический предел размера отдельных файлов NTFS составляет 16 ЭБ [a] [25] ( 16×10246 или 264 байта ) минус 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 с «Предыдущими версиями» ( Теневое копирование тома ) в операционной системе, которая его не поддерживает, приведет к потере содержимого предыдущих версий. [15] Утилита командной строки Windows Convert.exe может конвертировать поддерживаемые файловые системы в NTFS, включая HPFS (только в Windows NT 3.1, 3.5 и 3.51), FAT16 и FAT32 (в Windows 2000 и более поздних версиях). [26] [27]
FreeBSD 3.2, выпущенная в мае 1999 года, включала поддержку NTFS только для чтения, написанную Семеном Устименко. [28] [29] Эта реализация была перенесена на NetBSD Кристосом Зуласом и Яромиром Долечеком и выпущена вместе с NetBSD 1.5 в декабре 2000 года. [30] Реализация NTFS для FreeBSD также была портирована на OpenBSD Жюльеном Борде и предлагает встроенную NTFS только для чтения. поддержка по умолчанию на платформах i386 и amd64 начиная с версии 4.9, выпущенной 1 мая 2011 г. [31] [29][обновлять]
Ядро Linux версии 2.1.74 и более поздних включает драйвер, написанный Мартином фон Лёвисом, который может читать разделы NTFS; [32] Версии ядра 2.5.11 и более поздние содержат новый драйвер, написанный Антоном Алтапармаковым ( Кембриджский университет ) и Ричардом Руссоном, который поддерживает чтение файлов. [33] [34] [32] Возможность записи в файлы была введена в версии ядра 2.6.15 в 2006 году, что позволяет пользователям записывать в существующие файлы, но не позволяет создавать новые. [35] Драйвер NTFS компании Paragon (см. ниже) был интегрирован в ядро версии 5.15 и поддерживает чтение/запись обычных, сжатых и разреженных файлов, а также воспроизведение журнала. [36]
NTFS-3G — это бесплатная реализация NTFS под лицензией FUSE, которая изначально была разработана Сабольчем Сакачицем как драйвер ядра Linux . Она была переписана как программа FUSE для работы в других системах, которые поддерживает FUSE, таких как macOS , FreeBSD, NetBSD, OpenBSD , [37] Solaris, QNX и Haiku [38] и позволяет читать и записывать в разделы NTFS. Коммерческая версия NTFS-3G с повышенной производительностью под названием « Tuxera NTFS для Mac» также доступна от разработчиков NTFS-3G. [39]
Captive NTFS , «оберточный» драйвер, использующий собственный драйвер Windows ntfs.sys , существует для Linux. Она была построена как программа «Файловая система в пользовательском пространстве» (FUSE) и выпущена под лицензией GPL, но работа над Captive NTFS прекратилась в 2006 году. [40]
Ядро 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 . [41] Встроенная поддержка записи NTFS включена в версию 10.6 и более поздних версий, но не активирована по умолчанию, хотя существуют обходные пути для включения этой функциональности. Однако отчеты пользователей указывают на то, что функциональность нестабильна и имеет тенденцию вызывать панику ядра . [42]
Paragon Software Group продает драйвер чтения-записи под названием NTFS для Mac OS X , [43] который также включен в некоторые модели жестких дисков Seagate . [44]
Пакет NetDrive для OS/2 (и его производные, такие как eComStation и ArcaOS ) поддерживает плагин, который обеспечивает доступ для чтения и записи к томам NTFS. [45] [46]
Существует бесплатный драйвер чтения/записи для личного использования для MS-DOS от Avira под названием «NTFS4DOS». [47] [48]
Компания Ahead Software разработала драйвер «NTFSREAD» (версия 1.200) для DR-DOS 7.0x в период с 2002 по 2004 год. Он был частью их программного обеспечения Nero Burning ROM .
NTFS использует списки контроля доступа и шифрование на уровне пользователя для защиты пользовательских данных.
В NTFS каждому файлу или папке назначается дескриптор безопасности , который определяет его владельца и содержит два списка управления доступом (ACL). Первый ACL, называемый списком управления доступом по усмотрению (DACL), точно определяет, какой тип взаимодействия (например, чтение, запись, выполнение или удаление) разрешен или запрещен каким пользователем или группами пользователей. Например, файлы в C:\Program Files
папке могут читаться и выполняться всеми пользователями, но изменяться только пользователем, имеющим права администратора. [49] Windows Vista добавляет обязательную информацию о контроле доступа в списки DACL. Списки DACL являются основным направлением контроля учетных записей пользователей в Windows Vista и более поздних версиях.
Второй ACL, называемый списком управления доступом к системе (SACL), определяет, какие взаимодействия с файлом или папкой подлежат аудиту и должны ли они регистрироваться в случае успеха, сбоя или того и другого. Например, можно включить аудит конфиденциальных файлов компании, чтобы ее менеджеры знали, когда кто-то пытается их удалить или сделать копию, и удалось ли это ему или ей. [49]
Шифрованная файловая система (EFS) обеспечивает прозрачное для пользователя шифрование любого файла или папки на томе NTFS. [50] EFS работает совместно со службой EFS, Microsoft CryptoAPI и библиотекой времени выполнения файловой системы EFS (FSRTL). EFS работает путем шифрования файла с помощью массового симметричного ключа (также известного как ключ шифрования файла или FEK), который используется, поскольку для шифрования и дешифрования больших объемов данных требуется относительно небольшое количество времени, чем при шифровании с асимметричным ключом. используется. Симметричный ключ, используемый для шифрования файла, затем шифруется открытым ключом , связанным с пользователем, зашифровавшим файл, и эти зашифрованные данные сохраняются в альтернативном потоке данных зашифрованного файла. Чтобы расшифровать файл, файловая система использует закрытый ключ пользователя для расшифровки симметричного ключа, хранящегося в потоке данных. Затем он использует симметричный ключ для расшифровки файла. Поскольку это делается на уровне файловой системы, это прозрачно для пользователя. [51] Кроме того, на случай, если пользователь потеряет доступ к своему ключу, в систему 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. Невозможность обработки $LogFile версии 2.0 версиями Windows старше 8.0 приводит к ненужному вызову утилиты восстановления диска CHKDSK . Это особенно важно в сценарии мультизагрузки с участием версий Windows до и после 8.0 или при частом перемещении устройства хранения между более старыми и новыми версиями. В реестре Windows существует параметр, предотвращающий автоматическое обновление $LogFile до более новой версии. Проблему также можно решить, отключив гибридную загрузку. [52]
Журнал USN (Журнал порядковых номеров обновлений) — это функция управления системой, которая записывает (в $Extend\$UsnJrnl ) изменения файлов, потоков и каталогов на томе, а также их различные атрибуты и настройки безопасности. Журнал доступен приложениям для отслеживания изменений тома. [53] Этот журнал можно включить или отключить на несистемных томах. [54]
Функция жесткой ссылки позволяет различным именам файлов напрямую ссылаться на одно и то же содержимое файла. Жесткие ссылки могут ссылаться только на файлы в одном томе, поскольку каждый том имеет свой собственный MFT. Изначально жесткие ссылки были включены для поддержки подсистемы POSIX в Windows NT. [55]
Хотя жесткие ссылки используют одну и ту же запись MFT ( inode ), в которой записываются метаданные файла, такие как размер файла, дата изменения и атрибуты, NTFS также кэширует эти данные в записи каталога в целях повышения производительности. Это означает, что при просмотре содержимого каталога с использованием семейства API FindFirstFile/FindNextFile (эквивалентно API POSIX opendir/readdir) вы также получите эту кэшированную информацию, помимо имени и индексного дескриптора. Однако вы можете не увидеть актуальную информацию, поскольку эта информация гарантированно обновляется только при закрытии файла, и то только для каталога, из которого файл был открыт. [56] Это означает, что если файл имеет несколько имен по жестким ссылкам, обновление файла по одному имени не приводит к обновлению кэшированных данных, связанных с другим именем. Вы всегда можете получить актуальные данные, используя GetFileInformationByHandle (который является истинным эквивалентом функции статистики POSIX). Это можно сделать с помощью дескриптора, который не имеет доступа к самому файлу (передавая ноль в CreateFile для dwDesiredAccess), а закрытие этого дескриптора имеет побочный эффект обновления кэшированной информации.
Windows использует жесткие ссылки для поддержки коротких (8.3) имен файлов в NTFS. Поддержка операционной системы необходима, поскольку существуют устаревшие приложения, которые могут работать только с именами файлов 8.3, но поддержку можно отключить. В этом случае добавляется дополнительная запись имени файла и запись каталога, но версия 8.3 и длинное имя файла связаны и обновляются вместе, в отличие от обычной жесткой ссылки.
Файловая система NTFS имеет ограничение в 1024 жестких ссылки на файл. [57]
Альтернативные потоки данных позволяют связать с именем файла более одного потока данных ( ветвь ), используя формат «имя файла:имя потока» (например, «text.txt:extrastream»).
Потоки NTFS были представлены в Windows NT 3.1 , чтобы позволить Службам для Macintosh (SFM) хранить ветки ресурсов . Хотя текущие версии Windows Server больше не включают SFM, сторонние продукты Apple Filing Protocol (AFP) (например, ExtremeZ-IP компании GroupLogic ) по-прежнему используют эту функцию файловой системы.
Небольшой ADS с именем «Zone.Identifier» добавляется в Internet Explorer и в большинстве браузеров, чтобы помечать файлы, загруженные с внешних сайтов, как возможно небезопасные для запуска; тогда локальная оболочка потребует подтверждения пользователя перед их открытием. [58] Когда пользователь указывает, что ему больше не нужен этот диалог подтверждения, это ADS удаляется. Эта функция также известна как « Марк Интернета ». [59] [60]
Альтернативные потоки не отображаются в проводнике Windows, и их размер не включается в размер файла. Когда файл копируется или перемещается в другую файловую систему без поддержки ADS, пользователь предупреждается, что альтернативные потоки данных не могут быть сохранены. Такое предупреждение обычно не выдается, если файл прикреплен к электронному письму или загружен на веб-сайт. Таким образом, использование альтернативных потоков для важных данных может вызвать проблемы. Microsoft предоставляет инструмент под названием Streams [61] для просмотра потоков на выбранном томе. Начиная с Windows PowerShell 3.0, ADS можно управлять с помощью шести командлетов: Add-Content, Clear-Content, Get-Content, Get-Item, Remove-Item, Set-Content. [62]
Вредоносное ПО использует альтернативные потоки данных, чтобы скрыть код. [63] В результате сканеры вредоносных программ и другие специальные инструменты теперь [ когда? ] проверьте наличие альтернативных потоков данных.
Сжатие включается для каждой папки или отдельного файла путем установки атрибута «сжатый». Если для папки включено сжатие, любые файлы, перемещенные или сохраненные в этой папке, будут автоматически сжиматься с использованием алгоритма LZNT1 (вариант LZ77 ). [64] Алгоритм сжатия предназначен для поддержки размеров кластеров до 4 КБ; если размер кластера на томе NTFS превышает 4 КБ, сжатие NTFS недоступно. [65] Данные сжимаются порциями по 16 кластеров (размером до 64 КБ); если сжатие уменьшает размер 64 КБ данных до 60 КБ или меньше, NTFS обрабатывает ненужные страницы размером 4 КБ как пустые разреженные кластеры файлов — они не записываются. Это обеспечивает разумное время произвольного доступа, поскольку ОС просто должна следовать цепочке фрагментов.
Сжатие лучше всего работает с файлами, которые имеют повторяющееся содержимое, редко записываются, обычно доступны последовательно и сами по себе не сжимаются. Однопользовательские системы с ограниченным пространством на жестком диске могут извлечь выгоду из сжатия NTFS для небольших файлов размером от 4 КБ до 64 КБ или более, в зависимости от сжимаемости. Файлы размером менее 900 байт хранятся в записи каталога MFT. [66]
Пользователи быстрых многоядерных процессоров увидят повышение скорости работы приложений за счет сжатия приложений и данных, а также сокращения используемого пространства. Даже если контроллеры SSD уже сжимают данные, количество операций ввода-вывода все равно сокращается, поскольку передается меньше данных. [67]
Согласно исследованию группы разработчиков NTFS компании Microsoft, 50–60 ГБ — это разумный максимальный размер для сжатого файла на томе NTFS с размером кластера (блока) 4 КБ (по умолчанию). Этот разумный максимальный размер резко уменьшается для томов с меньшим размером кластера. [68]
Большие сжимаемые файлы становятся сильно фрагментированными, поскольку каждый фрагмент размером менее 64 КБ становится фрагментом. [68] [69] Флэш-память, такая как твердотельные накопители, не имеет задержек движения головки и высокого времени доступа, как у механических жестких дисков , поэтому фрагментация имеет лишь меньший ущерб.
Если системные файлы, необходимые во время загрузки (например, драйверы, NTLDR, winload.exe или BOOTMGR), сжаты, система может не загрузиться правильно, поскольку фильтры распаковки еще не загружены. [70] [ не удалось проверить ] Более поздние выпуски Windows [ какие? ] не позволяют сжимать важные системные файлы.
Начиная с Windows 10 , Microsoft представила новую схему сжатия файлов, основанную на алгоритме XPRESS с размером блока 4K/8K/16K [71] и алгоритме LZX ; [72] оба являются вариантами LZ77, обновленными энтропийным кодированием Хаффмана и кодированием диапазона , которых не хватало LZNT1. Эти алгоритмы сжатия были взяты из формата изображений Windows (файл WIM).
Новая схема сжатия используется функцией CompactOS, которая уменьшает использование диска за счет сжатия системных файлов Windows. [73] CompactOS не является расширением сжатия файлов NTFS и не использует атрибут «сжатый»; вместо этого он устанавливает точку повторной обработки для каждого сжатого файла с помощью тега WOF (Windows Overlay Filter), [74] но фактические данные сохраняются в альтернативном потоке данных с именем «WofCompressedData», который распаковывается на лету с помощью Драйвер фильтра файловой системы WOF , а основной файл представляет собой пустой разреженный файл . [74] Эта конструкция предназначена исключительно для доступа только для чтения, поэтому любая запись в сжатые файлы приводит к автоматической распаковке. [74] [75] [76]
Сжатие CompactOS предназначено для OEM-производителей , которые готовят образы ОС с /compact
флагом инструмента в Windows ADK , [77] но его также можно включить вручную для каждого файла с DISM
флагом команды . [78] Алгоритм CompactOS позволяет избежать фрагментации файлов , записывая сжатые данные в смежные фрагменты, в отличие от основного сжатия NTFS. [ нужна цитата ]/exe
compact
Сжатие файлов CompactOS — это улучшенная версия функции WIMBoot, представленная в Windows 8.1 . WIMBoot сокращает использование диска Windows, сохраняя системные файлы в сжатом образе WIM в отдельном скрытом разделе диска . [79] Как и в случае с CompactOS, системные каталоги Windows содержат только разреженные файлы , помеченные точкой повторной обработки с тегом WOF, а драйвер Windows Overlay Filter оперативно распаковывает содержимое файла из образа WIM. Однако WIMBoot менее эффективен, чем CompactOS, поскольку новые обновленные версии системных файлов необходимо записывать в системный раздел, занимая дисковое пространство. [74]
Разреженные файлы — это файлы с вкраплениями пустых сегментов, для которых фактическое пространство для хранения не используется. Для приложений файл выглядит как обычный файл с пустыми областями, которые воспринимаются как области, заполненные нулями; файловая система поддерживает внутренний список таких регионов для каждого разреженного файла. [80] Разреженный файл не обязательно включает в себя разреженные области нулей; атрибут «разреженный файл» просто означает, что файлу разрешено их иметь.
Например, приложения баз данных могут использовать разреженные файлы. [81] Как и в случае со сжатыми файлами, фактические размеры разреженных файлов не учитываются при определении ограничений квот. [82]
Служба теневого копирования томов (VSS) сохраняет исторические версии файлов и папок на томах NTFS, копируя старые, недавно перезаписанные данные в теневое копирование с помощью метода копирования при записи . Позже пользователь может запросить восстановление более ранней версии. Это также позволяет программам резервного копирования данных архивировать файлы, которые в данный момент используются файловой системой.
В Windows Vista также представлены постоянные теневые копии для использования с функциями восстановления системы и предыдущих версий . Однако постоянные теневые копии удаляются, когда более старая операционная система монтирует этот том NTFS. Это происходит потому, что старая операционная система не понимает новый формат постоянных теневых копий. [15]
Начиная с Windows Vista, приложения могут использовать транзакционную NTFS (TxF) для группировки нескольких изменений файлов в одну транзакцию. Транзакция будет гарантировать, что либо все изменения произойдут, либо ни одно из них не произойдет, и что ни одно приложение вне транзакции не увидит изменения, пока они не будут зафиксированы. [83]
Он использует методы, аналогичные тем, которые используются для теневого копирования томов (т. е. копирование при записи), чтобы гарантировать возможность безопасного отката перезаписанных данных, а также журнал CLFS для пометки транзакций, которые еще не были зафиксированы или были зафиксировано, но еще не полностью применено (в случае сбоя системы во время коммита одним из участников).
Транзакционная NTFS не ограничивает транзакции только локальным томом NTFS, но также включает в себя другие транзакционные данные или операции в других местах, например данные, хранящиеся в отдельных томах, локальном реестре или базах данных SQL, а также текущие состояния системных служб или удаленных служб. . Эти транзакции координируются по всей сети со всеми участниками, использующими конкретную службу DTC , чтобы гарантировать, что все участники получат одно и то же состояние фиксации, и передать изменения, которые были проверены любым участником (чтобы другие могли аннулировать свои локальные транзакции). кэширование старых данных или откат текущих незафиксированных изменений). Транзакционная NTFS позволяет, например, создавать общесетевые согласованные распределенные файловые системы, в том числе с их локальными действующими или автономными кэшами.
Microsoft теперь не рекомендует использовать TxF: «Microsoft настоятельно рекомендует разработчикам использовать альтернативные средства», поскольку «TxF может быть недоступен в будущих версиях Microsoft Windows». [84]
Дисковые квоты были введены в NTFS v3. Они позволяют администратору компьютера под управлением версии Windows, поддерживающей NTFS, устанавливать порог дискового пространства, которое могут использовать пользователи. Это также позволяет администраторам отслеживать, сколько дискового пространства использует каждый пользователь. Администратор может указать определенный уровень дискового пространства, который пользователь может использовать до того, как он получит предупреждение, а затем запретить пользователю доступ, как только он достигнет верхнего предела пространства. Дисковые квоты не учитывают прозрачное сжатие файлов NTFS , если оно включено. Приложения, запрашивающие объем свободного места, также будут видеть объем свободного места, оставшийся пользователю, к которому применена квота.
Точки повторной обработки NTFS, представленные в NTFS v3, используются путем связывания тега повторной обработки с атрибутом пользовательского пространства файла или каталога. Microsoft включает несколько тегов по умолчанию, включая символические ссылки , точки соединения каталогов и точки монтирования томов . Когда диспетчер объектов анализирует поиск имени файловой системы и обнаруживает атрибут повторной обработки, он повторно анализирует поиск имени, передавая контролируемые пользователем данные повторной обработки каждому драйверу фильтра файловой системы, загружаемому в Windows. Каждый драйвер фильтра проверяет данные повторной обработки, чтобы определить, связаны ли они с этой точкой повторной обработки, и если этот драйвер фильтра определяет совпадение, он перехватывает запрос файловой системы и выполняет свои специальные функции.
Начиная с Windows Vista, Microsoft добавила встроенную возможность сжимать или расширять раздел. Однако эта возможность не перемещает фрагменты файлов подкачки или файлы, помеченные как неперемещаемые, поэтому для сжатия тома часто потребуется переместить или отключить любой файл подкачки , индекс поиска Windows и любую теневую копию, используемую при восстановлении системы . Различные сторонние инструменты способны изменять размер разделов NTFS.
С 2017 года Microsoft требует, чтобы файловая структура OneDrive находилась на диске NTFS. [85] Это связано с тем, что функция OneDrive «Файлы по требованию» использует точки повторной обработки NTFS для связывания файлов и папок, хранящихся в OneDrive, с локальной файловой системой, что делает файл или папку непригодными для использования в любой предыдущей версии Windows или в любой другой файловой системе NTFS. драйвер или любая файловая система и утилиты резервного копирования, не обновленные для его поддержки. [86]
NTFS состоит из нескольких компонентов, включая: загрузочный сектор раздела (PBS), содержащий загрузочную информацию; основная файловая таблица, в которой хранятся записи обо всех файлах и папках файловой системы; серия метафайлов, которые помогают более эффективно структурировать метаданные; потоки данных и механизмы блокировки.
Внутри NTFS использует B-деревья для индексации данных файловой системы. Журнал файловой системы используется для обеспечения целостности метаданных файловой системы, но не содержимого отдельных файлов. Известно, что системы, использующие NTFS, имеют повышенную надежность по сравнению с файловыми системами FAT. [87]
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. Существуют некоторые дополнительные ограничения на кодовые точки и имена файлов. [88]
Этот формат загрузочного раздела примерно основан на более ранней файловой системе FAT , но поля находятся в разных местах. Некоторые из этих полей, особенно поля «Секторов на дорожку», «Количество головок» и «Скрытые секторы», могут содержать фиктивные значения на дисках, где они либо не имеют смысла, либо не поддаются определению.
ОС сначала просматривает 8 байтов по адресу 0x30, чтобы найти номер кластера $MFT, затем умножает это число на количество секторов в кластере (1 байт находится по адресу 0x0D). Это значение представляет собой смещение сектора ( LBA ) для $MFT, которое описано ниже.
В NTFS все данные файлов, каталогов и метафайлов — имя файла, дата создания, права доступа (с использованием списков управления доступом ) и размер — хранятся в виде метаданных в основной таблице файлов ( MFT ). Этот абстрактный подход позволил легко добавлять функции файловой системы во время разработки Windows NT — примером является добавление полей для индексации, используемых Active Directory и Windows Search . Это также позволяет программному обеспечению быстрого поиска файлов очень быстро находить именованные локальные файлы и папки, включенные в MFT, без необходимости использования какого-либо другого индекса.
Структура MFT поддерживает алгоритмы, минимизирующие фрагментацию диска . [91] Запись каталога состоит из имени файла и «идентификатора файла» (аналога номера индексного дескриптора ), который представляет собой номер записи, представляющей файл в основной таблице файлов. Идентификатор файла также содержит счетчик повторного использования для обнаружения устаревших ссылок. Хотя это сильно напоминает W_FID Files-11 , другие структуры NTFS радикально отличаются.
Частичная копия MFT, называемая зеркалом MFT, сохраняется для использования в случае повреждения. [92] Если первая запись MFT повреждена, NTFS считывает вторую запись, чтобы найти файл зеркала MFT. Расположение обоих файлов хранится в загрузочном секторе. [93]
NTFS содержит несколько файлов, которые определяют и организуют файловую систему. Во всех отношениях большинство этих файлов имеют структуру, подобную любому другому пользовательскому файлу (наиболее своеобразным является $Volume), но не представляют прямого интереса для клиентов файловой системы. [94] Эти метафайлы определяют файлы, создают резервные копии важных данных файловой системы, буферизуют изменения файловой системы, управляют распределением свободного пространства, удовлетворяют ожиданиям BIOS , отслеживают неправильные единицы распределения и хранят информацию о безопасности и использовании дискового пространства. Весь контент находится в безымянном потоке данных, если не указано иное.
Эти метафайлы обрабатываются Windows особым образом, обрабатываются непосредственно драйвером NTFS.SYS
, и их трудно просмотреть напрямую: необходимы специальные инструменты. [c] Начиная с Windows 7, драйвер NTFS полностью запрещает доступ пользователей, что приводит к возникновению BSoD при каждой попытке выполнить файл метаданных. Одним из таких инструментов является nfi.exe («Утилита получения информации о файловом секторе NTFS»), которая свободно распространяется как часть «Инструментов поддержки OEM» Microsoft. Например, для получения информации о сегменте основной таблицы файлов «$MFT» используется следующая команда: nfi.exe c:\$MFT
[95] Другой способ обойти ограничение — использовать файловый менеджер 7-Zip и перейти к низкоуровневой файловой системе NTFS. путь \\.\X:\
(где X:\
напоминает любой диск/раздел). Здесь появятся 3 новые папки: $EXTEND
, [DELETED]
(псевдопапка, которую 7-Zip использует для прикрепления файлов, удаленных из файловой системы, для просмотра) и [SYSTEM]
(еще одна псевдопапка, содержащая все файлы метаданных NTFS). Этот трюк можно использовать со съемных устройств ( USB- накопителей, внешних жестких дисков , SD-карт и т. д.) внутри Windows, но для этого на активном разделе требуется автономный доступ (а именно WinRE ).
Для каждого файла (или каталога), описанного в записи MFT, существует линейное хранилище дескрипторов потоков (также называемых атрибутами ), упакованных вместе в одну или несколько записей MFT (содержащих так называемый список атрибутов ), с дополнительным заполнением для заполнения. фиксированный размер каждой записи MFT в 1 КБ, что полностью описывает эффективные потоки, связанные с этим файлом.
Каждый атрибут имеет тип атрибута (целое число фиксированного размера, сопоставленное с определением атрибута в файле $AttrDef ), необязательное имя атрибута (например, используемое в качестве имени для альтернативного потока данных) и значение, представленное в последовательности. байтов. В NTFS стандартные данные файлов, альтернативные потоки данных или индексные данные каталогов хранятся как атрибуты.
Согласно $AttrDef некоторые атрибуты могут быть резидентными или нерезидентными. Атрибут $DATA , содержащий данные файла, является таким примером. Если атрибут является резидентным (что представлено флагом), его значение сохраняется непосредственно в записи MFT. В противном случае для данных выделяются кластеры, а информация о местоположении кластера сохраняется по мере выполнения данных в атрибуте.
Все атрибуты данного файла можно отобразить с помощью nfi.exe («Утилиты получения информации о файловом секторе NTFS»), которая свободно распространяется как часть «Инструментов поддержки OEM» Microsoft. [95]
Системные вызовы Windows могут обрабатывать альтернативные потоки данных. [5] В зависимости от операционной системы, утилиты и удаленной файловой системы передача файлов может незаметно удалять потоки данных. [5] Безопасный способ копирования или перемещения файлов — использовать системные вызовы BackupRead и BackupWrite, которые позволяют программам перечислять потоки, проверять, следует ли записывать каждый поток на целевой том, и сознательно пропускать нежелательные потоки. [5]
Чтобы оптимизировать хранилище и уменьшить накладные расходы ввода-вывода для очень распространенного случая атрибутов с очень маленьким связанным значением, NTFS предпочитает размещать значение внутри самого атрибута (если размер атрибута не превышает максимальный размер атрибута). запись MFT) вместо использования пространства записей MFT для вывода списка кластеров, содержащих данные; в этом случае атрибут не будет хранить данные напрямую, а просто сохранит карту распределения (в виде прогонов данных ), указывающую на фактические данные, хранящиеся в другом месте тома. [96] Когда к значению можно получить доступ непосредственно из атрибута, оно называется «резидентными данными» (специалисты по компьютерной криминалистике ). Объем подходящих данных сильно зависит от характеристик файла, но для однопоточных файлов с небольшими именами файлов и без списков управления доступом обычно используется размер от 700 до 800 байт.
Карта распределения хранится в виде прогонов данных со сжатым кодированием. Каждый прогон данных представляет собой непрерывную группу кластеров, в которых хранится значение атрибута. Для файлов на томе объемом несколько ГБ каждая запись может быть закодирована как 5–7 байт, что означаетЗапись MFT размером 1 КБ может хранить около 100 таких запусков данных. Однако, поскольку $ATTRIBUTE_LIST также имеет ограничение на размер, опасно иметь более 1 миллиона фрагментов одного файла на томе NTFS, что также означает, что в целом не рекомендуется использовать сжатие NTFS для файла. больше, чем10 ГБ . [97]
Драйвер файловой системы NTFS иногда пытается переместить данные некоторых атрибутов, которые можно сделать нерезидентными, в кластеры, а также пытается переместить данные, хранящиеся в кластерах, обратно в атрибут внутри записи MFT, основываясь на правила приоритета и предпочтительного порядка, а также ограничения по размеру.
Поскольку резидентные файлы не занимают кластеры напрямую («единицы распределения»), том NTFS может содержать больше файлов, чем кластеров. Например,Раздел размером 74,5 ГБ в формате NTFS с 19 543 064 кластерами4 КБ . Удаление системных файлов (aФайл журнала размером 64 МБ , растровый файл размером 2 442 888 байт и около 25 кластеров фиксированных служебных данных) оставляет 19 526 158 кластеров свободными для файлов и индексов. Поскольку в каждом кластере имеется четыре записи MFT, теоретически этот том может содержать почти 4 × 19 526 158 = 78 104 632 резидентных файла.
Оппортунистические блокировки файлов (oplocks) позволяют клиентам изменять свою стратегию буферизации для данного файла или потока, чтобы повысить производительность и сократить использование сети. [98] Операционные блокировки применяются к данному открытому потоку файла и не влияют на операционные блокировки в другом потоке.
Oplocks можно использовать для прозрачного доступа к файлам в фоновом режиме. Сетевой клиент может избегать записи информации в файл на удаленном сервере, если никакой другой процесс не обращается к данным, или он может буферизовать данные упреждающего чтения, если никакой другой процесс не записывает данные.
Windows поддерживает четыре различных типа опблокировок:
Уступающие блокировки были улучшены в Windows 7 и Windows Server 2008 R2 с помощью ключей оппортунистической блокировки для каждого клиента. [99]
Windows NT и ее потомки сохраняют внутренние временные метки в формате UTC и выполняют соответствующие преобразования для отображения; все временные метки NTFS указаны в формате UTC. [ нужна цитата ]
По историческим причинам все версии Windows, не поддерживающие NTFS, сохраняют время внутри себя как время локальной зоны, и, следовательно, то же самое делают все файловые системы, кроме NTFS, которые поддерживаются текущими версиями Windows. Это означает, что когда файлы копируются или перемещаются между разделами NTFS и не-NTFS, ОС необходимо конвертировать временные метки на лету. Но если некоторые файлы перемещаются, когда действует летнее время (DST), а другие файлы перемещаются, когда действует стандартное время , в преобразованиях могут возникнуть некоторые неоднозначности. В результате, особенно вскоре после одного из дней изменения местного поясного времени, пользователи могут заметить, что некоторые файлы имеют временные метки, которые неверны на один час. Из-за различий в реализации летнего времени в разных юрисдикциях это может привести к потенциальной ошибке отметки времени до 4 часов за любые 12 месяцев. [100]
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.