Почему файлы не перемещаются в некоторые области томов с файловой системой ntfs
Основные отличия и ключевые моменты файловой системы, а также определим, был ли переход с FAT на NTFS оправданным.
Файловая система NTFS — хранение и восстановление данных Файловая система NTFS — хранение и восстановление данныхСодержание:
- NTFS – «файловая система новой технологии».
- Масштабируемость.
- Надёжность.
- Безопасность.
- Технология сжатия NTFS.
- Альтернативные потоки данных в NTFS.
- Разреженные файлы.
- Точки повторной обработки.
Перед массовым распространением операционных систем семейства Windows NT (2000, XP, Vista, 7, 10, Server и т.д.) большинство продуктов Microsoft, а также MS DOS использовали файловую систему FAT, которая была разработана Б. Гейтсом еще в середине 80-ых годов. FAT зарекомендовала себя как надежная и проверенная файловая система (ФС), но с развитием технологий и увеличением объемов накопителей, Microsoft представили NTFS – новую ФС, которая активно используется и до сих пор.
NTFS – «файловая система новой технологии»
ФС FAT была разработана специально для использования с дискетами, которые ушли в прошлое с массовым распространением компакт-дисков и USB-накопителей. FAT плохо подходил для масштабирования, а максимальный размер файла в 4 гигабайта накладывал множество ограничений. Помимо этого, устаревший формат файловой системы не обладал требуемыми функциями безопасности, а также не позволял производить восстановление удаленной информации. Эти причины заставили Microsoft заняться разработкой новой ФС.
Интересный факт: по состоянию на 2016 год производством 3.5” дискет занимается всего один завод в Тайване.
Во время разработки NTFS, Microsoft использовали некоторые наработки, а также отдельные моменты уже существующих ФС FAT и HPFS (файловая система для операционной системы OS/2, которая разрабатывалась Microsoft совместно с IBM). После нескольких лет активной разработки, Microsoft представили свою новую ФС NTFS в Windows NT 3.1 – специализированной ОС для серверов и рабочих станций.
NTFS представляет собой необычную файловую систему, которая основана на… файлах. Действительно, каждый элемент NTFS представляет собой файл. Даже сама структура NTFS: её журнал, главная таблица файлов (MFT) и другие элементы построены и ориентированы непосредственно на файлы.
Разберемся с основными моментами и преимуществами NTFS более детально.
Масштабируемость
Microsoft занимались разработкой ФС NTFS во времена, когда объем в 1 гигабайт считался весьма значительным. Тем не менее, разработчики предвидели мощный скачок цифровых технологий, поэтому новая файловая система создавалась «с запасом». Таким образом максимальный теоретический размер тома ограничивается 16 экзабайтами, что равно примерно одному миллиону терабайт. В данный момент не существует такого носителя для частного использования, который бы хоть-сколько приблизился к этой отметке. С этого можно сделать вывод, что NTFS имеет превосходную масштабируемость, значительно обогнавшую своё время.
Надёжность
Надежность никогда не была сильной стороной файловой системы FAT. Из-за особенности её строения, даже незначительное повреждение таблицы размещения файлов может со временем привести к потере значительного количества информации .
В NTFS такая проблема была нивелирована внедрением теневых копий тома , а также автоматическим ведением журнала файловой системы , куда фиксируются все записи. В случае сбоя, система может обратиться к записи в журнале и откатить все незафиксированные изменения .
В то же время, функция теневого копирования, не только позволяет восстанавливать данные, но и выбирать необходимые перезаписанные версии файлов (включая системные компоненты, настройки, программные компоненты и т.д.), которые для удобства, могут записываться на сторонний носитель.
Безопасность
ФС FAT32 напрочь лишена встроенной системы безопасности. У неё отсутствует управление доступом, шифрование системы, а также уровневое шифрование с привязкой к конкретной учетной записи.
NTFS обладает всеми вышеописанными функциями, а также предлагает дополнительный функционал безопасности.
Безопасность на уровне ОС включает в себя списки контроля доступа , управляющие разрешениями для каждого файла, папки или другого объекта. В списках указывается какие пользователи или группы (локальные или сетевые) могут выполнять с объектами различные манипуляции (только чтение, изменение, удаление, без доступа и т.д.).
Стоит отметить, что подобная мера безопасности не является помехой для восстановления утерянной информации. К примеру, утилита для восстановления данных RS NTFS Recovery превосходно справляется со своей задачей, обходя разрешения, установленные файловой системой.
Тем не менее, в NTFS присутствует еще несколько мер безопасности, о которых следует рассказать более детально.
NTFS может производить шифрование на уровне отдельного объекта , что позволяет шифровать конкретные папки и файлы от других пользователей на одном компьютере. Суть этого состоит в том, что выбранные файлы для шифрования будут автоматически расшифровываться при входе с нужной учетной записи. В то же время, для всех других – объекты останутся недоступными.
Важно заметить, если пользователь утеряет данные для доступа к учетной записи (пароль может сбросить администратор компьютера или его могут изменить с помощью вредоносного ПО), скорее всего файлы так и останутся заблокированными без возможности прочтения или разблокировки.
Отметим, зашифрованные файлы в NTFS сохраняют свою структуру, поэтому удаленные зашифрованные данные можно восстановить при помощи RS Partition Recovery или RS NTFS Recovery точно так же, как и файлы, не подвергающиеся шифрованию. К тому же, восстановленные файлы будут сохранять шифрование, которое можно снять при наличии соответствующего пароля.
Встроенное шифрование NTFS отлично подходит для защиты данных на системном уровне (между пользователями одного ПК), но для большей безопасности в Windows присутствует дополнительная система шифрования BitLocker, предназначенная для шифрования целых логических разделов.
Это позволяет безопасно пользоваться и работать нескольким пользователям за одним компьютером, а также предотвращать офлайн-атаки (к примеру, когда злоумышленники извлекли жесткий диск с ценной информацией и попытались считать его на другом ПК, разделы не будут доступны, пока не будет введен специальный ключ для дешифровки).
Важно! После введения ключа BitLocker, зашифрованные разделы станут доступны всем пользователям ПК.
Технология сжатия NTFS
Другой особенностью файловой системы NTFS является возможность сжимать содержимое файлов и папок для экономии места на носителе. Данная функция достаточно быстро работает, а также позволяет считывать отдельные фрагменты данных, без необходимости распаковывания целого файла.
Сжатый файл воспринимается файловой системой NTFS в виде обычной информации, поэтому при утере сжатых данных, пользователь может воспользоваться RS Partition Recovery или RS NTFS Recovery для восстановления сжатой информации без каких-либо потерь.
Альтернативные потоки данных в NTFS
В NTFS реализована поддержка альтернативных потоков данных, которые изначально были разработаны для обеспечения совместимости различных файловых систем.
В данный момент альтернативные потоки данных используются в целях безопасности, поскольку данная технология позволяет ставить «метки» на файлах, по которым система в автоматическом режиме может определять потенциально опасные объекты . В метках могут содержаться данные об производителе или авторе файла, а также о его происхождении.
Помимо этого, в альтернативных потоках могут находиться абсолютно любые файлы с практически произвольным размером, который может превышать размер файла из основного потока. Такая возможность альтернативных потоков данных является серьезной брешью в безопасности, которой часто пользуются разработчики вредоносного ПО. К счастью, большинство современных антивирусов имеют надежный системы сканирования, которые также проверяют информацию в альтернативных потоках.
Утилита для восстановления информации RS NTFS Recovery работает с альтернативными потоками данных, поэтому удаленные файлы после восстановления будут сохранять все потоки и их содержимое.
Разреженные файлы
Необычной дополнительной особенностью NTFS является работа с так называемыми «Разреженными файлами» («Sparse files»).
В разреженных файла неиспользуемые (пустые) области представляются в виде метаданных, которые в свою очередь не занимают физического места на носителе .
Чем это полезно? Представим базу данных, которая состоит из одного главного файла объемом в несколько терабайт. Чтобы создать или сохранить файл такого размера на жестком диске, системе может понадобиться значительное количество времени для заполнения неиспользуемого пространства накопителя нулями . При использовании NTFS данный процесс можно значительно ускорить, поскольку ФС поддерживает указание пустых областей в виде ссылок на метаданные .
Точки повторной обработки
Точки повторной обработки или Reparse Points позволяют создавать в файловой системе NTFS жесткие или символические ссылки , при помощи которых пользователь может выполнять различные манипуляции с данными и их местоположением. Более детально узнать про данную функцию можно в статье: « Символические и жесткие ссылки в Windows », где приведены примеры их создания, а также их основные возможности.
Отметим, программа RS NTFS Recovery , как и другие утилиты от Recovery Software , отлично справляются с подобными данными.
Не так давно при разработке фильтра файловых систем возникла проблема, которая приводила к подвисанию всей системы. Казалось бы, фильтр выполнял очень простые действия и сам был очень примитивным. Чтобы выяснить причину, пришлось спуститься до отладки и реверс-инжиниринга драйвера NTFS. Анализ выявил очень интересный эффект. Если скомпилировать и выполнить очень простую программу, изображенную на рисунке ниже, то доступ к соответствующему тому подвиснет.
Т.е. в данном примере, если попытаться открыть любой файл относительно файла $mft, доступ ко всему тому «С» повиснет, а так как этот том является системным, подвиснет и вся система. При этом не нужно иметь каких-либо прав. Если же том был не системным, то повиснет только доступ к этому тому, но если выполнить перезагрузку, то система повиснет на ней.
Немного теории
Прежде чем описать суть проблемы, стоит рассмотреть базовые принципы построения файловых систем. Когда некий процесс открывает файл, кроме полученного HANDLE на него, в пространстве ядра также формируются структуры, как самим ядром, так и файловой системой, которые, по сути, представляют файл тома в памяти. Ниже на рисунке изображены эти структуры.
HANDLE файла всегда ссылается на структуру ядра FILE_OBJECT. Эта структура формируется ядром перед посылкой запроса файловой системе. Файловая система, в свою очередь, инициализирует поля этой структуры. Таким образом, структура FILE_OBJECT будет содержать указатели на структуры файловой системы: FCB (File control block, содержит все необходимые данные для управления файлом) и CCB (Context Control Block, содержит данные, уникальные для конкретного открытого экземпляра). Также не исключено, что два разных HANDLE будут ссылаться на один и тот же файл тома, как это отражено слева. Структура FCB содержит список всех структур CCB. Структура CCB содержит указатель на соответствующую FCB. Т.е. для каждого открытого файла тома в памяти будет ровно одна структура FCB. Если файл открыт несколько раз, то также будет сформировано ровно столько CCB структур, сколько раз был открыт соответствующий файл, и все эти структуры будут ссылаться на единственную FCB структуру.
Поскольку доступ к файлу может выполняться одновременно разными или одним и тем же процессом, то эти параллельные операции должны быть сериализованы. При этом допустимо, что некоторые операции будут выполняться одновременно (например, чтение), однако существуют ситуации, когда доступ должен выполняться монопольно (например, запись). Для этого ядро предоставляет механизм сериализации – ERESOURCE. Этот объект может быть захвачен как монопольно, так и разделяемо. Если объект захвачен монопольно, тогда любые попытки захватить его встанут в очередь ожидания. Если объект захвачен разделяемо, тогда попытки также захватить его разделяемо будут удовлетворены немедленно. Если же объект захвачен разделяемо и очередь ожидания не пуста (т.е. была попытка монопольного захвата), тогда любые попытки захватить его встанут в очередь ожидания.
Структуры FCB файловых систем для сериализации доступа содержат эти механизмы и активно пользуются ими во время доступа к файлу. Таким образом обеспечивается целостность файла как в памяти, так и на томе.
Файл $mft файловой системы NTFS является системным. Этот файл описывает расположение всех файлов на томе. NTFS при монтировании открывает его для личного использования. При попытке прочитать содержимое директории или во время открытия файла NTFS выполнит чтение файла $mft. При любой попытке удалить файл или создать файл NTFS выполнит запись в этот файл. Следовательно, перед любой такой операцией механизм ERESOURCE этого файла также будет захвачен, затем будет выполнена сама операция, после чего механизм будет освобожден.
Функция NtfsCommonCreate
Чтобы понять суть проблемы, необходимо понимать принцип работы функции NtfsCommonCreate файловой системы NTFS. Очень упрощенный псевдокод изображен ниже на рисунке. Приведены только те части функции, которые имеют прямое отношение к проблеме.
Файловая система NTFS хранит дерево уже открытых файлов/директорий. Поэтому целесообразно в целях повышения производительности найти целевой файл в этом дереве вместо многократного чтения тома. Следовательно, функция посредством функции NtfsFindStartingNode попытается найти его. Если же найти файл не удалось, тогда функция попытается найти директорию, в которой он располагается. Эта попытка будет выполняться вплоть до корня файловой системы. Функция NtfsFindStartingNode возвращает указатель на структуру FCB либо самого файла, либо той директории, которая по глубине ближе всех располагается к целевому файлу. Функция также вернет часть необработанного пути относительно найденной директории. Также функция предварительно захватывает ERESOURCE найденной директории или файла разделяемо.
Далее функция NtfsCommonCreate проверяет, есть ли часть необработанного пути, если нет — значит функция NtfsFindStartingNode нашла сам файл, и в таком случае работа функции NtfsCommonCreate завершается. В противном случае функция продолжает поиск файла, но уже на томе.
Как видно из псевдокода, функция содержит цикл, в котором последовательно открываются директории, ведущие к файлу. В начале работы цикла проверяется, является ли файл директорией, и если нет, тогда работа функции завершается с ошибкой. В противном случае извлекается следующее имя в пути и выполняется попытка открыть файл/директорию с таким именем посредством функции NtfsOpenSubdirectory. Функция NtfsOpenSubdirectory также захватывает открытый файл/директорию монопольно. Перед вызовом функции NtfsOpenSubdirectory также освобождается предыдущая открытая директория функцией NtfsOpenSubdirectory. Работа цикла будет продолжаться до директории, в которой будет располагаться предполагаемый файл.
По окончании своей работы в случае неуспешного завершения функция NtfsCommonCreate закроет последнюю найденную директорию посредством функции NtfsTeardownStructures. Также эта функция освободит ERESOURCE директории/файла, если это возможно. Т.е. если эта директория/файл не являются открытыми. Т.к. эта директория/файл были открыты файловой системой только что, вероятнее всего, что их ERESOURCE будет освобожден, а FCB файла будет закрыт.
Суть проблемы
Когда будет произведена попытка открыть файл относительно файла $mft, функция NtfsFindStartingNode не найдет его, т.к. эта функция выполняет поиск несколько иначе, в отличие от функции NtfsOpenSubdirectory, которая находит этот файл всегда. Следовательно, начнет работу цикл, начиная с корня файловой системы. Далее функция NtfsOpenSubdirectory откроет этот файл и захватит его ERESOURCE монопольно. На следующей итерации цикл обнаружит, что файл не является директорией, и, следовательно, прервет свою работу с ошибкой. А при завершении своей работы функция NtfsCommonCreate посредством функции NtfsTeardownStructures попытается закрыть его. Функция NtfsTeardownStructures, в свою очередь, столкнется с тем, что она не сможет закрыть файл, т.к. он открывается самой файловой системой при монтировании. При этом, вопреки ожиданиям функции NtfsCommonCreate, функция NtfsTeardownStructures не освободит ERESOURCE $mft файла. Таким образом, он останется захваченным навсегда. Поэтому, например, при попытке создания файла или чтения файлов тома, файловая система NTFS попытается захватить ERESOURCE $mft файла и зависнет на этом этапе навсегда.
В Windows файловая система NTFS отвечает за управление файлами, папками и дисковым пространством. Очевидно, что существует не только файловая система NTFS, но именно New Technology File System, уже не являющаяся такой «новой», так как была задумана Microsoft ещё в 1993 году, – до сих пор является наиболее широко используемой в среде Windows. Её преемником считается ReFS, но NTFS продолжает оставаться предпочтительным выбором в большинстве случаев.
Многие говорят о файловых системах, которые в будущем могли бы занять их место, но до сих пор многие не знают о продвинутой (и скрытой) функциональности NTFS. Фактически файловая система NTFS позволяет сохранять и восстанавливать «скрытые данные» (называемые альтернативным потоком данных), при необходимости экономить место на диске, сохранять файл таким образом, чтобы он находился в нескольких папках и многое другое.
Альтернативный поток данных (ADS)
ADS – это дополнительная скрытая информация, которая может быть указана в качестве дополнительного атрибута любого файла. ADS имеют не очень обнадеживающую репутацию, поскольку часто связаны с активностью некоторых вредоносных программ. В прошлом некоторые вредоносные компоненты использовали ADS для сокрытия информации, необходимой для их работы.
Тем не менее, основные решения для защиты от вредоносных программ стали намного умнее и способны выполнять полное сканирование системы, также проверяя содержимое любой ADS. В действительности, ADS используется в абсолютно законных целях: браузер и операционная система, например, отмечают происхождение файлов, чтобы предупредить пользователя, когда их открытие может скрывать ловушку.
Откройте командную строку с правами администратора и введите dir /r , чтобы получить список ADS, используемых в текущей папке.
Например, мы предлагаем вам перейти в папку «Загрузки Windows», затем, удерживая клавишу Shift , щелкнуть правой кнопкой мыши свободную область и выбрать Открыть окно PowerShell.
Попробуйте ввести cmd , а затем dir /r . Вы найдете несколько файлов с суффиксом :Zone.Identifier:$DATA. Это просто файлы с ADS. Например, при вводе more <filename.zip:Zone.Identifier будет прочитано содержимое ADS для указанного файла.
Как вы можете видеть, ADS не только указывает, что файл был загружен из Интернета (ID 3 относится именно к Интернету), но также включает URL-адрес и полный адрес, с которого файл был загружен.
Чтение содержимого ADS также можно выполнить с помощью PowerShell с помощью команды Get-Content namefile.zip -Stream Zone.Identifier.
С Remove-Item вы можете удалить ADS. Удалять их вслепую – не очень хорошая идея: просто подумайте, что клиент Dropbox хранит, используя ADS, информацию о файлах, синхронизированных с его облачными серверами.
Сжатие файлов с NTFS
Чтобы сэкономить место на любом диске, файловая система NTFS может сжимать файлы.
Это полностью прозрачно для приложений: операционная система обеспечивает сжатие данных по мере необходимости и автоматически восстанавливает при использовании приложениями. Приложения ничего не замечают, но время ожидания может увеличиться: действия по сжатию и распаковке данных расходуют ресурсы процессора.
Сколько места можно сэкономить, зависит от типа данных: в простых текстовых файлах явно достаточно места для маневра, но со сжатыми архивами (например, .zip, .7z или .rar) или с изображениями JPEG вы не получите преимуществ, наоборот, операция может быть контрпродуктивной.
Однако, в файловой системе NTFS пользователь может щелкнуть правой кнопкой мыши папку, содержащую данные, затем нажать Дополнительно и установить флажок Сжать содержимое, чтобы сэкономить место на диске .
Из командной строки вы можете использовать команду compact для запроса сжатия содержимого папки. Введите compact /? чтобы получить полный список используемых ключей.
Жесткие ссылки и символические ссылки
Один и тот же файл может быть доступен на диске NTFS с несколькими именами и даже в нескольких папках, не занимая дополнительного места.
Жесткие ссылки доступны только для файлов (не для папок) и всегда должны ссылаться на файлы одного и того же тома. Механизм прост и включает создание новой записи уровня файловой системы для файла, который уже существует. Кроме того, могут быть использованы следующие команды для создания жесткой ссылки. Первые две работают из обычной командной строки Windows, последняя – из PowerShell:
mklink /h hardlink.exe filesist.exe fsutil hardlink create hardlink.exe filesist.exe New-Item -ItemType HardLink -Name hardlink.exe -Value filesist.exe
В примере мы ссылались на гипотетический файл с расширением .exe, но, очевидно, можно ссылаться на любой тип файла; более того, filesist.exe – это имя файла, который уже существует (с относительным путём), а hardlink.exe – это имя ссылки, которая ссылается на этот файл.
Наконец, следует отметить, что жесткие ссылки работают хорошо только для файлов, которые никогда не изменяются: если приложение вмешивается в файл, например, удаляя его и затем воссоздая его, «трюк» больше не будет работать.
Мягкие или символические ссылки являются ещё одним инструментом, который иногда может быть очень полезен в системах Windows. Символические ссылки могут относиться как к файлам, так и к папкам. Кроме того, в отличие от жестких ссылок, пункт назначения, на который она ссылается, не обязательно должен находиться на том же диске, на котором создана ссылка. Кроме того, вы можете ссылаться на ресурсы, хранящиеся на диске, подключенном к локальной сети.
Символьные ссылки могут быть созданы с помощью следующих команд:
mklink softlink.exe filesist.exe (ссылка на файл) mklink /d softlink foldersis (ссылка на папку) New-Item -ItemType SymbolicLink -Name softlink -Value resurs (в случае PowerShell)
Управление квотами
Ещё одна малоизвестная особенность NTFS – это возможность управлять квотами или определять максимальное пространство, которое могут использовать различные учетные записи пользователей, настроенные на машине Windows.
Для этого просто нажмите комбинацию клавиш Win + E , щелкните правой кнопкой мыши диск и выберите Свойства. Перейдите на вкладку Квота и нажмите кнопку Показать параметры квоты , чтобы определить пространство, которое каждый пользователь сможет использовать.
Используя соответствующие галочки, вы также можете попросить Windows записывать в журнал события каждый раз, когда пользователь приближается к определенной квоте или когда выделяемое пространство заканчивается.
Форматирование флешки или системного накопителя — стандартная задача компьютерного пользователя. В современных операционных системах процесс сильно упрощен, поэтому справится даже новичок. Система самостоятельно определяет, какие настройки подходят определенному устройству и какую файловую систему выбрать при форматировании. Так, Windows форматирует системные накопители в NTFS, а флешки превращает в FAT32. Почему так происходит? Чем отличаются эти файловые системы и вообще, зачем диску нужен «формат»?
Если говорить простым языком, то компьютерный накопитель — это подобие библиотеки, в которой хранятся тысячи книг. Библиотека может быть устроена в виде небольшого стеллажа или многоэтажной полки с лестницей, а также в виде кластеров — огромных помещений с десятками шкафов и сотнями полок. Чтобы найти в таком масштабе интересующую книгу, необходимо ориентироваться по условным опознавательным знакам, буквам или цифрам.
Например, мы посетили библиотеку в поисках произведения «Таинственный остров». По просьбе читателя библиотекарь обращается к каталогу, ищет отдел, в котором хранятся книги с названиями, начинающимися на букву «Т», затем находит шкаф, полку и место, где хранится интересующее читателя издание. Пользуясь такой системой, библиотекарь найдет книгу за считанные секунды, гораздо дольше ему придется доставать и нести ее читателю через весь зал. Аналогично работает и файловая система в накопителе.
Теперь представим, что из библиотеки вывезли все шкафы и полки, а книги теперь лежат на столах, стульях, полу и подоконниках. Произведение Жюля Верна будет практически невозможно найти среди тысяч печатных экземпляров: оно может находиться в любом месте, так как книги разбросаны в неизвестном порядке. При этом, несмотря на беспорядок, библиотека все-таки выполняет свою основную задачу — она хранит книги. Но практической пользы от этого мало: в системе хранения нарушены структура и каталогизация. То же самое происходит, если накопитель лишен какой-либо файловой системы.
Что такое файловая система
Итак, файловая система компьютерного накопителя — это способ организации и хранения файлов на винчестерах, флешках или даже в облаке. И, если диск — это массив кластеров, то файловая система — это инструкция по заполнению этих кластеров информацией.
Например, записывая фотографию на обычный винчестер, компьютер разбивает файл на части. Каждому кусочку файла соответствует ячейка на поверхности магнитной пластины диска. При этом, если любая программа обратится к нужному файлу, то ни она, ни диск не будут знать, что это за файл, где он расположен, как он называется, сколько весит и какие ячейки занимает в накопителе. Единственное, что известно программе — это имя файла, его размер и другие атрибуты, которые она передает файловой системе как условный знак для поиска этого файла в ячейках.
Чтобы понять, кто за что отвечает и кем является, рассмотрим структуру на книгах и библиотеках. Так, в цепочке «пользователь-файл» есть несколько действующих лиц, без которых работа системы невозможна:
- Накопитель — это библиотека (как здание или организация).
- Пользователь — это читатель, который пришел в библиотеку за произведением Жюля Верна.
- Файл — это книга с понятным названием (атрибутом) или другим условным опознавательным знаком, например, упомянутый выше «Таинственный остров».
- Драйвер файловой системы — это библиотекарь, который выступает в роли посредника или проводника между читателем и книгой. Или между пользователем (компьютером, операционной системой) и файлом (ячейками с информацией в микросхемах памяти или на магнитных пластинах).
- Файловая система — порядок, в соответствии с которым в библиотеке расставлены книги, а также каталог, с помощью которого специалист находит книги. Системы бывают разные: книги можно расставить по росту, цвету обложки, жанру, году выпуска или названию в алфавитном порядке. На диске файловая система отвечает за организацию файлов.
Дисковая система — это тоже библиотека. Вместо больших помещений здесь используются компактные корпуса накопителей, а в качестве полок с книгами выступают микросхемы памяти в твердотельных накопителях или магнитные пластины классических винчестеров. Система каталогизации библиотеки — это файловая система компьютера. Как и способы сортировки книг в библиотеке, компьютерные файловые системы делятся на несколько типов. Самые распространенные среди компьютеров на ОС Windows — это NTFS и FAT32.
NTFS — New Technology File System
Мы разобрались, что такое файловая система и для чего она нужна компьютерным дискам. Основываясь на полученных примерах, можно легко разобраться в том, как работают разные файловые системы, и чем они отличаются. Например, NTFS.
NTFS — фирменная файловая система Microsoft, которую разработчики начали внедрять в операционную систему Windows, начиная с версии NT 3.1. Несмотря на байки о ненадежности и низкой отказоустойчивости этой системы, NTFS считается самым лучшим и удачным решением для работы актуальных операционных систем Windows. Конечно, как и любая другая система, NTFS не лишена недостатков — это слишком сложное устройство ФС, особенно по современным меркам. Ведь известно — чем сложнее устройство, тем больше в нем уязвимостей.
Структура и фрагментация
Файловая система NTFS делит пространство накопителя на кластеры — блоки, размером от 512 байт до 64 КБ. По умолчанию Windows делит блоки по 4 КБ каждый.
Способ организации файлового пространства на диске с NTFS подразумевает наличие специального раздела, в котором ФС хранит сервисные данные о своей работе. А именно, ведет некий каталог, в котором записываются различные данные о файлах и разделах. Это раздел MFT (Master File Table) — свободное пространство с метафайлом, под который система выделяет 12% от общего объема.
MFT является динамическим разделом — по мере накопления информации на диске, он может сокращаться, чтобы освободить место под пользовательские файлы. Однако при первом же свободном гигабайте на диске, раздел MFT снова заберет свое «законное» место, при этом новая часть метафайла может фрагментироваться и оказаться уже не в начале диска, а в конце или в середине. Отсюда существует распространенная проблема фрагментации файловой системы, когда части каталогов разбросаны по всему диску. Тогда, чтобы найти какой-либо файл, диск судорожно ищет их по всей поверхности, отсюда снижение скорости доступа и общей производительности компьютера. Фрагментация — не самая сильная сторона NTFS.
Файлы и каталоги
Организация данных в этой ФС имеет структуру бинарного дерева: каждый элемент в системе обрабатывается не иерархически, а через бинарные запросы. Например, чтобы найти файл с именем «К» среди тысячи других файлов, система делит каталог на две части и начинает поиск с середины. Например, узнает, в какой части необходимо искать данный файл, если за середину каталога принят файл с названием «Т»? В таком случае система ответит — ищите среди тех файлов, которые идут до файла с именем «Т». То есть, имея отсортированный по алфавиту каталог, система понимает, что файл с необходимым именем находится в одной из двух частей, и время на поиск файла сокращается в два раза — это улучшает скорость работы с мелкими одиночными файлами.
Все файлы в этой системе существуют в виде потоков. Фактически, для того, чтобы превратить блоки с данными в единый файл, этой ФС необходим только файл с метаданными. Это своего рода инструкция по сборке файлов из кусочков данных, которые хранятся в ячейках по всей поверхности накопителя. Благодаря гибкой файловой структуре, объекты NTFS могут принимать множество дополнительных свойств. Например, содержать в названии до 65535 различных символов Unicode. При этом максимальная длина имени файла достигает 255 символов.
Журналирование
Современные операционные системы работают на базе журналируемых файловых систем. Это необходимо для того, чтобы в случае системного сбоя и аварийного завершения работы (вынули вилку питания ПК из розетки) файловая система компьютера смогла восстановиться до последнего рабочего состояния без потери файлов.
В журналируемой файловой системе работа с данными происходит по принципу транзакций — действие совершается полностью или не совершается совсем. Например, при записи системного файла на диск, компьютер делает пометки в метафайл в разделе MTF и ведет мини-журнал процесса копирования до тех пор, пока файл полностью не запишется в необходимый раздел диска. Если устройство перезагрузится во время записи, то при следующем включении система обратится к журналу, узнает о совершенных и несовершенных транзакциях и оставит существовать только те, которые помечены как завершенные. Остальные транзакции будет вычеркнуты, а файлы удалены или возвращены на место.
Как правило, такая система работает наиболее эффективно только с системными файлами, тогда как пользовательские данные могут повредиться или исчезнуть при сбое. Работу журналирования можно проверить с помощью контрольных точек восстановления — компьютер периодически создает слепки состояния системы, по которым позже может восстановиться до этих состояний.
Шифрование
Для защиты данных на компьютере используется шифрование. Это не просто защита компьютера паролем, а также раздача прав для доступа к файлам, что довольно легко вскрыть, взломать и просто обойти с помощью общедоступных инструкций и софта.
Шифрование — это отдельная надстройка над файловой системой компьютера, которая позволяет закрыть пользовательские данные от посторонних глаз практически на аппаратном уровне. В таком случае защищенные файлы нельзя будет просмотреть на другом компьютере, а также после смены материнской платы или операционной системы. Это можно сделать с помощью NTFS — система создает ключи и сертификаты, актуальные только для той сборки и системы, на которой было подключено это шифрование.
Файловая система NTFS также отличается:
- Поддержкой больших томов и файлов — до 8 ПБ;
- Несколькими уровнями безопасности, в том числе, поддержкой шифрования;
- Распределением прав доступа к файлам;
- Возможностью сжатия;
- Поддержкой до 4 294 967 295 (232−1) файлов.
Вывод: система NTFS «заточена» под работу с операционной системой, а также для накопителей с большим объемом и несколькими разделами.
FAT32 — File Allocation Table
Обновленная файловая система пришла на смену устаревшей FAT16. Ее также разработали специалисты Microsoft, но, в отличие от NTFS, она распространяется в виде открытого исходного кода. Поэтому разработчики любого софта могут беспрепятственно компилировать и внедрять драйвер в свое ПО. Например, поддержка FAT32 есть не только в «родной» операционной системе, но и в любой другой — linux, MacOS, Android, даже в таких проприетарных системах, как iOS.
В ранних версиях ОС Windows файловая система FAT32 даже использовалась в качестве основной ФС для системного раздела. Но позже разработчики отказались от этого решения в пользу новой и прогрессивной NTFS. Впрочем, несмотря на некоторые особенности FAT32, эта ФС все еще повсеместно используется во флешках и картах памяти.
Проще некуда
Файловая система FAT32 — это автомат Калашникова. Она максимально упрощена:.Здесь нет продвинутых систем безопасности и шифрования, система не умеет журналировать свою работу. Это частично сказывается на производительности — в некоторых случаях скорость чтения или записи может быть выше, чем у более новой и сложной NTFS. Правда, это сильно зависит от условий работы — например, от количества обрабатываемых файлов. Так, работа с массивами мелких файлов может стать настоящим испытанием для накопителя, отформатированного в этой файловой системе.
Впрочем, такие задания редко выполняют на тех накопителях, которые используют FAT32. Обычно это внешние устройства с небольшим объемом. Более того, файловая система не умеет работать с объемными разделами. Например, штатные средства ОС Windows не позволяют создавать на диске с FAT32 разделы, объем которых превышает 32 ГБ. К этим недостаткам относятся и ограничения по максимальному размеру файла. Максимальный размер файла, который запоминает накопитель, составляет 4 ГБ.
Все это, конечно же, влияет на популярность файловой системы и ее удобство. Особенно заметны недостатки устаревшей системы стали после того, как почти у каждого пользователя в арсенале появились флешки с объемом от 64 ГБ — FAT32 такому устройству не к лицу.
Структура
Еще больше красок в устаревание вносит древняя структура: файлы в FAT32 хранятся иерархически, а не в виде бинарного дерева, где каждый отдельный объект может быть доступен независимо от остальных. Если бы такая система использовалась в обычной библиотеке, то поиск одной книги мог бы растянуться на несколько часов: чтобы найти книгу с буквой «Ц» в названии, библиотекарю придется достать все книги с полочек по очереди, начиная с экземпляров на «А», и только после этого взять нужную. Любопытно представить, как бы работала в таком режиме Научная библиотека МГУ, где на физических и виртуальных полках хранится более 10 миллионов экземпляров.
Несмотря на перечисленные особенности, FAT32 все еще неплохо справляется со своими задачами. Например, отсутствие журналирования идет на пользу накопителям, которые быстро изнашиваются от частых перезаписей ячеек. К тому же, работа с объемными файлами и разделами на обычной флешке мало кого интересует. Как правило, они «переносят» легковесные офисные файлы, фотографии, короткие видеоматериалы и установочные файлы программ. Вряд ли кто-то попытается загружать образ фильма в формате Blu-ray на флешку: для этого больше подойдет внешний жесткий диск или твердотельный накопитель с большим объемом.
Вывод: появление флешек с большим объемом внесло коррективы в существование FAT32. Однако на рынке все еще преобладают устройства с объемом не более 32 ГБ — этот формат FAT32 еще тянет.
Практичность превыше всего
Большая и сложная NTFS была разработана еще в 1990-х годах. Несмотря на это, файловая система здравствует до сих пор и спокойно переваривает все современные ОС от Microsoft. Конечно, фирменная технология из Редмонда не панацея: если отказаться от «окон» на компьютере, то и NTFS сразу станет ненужной. Правда, для этого придется смириться с Linux на борту или же переехать на платформу Apple — там, между прочим, используется совсем новая APFS, которую яблочные разработчики представили всего несколько лет назад.
Что касается неоднозначной ситуации с FAT32, то, скорее всего, файловая система уже находится на закате популярности. Специалисты пытаются заменить неактуальную файловую систему более удобными и гибкими EXT. Эти системы имеют открытый исходный код и используются в Unix подобных ОС. Драйверы для этих файловых систем легко портируются под любые операционные системы, поэтому такой накопитель поддерживается даже в актуальной Windows 10, достаточно установить распространенный пакет драйверов.
Вывод: если выбирать файловую систему, то лучше ориентироваться на практичность. Для серьезных задач и под системные нужды обязательно выделять накопитель с NTFS на борту. В то же время, для флешки с маленьким объемом будет достаточно и FAT32 — эта ФС широко поддерживается всеми возможными устройствами. Если же пользователь ставит повышенные требования к системе хранения и обработке файлов — добро пожаловать в мир ZFS.
Это целая система внутри системы, где организация файлов в дисковом пространстве происходит по другим законам. Например, при записи информации, ZFS пишет новые данные в новые блоки, а старые оставляет «жить» до того момента, пока не подтвердит, что свежие данные записаны и готовы к работе. Это необходимо для платформ с уклоном в отказоустойчивость, хотя вряд ли пригодится домашнему юзеру. Чтобы файловая система работала как надо, необходимо иметь двойной запас свободного места на диске: для старых данных и следующего потока новых данных. Поэтому ZFS чаще используют в системах хранения данных с большим объемом. Но это уже совсем другая история.
Читайте также: