Разработчик (и) | Microsoft |
---|---|
Полное имя | Файловая система NT |
Введено | июль 1993 г .; 27 лет назад (1993-07) с Windows NT 3.1 |
Идентификатор раздела | 0x07 (MBR ). EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 (GPT ) |
Structures | |
Содержимое каталога | B-дерево вариант |
Размещение файлов | Bitmap |
Плохие блоки | $ BadClus (запись MFT) |
Пределы | |
Макс.. размер тома | 2кластеры - 1 кластер (формат);. 256 TiB - 64 KB (Windows 10 версия 1703, Windows Server 2016 или более ранняя реализация). 8 PB - 2 МБ (Windows 10 версии 1709, Windows Server 2019 или более поздняя реализация) |
Макс. размер файла | 16 EiB - 1 КБ (формат);. 16 ТБ - 64 KB (Windows 7, Windows Server 2008 R2 или более ранняя реализация). 256 TB - 64 KB (Windows 8, Windows Server 2012 или более поздняя реализация). 8 PB - 2 MiB (Windows 10 версии 1709, Windows Server 2019 или более поздняя реализация) |
Макс. количество файлов | 4,294,967,295 (2-1) |
Макс. длина имени файла | 255 UTF-16 единицы кода |
Допустимые символы в именах файлов | |
Функции | |
Записанные даты | Создание, модификация, изменение POSIX, доступ |
Диапазон дат | 1 января 1601 г. - 28 мая 60056 г. (Время файла - это 64-битные числа, считающие 100-наносекундные интервалы (десять миллионов в секунду) с 1601 года, что составляет более 58000 лет) |
Разрешение даты | 100 нс |
Форки | Да (см. § Альтернативные потоки данных (ADS) ниже) |
Атрибуты | Только для чтения, скрытый, системный, архив, контент не проиндексирован, автономный, временный, сжатый |
Разрешения файловой системы | ACL |
Прозрачное сжатие | Для каждого файла, LZ77 (Windows NT 3.51 и далее) |
Прозрачное шифрование | для каждого файла,. D ESX (Windows 2000 и более поздние версии),. Triple DES (Windows XP и более поздние версии),. AES ( Пакет обновления 1 для Windows XP, Windows Server 2003 и более поздних версий) |
Дедупликация данных | Да (Windows Server 2012 ) |
Другое | |
Поддерживаемые операционные системы | Windows NT 3.1 и новее. Mac OS X 10.3 и новее (только для чтения). ядро Linux версии 2.6 и новее. ядро Linux версии 2.2- 2.4 (только для чтения). ReactOS (только для чтения) |
NTFS (NT File System ) является проприетарной файловая система журналов, разработанная Microsoft. Начиная с Windows NT 3.1, это файловая система по умолчанию для семейства Windows NT.
NTFS имеет несколько технических улучшений по сравнению с файловыми системами, которые она заменила - Таблица размещения файлов (FAT) и Высокопроизводительная файловая система (HPFS) - например, улучшенная поддержка метаданных и расширенных структур данных для повышения производительности, надежности и дискового пространства использование космоса. Дополнительные расширения представляют собой более сложную систему безопасности, основанную на списках управления доступом (ACL) и журналировании файловой системы..
NTFS также поддерживается в других операционных системах настольных компьютеров и серверов. Linux и BSD имеют бесплатный драйвер NTFS с открытым исходным кодом, называемый NTFS-3G, с функциями чтения и записи. macOS поставляется с поддержкой NTFS только для чтения; поддержка записи для NTFS нестабильна, поэтому по умолчанию запись файлов отключена.
В середине 1980-х годов Microsoft и IBM сформировали совместный проект по созданию графической операционной системы следующего поколения; результатом были OS / 2 и HPFS. Поскольку Microsoft не соглашалась с IBM по многим важным вопросам, в конце концов они расстались; OS / 2 оставалась проектом IBM, а Microsoft работала над разработкой Windows NT и NTFS.
Файловая система HPFS для OS / 2 содержит несколько важных новых функций. Когда Microsoft создавала свою новую операционную систему, они «позаимствовали» многие из этих концепций для NTFS. Первыми разработчиками NTFS были Том Миллер, Гэри Кимура, Брайан Эндрю и Дэвид Гебель.
Вероятно, в результате этого общего происхождения HPFS и NTFS используют один и тот же раздел диска код типа идентификации (07). Использование одного и того же номера записи идентификатора раздела крайне необычно, поскольку были доступны десятки неиспользуемых кодовых номеров, а другие основные файловые системы имеют свои собственные коды. Например, в FAT их больше девяти (по одному для FAT12, FAT16, FAT32 и т. Д.). Алгоритмы, идентифицирующие файловую систему в разделе типа 07, должны выполнять дополнительные проверки, чтобы различать HPFS и NTFS.
Microsoft выпустила пять версий NTFS:
номер версии NTFS | Первая операционная система | Дата выпуска | Новые функции | Примечания |
---|---|---|---|---|
1.0 | Windows NT 3.1 | 1993 | Начальная версия | NTFS 1.0 несовместима с 1.1 и новее: тома написаны Windows NT 3.5x не может быть прочитан Windows NT 3.1, пока не будет установлено обновление (доступное на установочном носителе NT 3.5x). |
1.1 | Windows NT 3.51 | 1995 | Сжатые файлы, названные потоки и списки управления доступом | |
1.2 | Windows NT 4.0 | 1996 | Дескрипторы безопасности | Обычно называются NTFS 4.0 после выпуска ОС |
3.0 | Windows 2000 | 2000 | Дисковые квоты, Шифрованная файловая система, разреженные файлы, точки повторной обработки, ведение журнала обновлений порядкового номера (USN), папка $ Extend и ее файлы | Совместимость также стала доступной для Windows NT 4.0 с обновлением Service Pack 4. te. После выпуска ОС обычно называется NTFS 5.0. |
3.1 | Windows XP | октябрь 2001 | Записи Master File Table (MFT) добавлены в записи с избыточным номером записи MFT ( полезен для восстановления поврежденных файлов MFT) | Обычно называется NTFS 5.1 после выпуска ОС |
Номер версии NTFS.sys
(например, v5.0 в Windows 2000) зависит от операционной версия системы; его не следует путать с номером версии NTFS (v3.1 начиная с Windows XP).
Хотя в последующих версиях Windows были добавлены новые функции, связанные с файловой системой, они не изменили саму NTFS. Например, в Windows Vista реализованы символические ссылки NTFS, Transactional NTFS, сжатие раздела и самовосстановление. Символьные ссылки NTFS - это новая функция файловой системы; все остальные - это новые функции операционной системы, в которых используются уже существующие функции NTFS.
NTFS v3.0 включает несколько новых функций по сравнению со своими предшественниками: поддержка разреженных файлов, квоты использования диска, точки повторной обработки, распределенное отслеживание ссылок и шифрование на уровне файлов, называемое Шифрованная файловая система (EFS).
NTFS оптимизирована для 4 KB кластеров, но поддерживает максимальный размер кластера 2 МБ. (Более ранние реализации поддерживают до 64 КБ). Максимальный размер тома NTFS, который может поддерживать спецификация, составляет 2–1 кластер, но не все реализации достигают этого теоретического максимума, как обсуждается ниже.
Максимальный размер тома NTFS, реализованный в Windows XP Professional, составляет 2–1 кластер, частично из-за ограничений таблицы разделов. Например, при использовании кластеров размером 64 КБ максимальный размер тома NTFS Windows XP составляет 256 ТБ минус 64 КБ. При использовании размера кластера по умолчанию 4 КБ максимальный размер тома NTFS составляет 16 ТБ минус 4 КБ. Оба эти значения значительно превышают ограничение в 128 ГБ в Windows XP SP1. Поскольку таблицы разделов на дисках с основной загрузочной записью (MBR) поддерживают только размеры разделов до 2 ТБ, несколько томов GUID Partition Table (GPT или «динамический») должны быть объединены для создания одного тома NTFS размером более 2 Туберкулез. Для загрузки с тома GPT в среду Windows способом, поддерживаемым Microsoft, требуется система с Unified Extensible Firmware Interface (UEFI) и поддержкой 64-разрядных версий.
Максимальный теоретический предел NTFS для размер отдельных файлов составляет 16 EiB (16 × 1024 или 2 байта) минус 1 КБ, что в сумме составляет 18 446 744 073 709 550 592 байта. В Windows 10 версии 1709 и Windows Server 2019 максимальный реализованный размер файла составляет 8 ПБ минус 2 МБ, или 9 007 199 252 643 840 байт.
NTFS - это файловая система с журналированием, которая использует журнал NTFS ($ LogFile) для записи изменений метаданных на том. Это функция, которую FAT не предоставляет, и она критически важна для NTFS, чтобы гарантировать, что ее сложные внутренние структуры данных останутся согласованными в случае сбоев системы или перемещения данных, выполняемых дефрагментацией API, и позволяют легко откатить незафиксированные изменения этих критических структур данных при перемонтировании тома. В частности, затронутыми структурами являются битовая карта распределения томов, модификации записей MFT, такие как перемещение некоторых атрибутов переменной длины, хранящихся в записях MFT и списках атрибутов, а также индексы для каталогов и дескрипторов безопасности.
Формат ($ LogFile) претерпел несколько изменений:
версия Windows | версия формата $ LogFile |
---|---|
Windows NT 4.0 | 1.1 |
Windows 2000 | 1.1 |
Windows XP | 1.1 |
Windows Vista | 1.1 |
Windows 7 | 1.1 |
Windows 8 | 1.1 |
Windows 8.1 | 2.0 |
Windows 10 | 2.0 |
Несовместимость версий $ LogFile, реализованная в Windows 8.1 и Windows 10, не позволяет Windows 8 (и более ранним версиям Windows) правильно обрабатывать $ LogFile в случае, если том NTFS остается в грязном состоянии в результате внезапного выключения или перехода в спящий режим на диск в состоянии выхода из системы (иначе: гибридная загрузка или быстрая загрузка, которая включена по умолчанию в Windows 10 ). Невозможность обработать v2.0 файла $ LogFile на грязных томах этими более ранними версиями Windows приводит к вызову утилиты восстановления диска CHKDSK при двойной загрузке Windows 10 с этими старые системы. Имеется параметр реестра Windows для предотвращения автоматического обновления $ LogFile до более новой версии.
Журнал USN (журнал обновлений порядковых номеров) - это управление системой функция, которая записывает (в $ Extend \ $ UsnJrnl) изменения файлов, потоков и каталогов на томе, а также их различные атрибуты и настройки безопасности. Журнал предоставляется приложениям для отслеживания изменений в объеме. Этот журнал можно включить или отключить на несистемных томах.
Функция жесткая ссылка позволяет различным именам файлов напрямую ссылаться на одно и то же содержимое файла. Жесткие ссылки аналогичны соединениям каталогов, но вместо этого относятся к файлам. Жесткие ссылки могут ссылаться только на файлы в одном томе, потому что каждый том имеет свой собственный MFT. Жесткие ссылки имеют собственные метаданные файлов, поэтому изменение размера файла или атрибутов одной жесткой ссылки может не обновить другие, пока они не будут открыты. Изначально жесткие ссылки были включены для поддержки подсистемы POSIX в Windows NT.
Windows использует жесткие ссылки для поддержки коротких (8.3) имен файлов в NTFS. Поддержка операционной системы необходима, потому что существуют устаревшие приложения, которые могут работать только с именами файлов 8.3. В этом случае добавляется дополнительная запись имени файла и запись каталога, но файлы 8.3 и длинное имя связываются и обновляются вместе, в отличие от обычной жесткой ссылки.
Файловая система NTFS имеет ограничение в 1024 жестких ссылок на файл.
Альтернативные потоки данных позволяют больше чем один поток данных , связанный с именем файла (вилка ), используя формат «имя файла: имя потока» (например, «text.txt: extrastream»).
Потоки NTFS были введены в Windows NT 3.1, чтобы позволить службам для Macintosh (SFM) хранить вилки ресурсов. Хотя текущие версии Windows Server больше не включают SFM, сторонние продукты Apple Filing Protocol (AFP) (такие как GroupLogic ExtremeZ-IP ) по-прежнему используйте эту функцию файловой системы. Очень маленькие ADS (названные "Zone.Identifier") добавляются Internet Explorer, а в последнее время и другими браузерами, чтобы отмечать файлы, загруженные с внешних сайтов, как потенциально небезопасные для запуска; тогда локальная оболочка потребует подтверждения пользователя перед их открытием. Когда пользователь указывает, что он больше не хочет это диалоговое окно подтверждения, этот ADS удаляется.
Альтернативные потоки не отображаются в проводнике Windows, и их размер не входит в размер файла. Когда файл копируется или перемещается в другую файловую систему без поддержки ADS, пользователь получает предупреждение о невозможности сохранения альтернативных потоков данных. Такое предупреждение обычно не появляется, если файл прикреплен к электронному письму или загружен на веб-сайт. Таким образом, использование альтернативных потоков для критических данных может вызвать проблемы. Microsoft предоставляет инструмент под названием Streams для просмотра потоков на выбранном томе. Начиная с Windows PowerShell 3.0, можно управлять ADS изначально с помощью шести командлетов: Add-Content, Clear-Content, Get-Content, Get-Item, Remove-Item, Set-Content.
Вредоносное ПО использовало альтернативные потоки данных для сокрытия кода. В результате сканеры вредоносных программ и другие специальные инструменты теперь проверяют наличие альтернативных потоков данных.
NTFS может сжимать файлы с использованием алгоритма LZNT1 (вариант LZ77 ). Файлы сжимаются в 16 блоков кластера. При 4 кластерах КБ файлы сжимаются блоками по 64 КБ. Алгоритмы сжатия в NTFS предназначены для поддержки кластеров размером до 4 КБ. Если размер кластера на томе NTFS превышает 4 КБ, сжатие NTFS недоступно. Если сжатие уменьшает объем данных с 64 КБ до 60 КБ или меньше, NTFS обрабатывает ненужные страницы размером 4 КБ как пустые кластеры разреженного файла - они не записываются. Это обеспечивает разумное время произвольного доступа, поскольку ОС просто должна следовать цепочке фрагментов.
Однако большие сжимаемые файлы становятся сильно фрагментированными, поскольку каждый кусок меньше 64 КБ становится фрагментом. Согласно исследованию группы разработчиков NTFS Microsoft, 50–60 ГБ - это разумный максимальный размер для сжатого файла на томе NTFS с размером кластера (блока) 4 КБ (по умолчанию). Этот разумный максимальный размер резко уменьшается для томов с меньшим размером кластера. Однопользовательские системы с ограниченным пространством на жестком диске могут извлечь выгоду из сжатия NTFS для небольших файлов, от 4 КБ до 64 КБ или более, в зависимости от степени сжатия. Файлы размером менее 900 байт хранятся в записи каталога флэш-памяти MFT.
, например, диски SSD не имеют задержек движения головки жестких дисков, поэтому фрагментация имеет меньший штраф. Пользователи быстрых многоядерных процессоров найдут улучшения в скорости приложений за счет сжатия своих приложений и данных, а также за счет уменьшения используемого пространства. Обратите внимание, что твердотельные накопители с контроллерами Sandforce уже сжимают данные. Однако, поскольку передается меньше данных, уменьшается количество операций ввода-вывода.
Сжатие лучше всего работает с файлами, которые имеют повторяющееся содержимое, редко записываются, обычно используются последовательно и сами не сжимаются. Файлы журнала - идеальный пример.
Если системные файлы, необходимые во время загрузки (например, драйверы, NTLDR, winload.exe или BOOTMGR), сжаты, система может не загрузиться правильно, потому что фильтры декомпрессии еще не загружены. Более поздние версии Windows не позволяют сжимать важные системные файлы.
Файлы можно сжимать или распаковывать по отдельности (путем изменения дополнительных атрибутов) для диска, каталога или дерева каталогов, становясь по умолчанию для файлов внутри.
Хотя доступ для чтения и записи к сжатым файлам прозрачен, Microsoft рекомендует избегать сжатия на серверах или общих сетевых ресурсах, содержащих перемещаемые профили, поскольку это создает значительную нагрузку на процессор.
Начиная с Windows 10, Microsoft представила дополнительные алгоритмы, а именно XPRESS4K / 8K / 16K и LZX. Оба алгоритма основаны на LZ77 с энтропийным кодированием Хаффмана, которого не хватало в LZNT1. Эти алгоритмы были взяты из Windows Imaging Format. В основном они используются для новой функции CompactOS, которая сжимает весь системный раздел с помощью одного из этих алгоритмов. Их также можно вручную включить для каждого файла с помощью флага / exe
команды compact
. При использовании с файлами алгоритм CompactOS избегает фрагментации, записывая сжатые данные в непрерывно выделенные блоки.
Разреженные файлы - это файлы с вкраплениями пустых сегментов, для которых не используется фактическое пространство для хранения. Для приложений файл выглядит как обычный файл с пустыми областями, которые выглядят как области, заполненные нулями. Редкий файл не обязательно включает области с разреженными нулями; атрибут "разреженный файл" просто означает, что они разрешены для файла.
Приложения баз данных, например, могут использовать разреженные файлы. Как и в случае со сжатыми файлами, фактические размеры разреженных файлов не учитываются при определении пределов квот.
Служба теневого копирования тома (VSS) сохраняет исторические версии файлов и папок на томах NTFS путем копирования старых, недавно перезаписанных данных в теневую копию с помощью метода копирование при записи. Позже пользователь может запросить восстановление более ранней версии. Это также позволяет программам резервного копирования данных архивировать файлы, которые в настоящее время используются файловой системой. В сильно загруженных системах Microsoft рекомендует настраивать том с теневой копией на отдельном диске.
В Windows Vista также представлены постоянные теневые копии для использования с Восстановление системы и Предыдущие версии особенности. Однако постоянные теневые копии удаляются, когда более старая операционная система подключает этот том NTFS. Это происходит потому, что старая операционная система не поддерживает новый формат постоянных теневых копий.
Начиная с Windows Vista, приложения могут использовать Транзакционную NTFS (TxF) для объединения нескольких изменений файлов в одну транзакцию. Транзакция гарантирует, что либо все изменения произойдут, либо ни одно из них не произойдет, и что ни одно приложение за пределами транзакции не увидит изменения, пока они не будут зафиксированы.
Он использует те же методы, что и для Volume Shadow Копирование (т. Е. Копирование при записи) для обеспечения безопасного отката перезаписанных данных и журнал CLFS для отметки транзакций, которые еще не были зафиксированы, или транзакций, которые были зафиксированы, но еще не зафиксированы. применяется полностью (в случае сбоя системы во время фиксации одним из участников).
Транзакционная NTFS не ограничивает транзакции только локальным томом NTFS, но также включает другие транзакционные данные или операции в других местах, например данные, хранящиеся в отдельных томах, локальный реестр или базы данных SQL, или текущие состояния системных служб или удаленных служб. Эти транзакции координируются в масштабе всей сети со всеми участниками, использующими конкретную службу, DTC, чтобы гарантировать, что все участники получат одно и то же состояние фиксации, и для передачи изменений, которые были подтверждены любым участником (чтобы другие могут аннулировать свои локальные кеши для старых данных или откатить свои текущие незафиксированные изменения). Транзакционная NTFS позволяет, например, создавать согласованные распределенные файловые системы в масштабе всей сети, в том числе с их локальными оперативными или автономными кэшами.
Microsoft теперь не рекомендует использовать TxF: «Microsoft настоятельно рекомендует разработчикам использовать альтернативные средства», поскольку «TxF может быть недоступен в будущих версиях Microsoft Windows».
В NTFS каждому файлу или папке назначается дескриптор безопасности , который определяет его владельца и содержит два списка управления доступом (ACL). Первый ACL, называемый список управления дискреционным доступом (DACL), точно определяет, какие типы взаимодействий (например, чтение, запись, выполнение или удаление) разрешены или запрещены каким пользователем или группами пользователей. Например, файлы в папке C: \ Program Files
могут быть прочитаны и выполнены всеми пользователями, но изменены только пользователем, имеющим административные привилегии. Windows Vista добавляет информацию об обязательном управлении доступом в списки DACL. DACL являются основным направлением Контроль учетных записей пользователей в Windows Vista и более поздних версиях.
Второй ACL, называемый системным списком управления доступом (SACL), определяет, какие взаимодействия с файлом или папкой должны проверяться и должны ли они регистрироваться в случае успешного или неудачного действия или и того, и другого. Например, аудит может быть включен для конфиденциальных файлов компании, чтобы ее менеджеры узнавали, когда кто-то пытается удалить их или сделать их копию, и удастся ли ему или ей.
Шифрованная файловая система (EFS) обеспечивает надежное и прозрачное для пользователя шифрование любого файла или папки на томе NTFS. EFS работает вместе со службой EFS, Microsoft CryptoAPI и библиотекой времени выполнения файловой системы EFS (FSRTL). EFS работает путем шифрования файла с помощью массового симметричного ключа (также известного как ключ шифрования файла или FEK), который используется, поскольку для шифрования и дешифрования больших объемов данных требуется относительно небольшое количество времени. чем при использовании шифра с асимметричным ключом . Симметричный ключ, который используется для шифрования файла, затем шифруется с помощью открытого ключа, связанного с пользователем, который зашифровал файл, и эти зашифрованные данные сохраняются в альтернативном потоке данных зашифрованного файла. Чтобы расшифровать файл, файловая система использует закрытый ключ пользователя для расшифровки симметричного ключа, который хранится в потоке данных. Затем он использует симметричный ключ для дешифрования файла. Поскольку это делается на уровне файловой системы, это прозрачно для пользователя. Кроме того, в случае потери пользователем доступа к своему ключу в систему EFS была встроена поддержка дополнительных ключей дешифрования, так что агент восстановления может получить доступ к файлам при необходимости. Шифрование с помощью NTFS и сжатие с помощью NTFS взаимоисключают; однако NTFS можно использовать для одного и стороннего инструмента для другого.
Поддержка EFS недоступна в версиях Windows Basic, Home и MediaCenter, и ее необходимо активировать после установки версий Windows Professional, Ultimate и Server или с помощью средств корпоративного развертывания в доменах Windows.
Дисковые квоты были введены в NTFS v3. Они позволяют администратору компьютера с версией Windows, поддерживающей NTFS, устанавливать пороговое значение дискового пространства, которое могут использовать пользователи. Это также позволяет администраторам отслеживать, сколько дискового пространства использует каждый пользователь. Администратор может указать определенный уровень дискового пространства, который пользователь может использовать до получения предупреждения, а затем отказать пользователю в доступе, как только он достигнет своего верхнего предела пространства. Дисковые квоты не учитывают прозрачное сжатие файлов NTFS, если оно включено. Приложения, которые запрашивают количество свободного места, также будут видеть количество свободного места, оставшегося для пользователя, к которому применена квота.
Появившиеся в NTFS v3 точки повторной обработки NTFS используются путем связывания тега повторной обработки в атрибуте пользовательского пространства файла или каталога. Microsoft включает несколько тегов по умолчанию, включая символические ссылки, точки соединения каталогов и точки монтирования тома. Когда Диспетчер объектов анализирует поиск по имени файловой системы и обнаруживает атрибут повторной обработки, он повторно анализирует поиск по имени, передавая управляемые пользователем данные повторного анализа каждому драйверу фильтра файловой системы, загружаемому в Windows. Каждый драйвер фильтра проверяет данные повторной обработки, чтобы определить, связаны ли они с этой точкой повторной обработки, и если драйвер фильтра определяет совпадение, он перехватывает запрос файловой системы и выполняет свои специальные функции.
Начиная с Windows Vista Microsoft добавила встроенную возможность сжимать или расширять раздел. Однако эта возможность не перемещает фрагменты файла подкачки или файлы, которые были помечены как неперемещаемые, поэтому для сжатия тома часто требуется перемещение или отключение любого файла страницы , индекса Windows Search, и любое теневое копирование, используемое System Restore. Различные сторонние инструменты могут изменять размер разделов NTFS.
Внутренне NTFS использует B-деревья для индексации данных файловой системы. Журнал файловой системы используется для гарантии целостности метаданных файловой системы, но не содержимого отдельных файлов. Известно, что системы, использующие NTFS, обладают повышенной надежностью по сравнению с файловыми системами FAT.
NTFS допускает любую последовательность 16-битных значений для кодирования имен (имена файлов, имена потоков, имена индексов и т. Д.), Кроме 0x0000. Это означает, что поддерживаются блоки кода UTF-16, но файловая система не проверяет правильность последовательности UTF-16 (допускает любую последовательность short значения, не ограниченные стандартом Unicode). В пространстве имен Win32 любые единицы кода UTF-16 нечувствительны к регистру, тогда как в пространстве имен POSIX они чувствительны к регистру. Имена файлов ограничены 255 кодовыми единицами UTF-16. Некоторые имена зарезервированы в корневом каталоге тома и не могут использоваться для файлов. Это $ MFT
, $ MFTMirr
, $ LogFile
, $ Volume
, $ AttrDef
, .
(точка), $ Bitmap
, $ Boot
, $ BadClus
, $ Secure
, $ UpCase
и $ Extend
..
(точка) и $ Extend
- это каталоги; остальные - файлы. Ядро NT ограничивает полные пути до 32 767 единиц кода UTF-16. Существуют некоторые дополнительные ограничения на кодовые точки и имена файлов.
Смещение в байтах | Длина поля | Типовое значение | Имя поля | Назначение | |
---|---|---|---|---|---|
0x00 | 3 байта | 0xEB5290 | Инструкция JMP | Вызывает продолжение выполнения после структур данных в этом загрузочном секторе. | |
0x03 | 8 байт | "NTFS ". Слово «NTFS», за которым следуют четыре конечных пробела (0x20) | OEM ID | Это магическое число, которое указывает на это файловая система NTFS. | |
0x0B | 2 байта | 0x0200 | BPB | Байт на сектор | Количество байтов в секторе диска. |
0x0D | 1 байт | 0x08 | секторов на кластер | Количество секторов в кластере. Если значение больше 0x80, количество секторов равно 2 в степени абсолютного значения, считая это поле отрицательным. | |
0x0E | 2 байта | 0x0000 | Зарезервированные секторы, неиспользуемые | Сколько места зарезервировано ОС в начале диска. Это всегда 9. | |
0x10 | 3 байта | 0x000000 | Не используется | Это поле всегда 0 | |
0x13 | 2 байта | 0x0000 | Не используется NTFS | Это поле всегда 0 | |
0x15 | 1 байт | 0xF8 | Дескриптор носителя | Тип привода. 0xF8 используется для обозначения жесткого диска (в отличие от гибких дисков нескольких размеров). | |
0x16 | 2 байта | 0x0000 | Не используется | Это поле всегда 0 | |
0x18 | 2 байта | 0x003F | секторов на дорожку | Число секторов диска в дорожке диска. | |
0x1A | 2 байта | 0x00FF | Number Of Heads | Количество головок на диске. | |
0x1C | 4 байта | 0x0000003F | Скрытые секторы | Число секторов, предшествующих разделу. | |
0x20 | 4 байта | 0x00000000 | Не используется | Не используется NTFS | |
0x24 | 4 байта | 0x00800080 | EBPB | Не используется | Не используется NTFS |
0x28 | 8 байт | 0x00000000007FF54A | Всего секторов | Размер раздела в секторах. | |
0x30 | 8 байтов | 0x0000000000000004 | номер кластера $ MFT | Кластер, содержащий главную таблицу файлов | |
0x38 | 8 байт | 0x000000000007FF54 | номер кластера $ MFTMirr | Кластер, содержащий резервную копию главной таблицы файлов | |
0x40 | 1 byte | 0xF6 | Байт или кластеров на сегмент файловой записи | Положительное значение обозначает количество кластеров в сегменте файловой записи. Отрицательное значение обозначает количество байтов в сегменте записи файла, и в этом случае размер равен 2 в степени абсолютного значения. (0xF6 = -10 → 2 = 1024). | |
0x41 | 3 байта | 0x000000 | Не используется | Это поле не используется NTFS | |
0x44 | 1 byte | 0x01 | Байт или кластеров на индексный буфер | Положительное значение обозначает количество кластеров в индексном буфере. Отрицательное значение обозначает количество байтов и использует тот же алгоритм для отрицательных чисел, что и «Байт или кластеров на сегмент записи файла». | |
0x45 | 3 байта | 0x000000 | Не используется | Это поле не используется NTFS | |
0x48 | 8 bytes | 0x1C741BC9741BA514 | Серийный номер тома | Уникальный случайный номер, присвоенный этому разделу, чтобы все было организовано. | |
0x50 | 4 байта | 0x00000000 | Контрольная сумма, не используется | Предположительно контрольная сумма. | |
0x54 | 426 байтов | Код начальной загрузки | Код, который загружает остальную часть операционной системы. На это указывают первые 3 байта этого сектора. | ||
0x01FE | 2 байта | 0xAA55 | Маркер конца сектора | Этот флаг указывает, что это допустимый загрузочный сектор. |
Этот формат загрузочного раздела примерно основан на более ранней файловой системе FAT, но поля находятся в разных местах. Некоторые из этих полей, особенно поля «секторов на дорожку», «количество головок» и «скрытых секторов» могут содержать фиктивные значения на дисках, где они либо не имеют смысла, либо не поддаются определению.
ОС сначала просматривает 8 байтов в 0x30, чтобы найти номер кластера $ MFT, затем умножает это число на количество секторов в кластере (1 байт находится в 0x0D). Это значение представляет собой смещение сектора (LBA ) относительно $ MFT, которое описано ниже.
В NTFS все данные файла, каталога и метафайла - имя файла, дата создания, права доступа (с использованием контроля доступа списки ), а размер - хранятся как метаданные в главной таблице файлов (MFT ). Этот абстрактный подход позволял легко добавлять функции файловой системы во время разработки Windows NT - примером является добавление полей для индексации, используемых программным обеспечением Active Directory. Это также позволяет программному обеспечению быстрого поиска файлов очень быстро находить названные локальные файлы и папки, включенные в MFT, без необходимости в каком-либо другом индексе.
Структура MFT поддерживает алгоритмы, которые минимизируют фрагментацию диска. Запись в каталоге состоит из имени файла и «идентификатора файла» (аналогично индексу с номером ), который представляет собой номер записи, представляющей файл в главной таблице файлов. Идентификатор файла также содержит счетчик повторного использования для обнаружения устаревших ссылок. Хотя это сильно напоминает W_FID Files-11, другие структуры NTFS радикально отличаются.
Две копии MFT сохраняются на случай повреждения. Если первая запись повреждена, NTFS читает вторую запись, чтобы найти файл зеркала MFT. Расположение обоих файлов хранится в загрузочном секторе.
NTFS содержит несколько файлов, которые определяют и организуют файловую систему. Во всех отношениях большинство этих файлов имеют структуру, как и любой другой пользовательский файл (наиболее необычным является $ Volume), но не представляют прямого интереса для клиентов файловой системы. Эти метафайлы определяют файлы, выполняют резервное копирование критически важных данных файловой системы, буферируют изменения файловой системы, управляют распределением свободного пространства, удовлетворяют ожиданиям BIOS, отслеживают неверные единицы распределения и хранят информацию о безопасности и использовании дискового пространства. Все содержимое находится в безымянном потоке данных, если не указано иное.
Номер сегмента | Имя файла | Назначение |
---|---|---|
0 | $ MFT | Описывает все файлы на томе, включая имена файлов, метки времени, имена потоков и списки номеров кластеров, в которых находятся потоки данных, индексы, идентификаторы безопасности и атрибуты файлов, такие как «только для чтения», «сжатый», «зашифрованный» и т. д. |
1 | $ MFTMirr | Дублировать первых важных записей $ MFT, обычно 4 записи (4 килобайт ). |
2 | $ LogFile | Содержит журнал транзакций изменений метаданных файловой системы. |
3 | $ Volume | Содержит информацию о томе, а именно идентификатор объекта тома, метка тома, версия файловой системы и флаги тома (смонтировано, запрошено chkdsk, запрошено изменение размера $ LogFile, смонтировано на NT 4, обновление серийного номера тома, запрос на обновление структуры). Эти данные хранятся не в потоке данных, а в специальных атрибутах MFT: если они присутствуют, идентификатор объекта тома сохраняется в записи $ OBJECT_ID; метка тома хранится в Запись $ VOLUME_NAME, а данные оставшегося тома находятся в записи $ VOLUME_INFORMATION. Примечание: серийный номер тома хранится в файле $ Boot (ниже). |
4 | $ AttrDef | Таблица атрибутов MFT, которая связывает числовые идентификаторы с именами. |
5 | . | Корневой каталог. Данные каталога хранятся в атрибутах $ INDEX_ROOT и $ INDEX_ALLOCATION с именами $ I30. |
6 | $ Bitmap | Массив битовых записей: каждый бит указывает, используется ли соответствующий кластер (выделен) или свободен (доступен для выделения). |
7 | $ Boot | Загрузочная запись тома (VBR). Этот файл всегда находится в первых кластерах тома. Он содержит код начальной загрузки (см. NTLDR / BOOTMGR ) и блок параметров BIOS, включая серийный номер тома и номера кластеров $ MFT и $ MFTMirr. |
8 | $ BadClus | Файл, содержащий все кластеры, отмеченные как имеющие плохие сектора. Этот файл упрощает управление кластером с помощью утилиты chkdsk как в качестве места для размещения вновь обнаруженных поврежденных секторов, так и для идентификации кластеров, на которые нет ссылок. Этот файл содержит два потока данных, даже на томах без сбойных секторов: безымянный поток содержит сбойные сектора - это нулевая длина для идеальных томов; второй поток называется $ Bad и содержит все кластеры тома, не входящего в первый поток. |
9 | $ Secure | Список управления доступом база данных, которая сокращает накладные расходы, имея множество идентичных списков контроля доступа, хранящихся с каждым файлом, за счет уникального хранения этих списков контроля доступа только в этой базе данных (содержит два индекса: $ SII (Standard_Information ID) и $ SDH (Security Descriptor Hash), который индексирует поток с именем $ SDS, содержащий фактическую таблицу ACL). |
10 | $ UpCase | Таблица символов верхнего регистра Unicode для обеспечения нечувствительности к регистру в Win32 и пространства имен DOS. |
11 | $ Extend | Каталог файловой системы, содержащий различные дополнительные расширения, такие как $ Quota, $ ObjId, $ Reparse или $ UsnJrnl. |
12–23 | Зарезервировано для записей расширения $ MFT. Записи расширений - это дополнительные записи MFT, которые содержат дополнительные атрибуты, не подходящие для основной записи. Это может произойти, если файл достаточно фрагментирован, имеет много потоков, длинные имена файлов, сложную безопасность или другие редкие ситуации. | |
24 | $ Extend \ $ Quota | Содержит информацию о дисковых квотах. Содержит два корня индекса с именами $ O и $ Q. |
25 | $ Extend \ $ ObjId | Содержит информацию об отслеживании ссылок. Содержит корень индекса и выделение с именем $ O. |
26 | $ Extend \ $ Reparse | Содержит данные точки повторной обработки (например, символические ссылки ). Содержит корень индекса и выделение с именем $ R. |
27– | Начало обычных файловых записей. |
Эти метафайлы обрабатываются Windows специально, обрабатываются непосредственно драйвером NTFS.SYS
, и их трудно просматривать напрямую: необходимы специальные инструменты. Начиная с Windows 7 драйвер NTFS полностью запрещает доступ пользователей, что приводит к BSoD всякий раз, когда делается попытка выполнить файл метаданных. Одним из таких инструментов является nfi.exe («Утилита информации о файловом секторе NTFS»), которая свободно распространяется как часть Microsoft «OEM Support Tools». Например, для получения информации о сегменте главной таблицы файлов «$ MFT» используется следующая команда: nfi.exe c: \ $ MFT
Другой способ обойти ограничение - использовать 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»), которая свободно распространяется как часть Microsoft «OEM Support Tools».
Системные вызовы Windows могут обрабатывать альтернативные потоки данных. В зависимости от операционной системы, служебной программы и удаленной файловой системы при передаче файлов могут автоматически удаляться потоки данных. Безопасным способом копирования или перемещения файлов является использование системных вызовов BackupRead и BackupWrite, которые позволяют программам перечислять потоки, проверять, следует ли записывать каждый поток в целевой том, и сознательно пропускать нежелательные потоки.
Чтобы оптимизировать хранилище и уменьшить накладные расходы ввода-вывода для очень распространенного случая атрибутов с очень маленьким ассоциированным значением, NTFS предпочитает помещать значение внутри самого атрибута (если тогда размер атрибута не превышает максимального размера записи MFT) вместо использования пространства записи MFT для перечисления кластеров, содержащих данные; в этом случае атрибут не будет хранить данные напрямую, а просто сохранит карту распределения (в виде прогонов данных), указывающую на фактические данные, хранящиеся в другом месте на томе. Когда к значению можно получить доступ непосредственно из атрибута, оно называется «резидентными данными» (специалистами компьютерной криминалистики ). Количество подходящих данных сильно зависит от характеристик файла, но от 700 до 800 байт обычно используются в однопоточных файлах с короткими именами файлов и без списков контроля доступа.
Карта распределения хранится в виде прогонов данных со сжатым кодированием. Каждый цикл данных представляет собой непрерывную группу кластеров, в которых хранится значение атрибута. Для файлов на томе размером несколько ГБ каждая запись может быть закодирована от 5 до 7 байтов, что означает, что запись MFT размером 1 КБ может хранить около 100 таких прогонов данных. Однако, поскольку $ ATTRIBUTE_LIST также имеет ограничение по размеру, опасно иметь более 1 миллиона фрагментов одного файла на томе NTFS, что также подразумевает, что в целом не рекомендуется использовать сжатие NTFS для файла. более 10 ГБ.
Драйвер файловой системы NTFS иногда пытается переместить данные некоторых атрибутов, которые можно сделать нерезидентными, в кластеры, а также пытается переместить данные, хранящиеся в кластерах обратно к атрибуту внутри записи MFT на основе правил приоритета и предпочтительного порядка, а также ограничений по размеру.
Поскольку резидентные файлы не занимают кластеры напрямую («единицы распределения»), том NTFS может содержать больше файлов на томе, чем кластеров. Например, NTFS раздел на 74,5 ГБ форматируется с 19 543 064 кластерами по 4 КБ. Вычитание системных файлов (файл журнала размером 64 МБ, файл Bitmap размером 2442888 байт и около 25 кластеров фиксированных накладных расходов) оставляет 19 526 158 кластеров свободными для файлов и индексов. Поскольку на кластер приходится четыре записи MFT, теоретически этот том может содержать почти 4 × 19 526 158 = 78 104 632 резидентных файла.
Оппортунистические блокировки файлов (oplocks) позволяют клиентам изменять свою стратегию буферизации для данного файла или потока, чтобы повысить производительность и уменьшить использование сети. Блокировки применяются к данному открытому потоку файла и не влияют на блокировки в другом потоке.
Oplocks может использоваться для прозрачного доступа к файлам в фоновом режиме. Сетевой клиент может избегать записи информации в файл на удаленном сервере, если никакой другой процесс не обращается к данным, или он может буферизовать данные упреждающего чтения, если никакой другой процесс не записывает данные.
Windows поддерживает четыре разных типа блокировок:
Были установлены оппортунистические блокировки улучшено в Windows 7 и Windows Server 2008 R2 с помощью ключей дополнительной блокировки для каждого клиента.
Windows NT и ее потомки сохраняют внутренние временные метки как UTC и выполняют соответствующие преобразования для демонстрационных целей; все временные метки NTFS указаны в формате UTC.
По историческим причинам все версии Windows, не поддерживающие NTFS, сохраняют внутреннее время как локальное поясное время, и, следовательно, то же самое делают все файловые системы, кроме NTFS, которые поддерживаются текущими версиями Windows. Это означает, что когда файлы копируются или перемещаются между разделами NTFS и не-NTFS, ОС должна на лету преобразовывать метки времени. Но если некоторые файлы перемещаются, когда действует летнее время (DST), а другие файлы перемещаются, когда действует стандартное время, могут возникнуть некоторые неоднозначности в преобразованиях. В результате, особенно вскоре после одного из дней, когда изменяется время локальной зоны, пользователи могут заметить, что некоторые файлы имеют временные метки с ошибкой на один час. Из-за различий в реализации DST в разных юрисдикциях это может привести к потенциальной ошибке метки времени до 4 часов в любой заданный 12 месяцев.
Хотя разные версии NTFS по большей части полностью вперед - и обратно совместимы, существуют технические соображения для монтирования новых томов NTFS в более старых версиях Microsoft Windows. Это влияет на двойную загрузку и внешние переносные жесткие диски. Например, попытка использовать раздел NTFS с «предыдущими версиями» (также известный как теневое копирование тома ) в операционной системе, которая его не поддерживает, приведет к потере содержимого этих предыдущих версий. Утилита командной строки Windows под названием convert.exe может преобразовывать поддерживаемые файловые системы в NTFS, включая HPFS (только в Windows NT 3.1, 3.5 и 3.51), FAT16 и FAT32 (в Windows 2000 и более поздних версиях).
Начиная с Windows 10 версии 1709, известной как Fall Creators Update, Microsoft требует, чтобы файловая структура OneDrive располагалась на диске NTFS. Это связано с тем, что тег повторной обработки для каждого файла и каталога в локальной файловой структуре OneDrive устанавливается рекурсивным образом, что делает файл или папку непригодными для использования в любой предыдущей версии Windows, с любым другим драйвером файловой системы NTFS или любой файловой системой. и утилиты резервного копирования, не обновленные для его поддержки. Неизвестно, является ли рекурсивное связывание функцией файловой системы NTFS или недокументированным обходным путем Microsoft для поддержки новой функции OneDrive «Файлы по запросу».
FreeBSD 3.2, выпущенная в мае 1999 г., включала поддержку NTFS только для чтения, написанную Семеном Устименко. Эта реализация была перенесена на NetBSD Христосом Зуласом и Яромиром Долечеком и выпущена вместе с NetBSD 1.5 в декабре 2000 года. Реализация NTFS для FreeBSD была также перенесена на OpenBSD Жюльеном Бордетом и предлагает чтение в исходном виде. -поддержка только NTFS по умолчанию на платформах i386 и amd64 начиная с версии 4.9, выпущенной 1 мая 2011 года.
ядро Linux версии 2.2.0 и более поздних версий включают возможность чтения разделов NTFS; версии ядра 2.6.0 и более поздние содержат драйвер, написанный Антоном Альтапармаковым (Кембриджский университет ) и Ричардом Руссоном, который поддерживает чтение, перезапись и изменение размера файлов. Из-за сложности внутренней структуры NTFS встроенный драйвер ядра 2.6.14 запрещает изменения тома, которые считаются небезопасными, во избежание повреждения.
Mac OS X 10.3 включала реализацию NTFS Устименко только для чтения из FreeBSD. Затем Apple наняла Антона Альтапармакова для написания новой реализации NTFS для Mac OS X 10.6. Встроенная поддержка записи NTFS была обнаружена в 10.6 и более поздних версиях, но не активирована по умолчанию, хотя существуют обходные пути для включения этой функции. Однако отчеты пользователей указывают на то, что функциональность нестабильна и имеет тенденцию вызывать «паники ядра », что, вероятно, является причиной того, что поддержка записи не была включена или объявлена.
Captive NTFS, «упаковка» драйвер, который использует собственный драйвер Windows ntfs.sys, существует для Linux. Он был построен как программа Filesystem in Userspace (FUSE) и выпущен под лицензией GPL, но работа над Captive NTFS была прекращена в 2006 году.
NTFS-3G является бесплатной GPL -лицензионная FUSE-реализация NTFS, которая изначально была разработана как драйвер ядра Linux Szabolcs Szakacsits. Он был переписан как программа FUSE для работы в других системах, поддерживаемых FUSE, таких как macOS, FreeBSD, NetBSD, OpenBSD, Solaris, QNX и <247.>Haiku и позволяет читать и записывать разделы NTFS. Коммерческая версия NTFS-3G с улучшенной производительностью, называемая «Tuxera NTFS для Mac», также доступна от разработчиков NTFS-3G.
Paragon Software Group продает драйвер чтения-записи с именем NTFS для Mac OS X, которая также включена в некоторые модели жестких дисков Seagate.
Пакет NetDrive для OS / 2 (и производные, такие как eComStation и ArcaOS ) поддерживает плагин, который обеспечивает доступ для чтения и записи к томам NTFS.
Существует бесплатный драйвер чтения / записи для MS-DOS от Avira под названием «NTFS4DOS».
Ahead Software разработала драйвер «NTFSREAD» (версия 1.200) для DR-DOS 7.0x с 2002 по 2004 год. Он был частью их программного обеспечения Nero Burning ROM.