В вычислительной технике файловая система или файловая система (часто сокращенно FS или fs ) управляет организацией файлов и доступом к ним. Локальная файловая система — это возможность операционной системы , которая обслуживает приложения, работающие на одном компьютере . [1] [2] Распределенная файловая система — это протокол , который обеспечивает доступ к файлам между сетевыми компьютерами.
Файловая система предоставляет службу хранения данных , которая позволяет приложениям совместно использовать массовое хранилище . Без файловой системы приложения могли бы получать доступ к хранилищу несовместимыми способами, что приводило бы к конкуренции за ресурсы , повреждению данных и потере данных .
Существует множество проектов и реализаций файловых систем с различной структурой и функциями, а также различными вытекающими из этого характеристиками, такими как скорость, гибкость, безопасность, размер и т. д.
Файловые системы были разработаны для многих типов устройств хранения данных , включая жесткие диски (HDD), твердотельные накопители (SSD), магнитные ленты и оптические диски . [3]
Часть основной памяти компьютера может быть настроена как RAM-диск , который служит устройством хранения для файловой системы. Файловые системы, такие как tmpfs, могут хранить файлы в виртуальной памяти .
Виртуальная файловая система обеспечивает доступ к файлам, которые либо вычисляются по запросу, называются виртуальными файлами (см. procfs и sysfs ), либо отображаются в другом, резервном хранилище .
Начиная с 1900 года и до появления компьютеров термины файловая система , система хранения и система для хранения использовались для описания методов организации, хранения и поиска бумажных документов. [4] К 1961 году термин файловая система стал применяться к компьютеризированному хранению документов наряду с первоначальным значением. [5] К 1964 году он стал общеупотребительным. [6]
Архитектуру локальной файловой системы можно описать как слои абстракции, даже если конкретная конструкция файловой системы фактически не разделяет концепции. [7]
Уровень логической файловой системы обеспечивает относительно высокоуровневый доступ через интерфейс прикладного программирования (API) для операций с файлами, включая открытие, закрытие, чтение и запись, делегируя операции нижним уровням. Этот уровень управляет записями в таблице открытых файлов и дескрипторами файлов для каждого процесса. [8] Он обеспечивает доступ к файлам, операции с каталогами, безопасность и защиту. [7]
Виртуальная файловая система , дополнительный уровень, поддерживает несколько одновременных экземпляров физических файловых систем, каждый из которых называется реализацией файловой системы. [8]
Физический уровень файловой системы обеспечивает относительно низкоуровневый доступ к устройству хранения (например, диску). Он считывает и записывает блоки данных , обеспечивает буферизацию и другое управление памятью , а также контролирует размещение блоков в определенных местах на носителе данных. Этот уровень использует драйверы устройств или канал ввода-вывода для управления устройством хранения. [7]
Имя файла или filename идентифицирует файл для приложений-потребителей, а в некоторых случаях и для пользователей.
Имя файла уникально, поэтому приложение может ссылаться только на один файл для определенного имени. Если файловая система поддерживает каталоги, то, как правило, уникальность имени файла обеспечивается в контексте каждого каталога. Другими словами, хранилище может содержать несколько файлов с одинаковым именем, но не в одном каталоге.
Большинство файловых систем ограничивают длину имени файла.
Некоторые файловые системы сопоставляют имена файлов с учетом регистра , а другие — без учета регистра. Например, имена MYFILE
и myfile
соответствуют одному и тому же файлу для учета регистра, но разным файлам для учета регистра.
Большинство современных файловых систем позволяют имени файла содержать широкий диапазон символов из набора символов Unicode . Некоторые ограничивают символы, например, те, которые используются для обозначения специальных атрибутов, таких как устройство, тип устройства, префикс каталога, разделитель пути файла или тип файла.
Файловые системы обычно поддерживают организацию файлов в каталоги , также называемые папками , которые разделяют файлы на группы.
Это можно реализовать, связав имя файла с индексом в таблице содержания или с инодом в файловой системе типа Unix .
Структуры каталогов могут быть плоскими (т. е. линейными) или допускать иерархии, позволяя каталогу содержать каталоги, называемые подкаталогами.
Первая файловая система, поддерживающая произвольные иерархии каталогов, использовалась в операционной системе Multics . [9] Собственные файловые системы Unix-подобных систем также поддерживают произвольные иерархии каталогов, как и иерархическая файловая система Apple и ее преемница HFS+ в классической Mac OS , файловая система FAT в MS-DOS 2.0 и более поздних версиях MS-DOS и в Microsoft Windows , файловая система NTFS в семействе операционных систем Windows NT , а также ODS-2 (On-Disk Structure-2) и более высокие уровни файловой системы Files-11 в OpenVMS .
Помимо данных и содержимого файла, файловая система также управляет связанными метаданными , которые могут включать, помимо прочего:
Файловая система хранит связанные метаданные отдельно от содержимого файла.
Большинство файловых систем хранят имена всех файлов в одном каталоге в одном месте — таблице каталогов для этого каталога — которая часто хранится как любой другой файл. Многие файловые системы помещают только часть метаданных для файла в таблицу каталогов, а остальные метаданные для этого файла в совершенно отдельную структуру, такую как inode .
Большинство файловых систем также хранят метаданные, не связанные ни с одним конкретным файлом. Такие метаданные включают информацию о неиспользуемых регионах — битовую карту свободного пространства , карту доступности блоков — и информацию о плохих секторах . Часто такая информация о группе распределения хранится внутри самой группы распределения.
Дополнительные атрибуты могут быть связаны с файловыми системами, такими как NTFS , XFS , ext2 , ext3 , некоторые версии UFS и HFS+ , используя расширенные атрибуты файла . Некоторые файловые системы предоставляют определяемые пользователем атрибуты, такие как автор документа, кодировка символов документа или размер изображения.
Некоторые файловые системы позволяют связать различные коллекции данных с одним именем файла. Эти отдельные коллекции могут называться потоками или ветвями . Apple давно использует разветвленную файловую систему на Macintosh, а Microsoft поддерживает потоки в NTFS. Некоторые файловые системы сохраняют несколько прошлых версий файла под одним именем файла; имя файла само по себе извлекает самую последнюю версию, в то время как доступ к предыдущей сохраненной версии можно получить с помощью специального соглашения об именовании, например, «имя_файла;4» или «имя_файла(-4)», чтобы получить доступ к версии, сохраненной четыре раза назад.
Подробную информацию о том, какие файловые системы поддерживают те или иные виды метаданных, см. в разделе Сравнение файловых систем#Метаданные .
Локальная файловая система отслеживает, какие области хранения принадлежат какому файлу, а какие не используются.
Когда файловая система создает файл, она выделяет место для данных. Некоторые файловые системы разрешают или требуют указания начального выделения места и последующих инкрементных выделений по мере роста файла.
Чтобы удалить файл, файловая система фиксирует, что пространство файла свободно и может быть использовано для другого файла.
Локальная файловая система управляет пространством хранения, чтобы обеспечить уровень надежности и эффективности. Как правило, она распределяет пространство устройства хранения гранулярным образом, обычно несколькими физическими единицами (т. е. байтами ). Например, в Apple DOS начала 1980-х годов 256-байтовые сектора на 140-килобайтной дискете использовали карту дорожек/секторов . [ требуется цитата ]
Гранулярная природа приводит к неиспользуемому пространству, иногда называемому резервным пространством , для каждого файла, за исключением тех, которые имеют редкий размер, кратный гранулярному распределению. [10] Для распределения в 512 байт среднее неиспользуемое пространство составляет 256 байт. Для кластеров по 64 КБ среднее неиспользуемое пространство составляет 32 КБ.
Обычно размер единицы выделения задается при настройке хранилища. Выбор относительно небольшого размера по сравнению с хранимыми файлами приводит к чрезмерным накладным расходам на доступ. Выбор относительно большого размера приводит к избыточному неиспользуемому пространству. Выбор размера выделения на основе среднего размера файлов, которые, как ожидается, будут находиться в хранилище, имеет тенденцию минимизировать неиспользуемое пространство.
Поскольку файловая система создает, изменяет и удаляет файлы, базовое представление хранилища может стать фрагментированным . Файлы и неиспользуемое пространство между файлами будут занимать блоки распределения, которые не являются смежными.
Файл становится фрагментированным, если пространство, необходимое для хранения его содержимого, не может быть выделено в виде смежных блоков. Свободное пространство становится фрагментированным, когда файлы удаляются. [11]
Это незаметно для конечного пользователя, и система по-прежнему работает правильно. Однако это может ухудшить производительность некоторых устройств хранения, которые лучше работают с непрерывными блоками, такими как жесткие диски . Другое оборудование, такое как твердотельные накопители, не подвержено фрагментации.
Файловая система часто поддерживает контроль доступа к данным, которыми она управляет.
Целью контроля доступа часто является запретить определенным пользователям читать или изменять определенные файлы.
Контроль доступа также может ограничивать доступ программой, чтобы гарантировать, что данные изменяются контролируемым образом. Примерами служат пароли, хранящиеся в метаданных файла или в другом месте, и разрешения файлов в форме битов разрешений, списков контроля доступа или возможностей . Необходимость утилит файловой системы иметь возможность доступа к данным на уровне носителя для реорганизации структур и обеспечения эффективного резервного копирования обычно означает, что они эффективны только для вежливых пользователей, но не эффективны против злоумышленников.
Методы шифрования данных файлов иногда включаются в файловую систему. Это очень эффективно, поскольку нет необходимости для утилит файловой системы знать начальное число шифрования для эффективного управления данными. Риски, связанные с использованием шифрования, включают тот факт, что злоумышленник может скопировать данные и использовать грубую силу для их расшифровки. Кроме того, потеря начального числа означает потерю данных.
Некоторые операционные системы позволяют системному администратору включать дисковые квоты, чтобы ограничить использование пользователем дискового пространства.
Файловая система обычно обеспечивает согласованность хранимых данных как при обычных операциях, так и в исключительных ситуациях, таких как:
Восстановление после исключительных ситуаций может включать обновление метаданных, записей каталога и обработку данных, которые были буферизованы, но не записаны на носитель.
Файловая система может регистрировать события, позволяющие анализировать такие проблемы, как:
Многие файловые системы получают доступ к данным как к потоку байтов . Обычно для чтения данных файла программа предоставляет буфер памяти , а файловая система извлекает данные с носителя, а затем записывает их в буфер. Запись включает в себя предоставление программой буфера байтов, который файловая система считывает и затем сохраняет на носителе.
Некоторые файловые системы или слои поверх файловой системы позволяют программе определять запись , чтобы программа могла считывать и записывать данные как структуру, а не как неорганизованную последовательность байтов.
Если используется определение записи фиксированной длины , то поиск n -й записи можно рассчитать математически, что относительно быстро по сравнению с анализом данных на предмет разделителей записей.
Идентификация для каждой записи, также известная как ключ, позволяет программе читать, записывать и обновлять записи независимо от их местоположения в хранилище. Такое хранилище требует управления блоками носителей, обычно разделяя ключевые блоки и блоки данных. Эффективные алгоритмы могут быть разработаны с пирамидальными структурами для поиска записей. [12]
Обычно пользователь может управлять файловой системой с помощью различных служебных программ.
Некоторые утилиты позволяют пользователю создавать, настраивать и удалять экземпляр файловой системы. Это может позволить расширить или усечь пространство, выделенное файловой системе.
Утилиты каталогов могут использоваться для создания, переименования и удаления записей каталогов , которые также известны как dentries (единственное число: dentry ), [13] и для изменения метаданных, связанных с каталогом. Утилиты каталогов могут также включать возможности создания дополнительных ссылок на каталог ( жесткие ссылки в Unix ), переименования родительских ссылок (".." в операционных системах типа Unix ), [ необходимо разъяснение ] и создания двунаправленных ссылок на файлы.
Файловые утилиты создают, перечисляют, копируют, перемещают и удаляют файлы, а также изменяют метаданные. Они могут быть способны обрезать данные, обрезать или расширять выделенное пространство, добавлять, перемещать и изменять файлы на месте. В зависимости от базовой структуры файловой системы они могут предоставлять механизм для добавления или обрезания с начала файла, вставки записей в середину файла или удаления записей из файла. Утилиты для освобождения места для удаленных файлов, если файловая система предоставляет функцию восстановления, также относятся к этой категории.
Некоторые файловые системы откладывают такие операции, как реорганизация свободного пространства, безопасное стирание свободного пространства и перестроение иерархических структур, предоставляя утилиты для выполнения этих функций в моменты минимальной активности. Примером могут служить утилиты дефрагментации файловой системы .
Некоторые из наиболее важных функций утилит файловой системы — это контрольные действия, которые могут включать обход владения или прямой доступ к базовому устройству. Они включают высокопроизводительное резервное копирование и восстановление, репликацию данных и реорганизацию различных структур данных и таблиц распределения в файловой системе.
Утилиты, библиотеки и программы используют API файловой системы для выполнения запросов к файловой системе. К ним относятся передача данных, позиционирование, обновление метаданных, управление каталогами, управление спецификациями доступа и удаление.
Зачастую розничные системы конфигурируются с одной файловой системой, занимающей все устройство хранения данных .
Другой подход заключается в разбиении диска на разделы , чтобы можно было использовать несколько файловых систем с разными атрибутами. Одна файловая система, для использования в качестве кэша браузера или хранилища электронной почты, может быть настроена с небольшим размером выделения. Это сохраняет активность создания и удаления файлов, типичную для активности браузера, в узкой области диска, где она не будет мешать другим выделениям файлов. Другой раздел может быть создан для хранения аудио- или видеофайлов с относительно большим размером блока. Еще один может быть обычно установлен только для чтения и только периодически может быть установлен для записи. Некоторые файловые системы, такие как ZFS и APFS , поддерживают несколько файловых систем, совместно использующих общий пул свободных блоков, поддерживая несколько файловых систем с разными атрибутами без необходимости резервировать фиксированный объем пространства для каждой файловой системы. [14] [15]
Третий подход, который в основном используется в облачных системах, заключается в использовании « образов дисков » для размещения дополнительных файловых систем, с теми же атрибутами или нет, в другой (хостовой) файловой системе в качестве файла. Распространенным примером является виртуализация: один пользователь может запустить экспериментальный дистрибутив Linux (используя файловую систему ext4 ) на виртуальной машине в своей производственной среде Windows (используя NTFS ). Файловая система ext4 находится в образе диска, который рассматривается как файл (или несколько файлов, в зависимости от гипервизора и настроек) в хостовой файловой системе NTFS.
Наличие нескольких файловых систем в одной системе имеет дополнительное преимущество, заключающееся в том, что в случае повреждения одной файловой системы оставшиеся файловые системы часто остаются нетронутыми. Это включает в себя уничтожение вирусом системной файловой системы или даже невозможность загрузки системы. Утилиты файловой системы, требующие выделенного доступа, могут эффективно выполняться по частям. Кроме того, дефрагментация может быть более эффективной. Несколько утилит обслуживания системы, таких как сканирование на вирусы и резервное копирование, также могут обрабатываться по сегментам. Например, нет необходимости делать резервную копию файловой системы, содержащей видео, вместе со всеми другими файлами, если с момента последнего резервного копирования ничего не было добавлено. Что касается файлов изображений, можно легко «отщепить» дифференциальные образы, которые содержат только «новые» данные, записанные в главный (исходный) образ. Дифференциальные образы можно использовать как из соображений безопасности (в качестве «одноразовой» системы — ее можно быстро восстановить в случае уничтожения или заражения вирусом, поскольку старый образ можно удалить, а новый создать за считанные секунды, даже без автоматизированных процедур), так и для быстрого развертывания виртуальной машины (поскольку дифференциальные образы можно быстро создавать с помощью скрипта в пакетном режиме).
Файловая система на диске использует преимущества способности дисковых носителей случайным образом обращаться к данным за короткий промежуток времени. Дополнительные соображения включают скорость доступа к данным, следующим за первоначально запрошенными, и ожидание того, что следующие данные также могут быть запрошены. Это позволяет нескольким пользователям (или процессам) получать доступ к различным данным на диске независимо от последовательного расположения данных. Примерами являются FAT ( FAT12 , FAT16 , FAT32 ), exFAT , NTFS , ReFS , HFS и HFS+ , HPFS , APFS , UFS , ext2 , ext3 , ext4 , XFS , btrfs , Files -11 , Veritas File System , VMFS , ZFS , ReiserFS , NSS и ScoutFS. Некоторые файловые системы на диске являются журналируемыми файловыми системами или файловыми системами с управлением версиями .
ISO 9660 и Universal Disk Format (UDF) — два распространенных формата, предназначенных для компакт-дисков , DVD и дисков Blu-ray . Mount Rainier — это расширение UDF, поддерживаемое начиная с версии ядра Linux 2.6 и начиная с Windows Vista, которое упрощает перезапись на DVD.
Файловая система флэш-памяти учитывает особые возможности, производительность и ограничения устройств флэш-памяти . Часто файловая система диска может использовать устройство флэш-памяти в качестве базового носителя данных, но гораздо лучше использовать файловую систему, специально разработанную для устройства флэш-памяти. [16]
Ленточная файловая система — это файловая система и формат ленты, предназначенные для хранения файлов на ленте. Магнитные ленты — это последовательные носители данных со значительно более длительным временем доступа к случайным данным, чем у дисков, что создает проблемы для создания и эффективного управления файловой системой общего назначения.
В файловой системе диска обычно есть главный каталог файлов и карта используемых и свободных областей данных. Любые добавления, изменения или удаления файлов требуют обновления каталога и карт используемых/свободных областей. Произвольный доступ к областям данных измеряется в миллисекундах, поэтому эта система хорошо подходит для дисков.
Лента требует линейного движения для намотки и размотки потенциально очень длинных катушек носителя. Это движение ленты может занять от нескольких секунд до нескольких минут, чтобы переместить головку чтения/записи с одного конца ленты на другой.
Следовательно, главный каталог файлов и карта использования могут быть чрезвычайно медленными и неэффективными с лентой. Запись обычно включает чтение карты использования блоков для поиска свободных блоков для записи, обновление карты использования и каталога для добавления данных, а затем продвижение ленты для записи данных в правильное место. Каждая дополнительная запись файла требует обновления карты и каталога и записи данных, что может занять несколько секунд для каждого файла.
Вместо этого ленточные файловые системы обычно позволяют распределять файловый каталог по ленте вперемешку с данными, что называется потоковой передачей , так что для записи новых данных не требуются длительные и повторяющиеся перемещения ленты.
Однако побочным эффектом этой конструкции является то, что чтение каталога файлов ленты обычно требует сканирования всей ленты для чтения всех разбросанных записей каталога. Большинство программ архивации данных, работающих с ленточным хранилищем, будут хранить локальную копию каталога ленты в файловой системе диска, так что добавление файлов на ленту может быть выполнено быстро без необходимости повторного сканирования ленточного носителя. Локальная копия каталога ленты обычно отбрасывается, если не используется в течение определенного периода времени, и в этот момент ленту необходимо повторно отсканировать, если она будет использоваться в будущем.
IBM разработала файловую систему для ленты под названием Linear Tape File System . Реализация этой файловой системы IBM была выпущена как продукт с открытым исходным кодом IBM Linear Tape File System — Single Drive Edition (LTFS-SDE) . Linear Tape File System использует отдельный раздел на ленте для записи метаданных индекса, тем самым избегая проблем, связанных с разбросом записей каталога по всей ленте.
Запись данных на ленту, стирание или форматирование ленты часто является значительно трудоемким процессом и может занять несколько часов на больших лентах. [a] Во многих технологиях лент данных нет необходимости форматировать ленту перед перезаписью новых данных на ленту. Это связано с изначально разрушительной природой перезаписи данных на последовательных носителях.
Из-за времени, которое может потребоваться для форматирования ленты, обычно ленты предварительно форматируются, чтобы пользователю ленты не приходилось тратить время на подготовку каждой новой ленты к использованию. Обычно все, что необходимо, — это записать идентификационную метку носителя на ленту перед использованием, и даже это может быть автоматически записано программным обеспечением, когда новая лента используется в первый раз.
Другая концепция управления файлами — это идея файловой системы на основе базы данных. Вместо или в дополнение к иерархическому структурированному управлению файлы идентифицируются по своим характеристикам, таким как тип файла, тема, автор или аналогичные богатые метаданные . [17]
IBM DB2 для i [18] (ранее известная как DB2/400 и DB2 для i5/OS) — это файловая система базы данных как часть объектно-ориентированной операционной системы IBM i [19] (ранее известная как OS/400 и i5/OS), включающая одноуровневое хранилище и работающая на IBM Power Systems (ранее известная как AS/400 и iSeries), разработанная Фрэнком Г. Солтисом, бывшим главным научным сотрудником IBM по IBM i. Примерно с 1978 по 1988 год Фрэнк Г. Солтис и его команда в IBM Rochester успешно разработали и применили такие технологии, как файловая система базы данных, чего позже не смогли сделать другие, например Microsoft. [20] Эти технологии неофициально известны как «Fortress Rochester» [ требуется ссылка ] и в нескольких основных аспектах были расширены из ранних технологий мэйнфреймов, но во многих отношениях были более продвинутыми с технологической точки зрения [ требуется ссылка ] .
Вот еще несколько проектов, которые не являются «чистыми» файловыми системами баз данных, но используют некоторые аспекты файловой системы баз данных:
Некоторые программы должны либо вносить несколько изменений в файловую систему, либо, если одно или несколько изменений не удается по какой-либо причине, не вносить никаких изменений. Например, программа, которая устанавливает или обновляет программное обеспечение, может записывать исполняемые файлы, библиотеки и/или файлы конфигурации. Если часть записи не удается и программное обеспечение остается частично установленным или обновленным, оно может быть сломано или непригодно для использования. Неполное обновление ключевой системной утилиты, такой как командная оболочка , может привести к тому, что вся система окажется в непригодном для использования состоянии.
Обработка транзакций вводит гарантию атомарности , гарантируя, что операции внутри транзакции либо все зафиксированы, либо транзакция может быть прервана, и система отбрасывает все ее частичные результаты. Это означает, что в случае сбоя или отключения питания после восстановления сохраненное состояние будет согласованным. Либо программное обеспечение будет полностью установлено, либо неудачная установка будет полностью откачена, но непригодная частичная установка не останется в системе. Транзакции также предоставляют гарантию изоляции [ необходимо разъяснение ] , что означает, что операции внутри транзакции скрыты от других потоков в системе до тех пор, пока транзакция не будет зафиксирована, и что мешающие операции в системе будут правильно сериализованы с транзакцией.
Windows, начиная с Vista, добавила поддержку транзакций в NTFS в функции, называемой Transactional NTFS , но ее использование в настоящее время не рекомендуется. [21] Существует ряд исследовательских прототипов транзакционных файловых систем для систем UNIX, включая файловую систему Valor, [22] Amino, [23] LFS, [24] и транзакционную файловую систему ext3 на ядре TxOS, [25] а также транзакционные файловые системы, ориентированные на встроенные системы, такие как TFFS. [26]
Обеспечение согласованности между несколькими операциями файловой системы затруднено, если не невозможно, без транзакций файловой системы. Блокировка файлов может использоваться как механизм управления параллелизмом для отдельных файлов, но обычно она не защищает структуру каталогов или метаданные файлов. Например, блокировка файлов не может предотвратить условия гонки TOCTTOU на символических ссылках. Блокировка файлов также не может автоматически откатить неудачную операцию, например обновление программного обеспечения; для этого требуется атомарность.
Журналирование файловых систем — один из методов, используемых для внедрения согласованности на уровне транзакций в структуры файловых систем. Транзакции журнала не предоставляются программам как часть API ОС; они используются только внутренне для обеспечения согласованности на уровне гранулярности одного системного вызова.
Системы резервного копирования данных обычно не поддерживают прямое резервное копирование данных, хранящихся транзакционным способом, что затрудняет восстановление надежных и согласованных наборов данных. Большинство программ резервного копирования просто отмечают, какие файлы изменились с определенного времени, независимо от транзакционного состояния, общего для нескольких файлов в общем наборе данных. В качестве обходного пути некоторые системы баз данных просто создают архивный файл состояния, содержащий все данные до этого момента, и программа резервного копирования только резервирует его и вообще не взаимодействует напрямую с активными транзакционными базами данных. Восстановление требует отдельного воссоздания базы данных из файла состояния после того, как файл был восстановлен программой резервного копирования.
Сетевая файловая система — это файловая система, которая действует как клиент для протокола удаленного доступа к файлам, предоставляя доступ к файлам на сервере. Программы, использующие локальные интерфейсы, могут прозрачно создавать, управлять и получать доступ к иерархическим каталогам и файлам на удаленных компьютерах, подключенных к сети. Примерами сетевых файловых систем являются клиенты для протоколов NFS , [27] AFS , SMB и клиенты, подобные файловым системам, для FTP и WebDAV .
Общая дисковая файловая система — это система, в которой несколько машин (обычно серверов) имеют доступ к одной и той же внешней дисковой подсистеме (обычно к сети хранения данных ). Файловая система распределяет доступ к этой подсистеме, предотвращая конфликты записи. [28] Примерами являются GFS2 от Red Hat , GPFS , теперь известная как Spectrum Scale, от IBM, SFS от DataPlow, CXFS от SGI , StorNext от Quantum Corporation и ScoutFS от Versity.
Некоторые файловые системы представляют элементы операционной системы как файлы, чтобы с ними можно было работать через API файловой системы . Это распространено в Unix-подобных операционных системах и в меньшей степени в других операционных системах. Вот несколько примеров:
В 1970-х годах дисковые и цифровые ленточные устройства были слишком дороги для некоторых ранних пользователей микрокомпьютеров . Была разработана недорогая базовая система хранения данных, которая использовала обычную аудиокассетную ленту.
Когда системе требовалось записать данные, пользователю предлагалось нажать «ЗАПИСЬ» на кассетном магнитофоне, а затем нажать «ВОЗВРАТ» на клавиатуре, чтобы уведомить систему о том, что кассетный магнитофон записывает. Система записывала звук для обеспечения синхронизации по времени, затем модулировала звуки , которые кодировали префикс, данные, контрольную сумму и суффикс. Когда системе требовалось считать данные, пользователю предлагалось нажать «ВОСПРОИЗВЕДЕНИЕ» на кассетном магнитофоне. Система прослушивала звуки на ленте, ожидая, пока всплеск звука не будет распознан как синхронизация. Затем система интерпретировала последующие звуки как данные. Когда считывание данных завершалось, система уведомляла пользователя о необходимости нажать «СТОП» на кассетном магнитофоне. Это было примитивно, но (в основном) работало. Данные хранились последовательно, обычно в безымянном формате, хотя некоторые системы (например, серия компьютеров Commodore PET ) позволяли именовать файлы. Несколько наборов данных можно было записать и найти, перемотав ленту вперед и наблюдая за счетчиком ленты, чтобы найти приблизительное начало следующего региона данных на ленте. Пользователю, возможно, придется прислушиваться к звукам, чтобы найти правильное место для начала воспроизведения следующего региона данных. Некоторые реализации даже включали слышимые звуки, перемежаемые данными.
В плоской файловой системе нет подкаталогов ; записи каталогов для всех файлов хранятся в одном каталоге.
Когда впервые появились дискеты , этот тип файловой системы был адекватен из-за относительно небольшого объема доступного пространства для данных. Машины CP/M имели плоскую файловую систему, в которой файлы могли быть назначены в одну из 16 пользовательских областей , а общие файловые операции были сужены для работы с одной, а не по умолчанию для работы со всеми из них. Эти пользовательские области были не более чем специальными атрибутами, связанными с файлами; то есть не было необходимости определять определенную квоту для каждой из этих областей, и файлы можно было добавлять в группы до тех пор, пока на диске оставалось свободное место. Ранние Apple Macintosh также имели плоскую файловую систему, Macintosh File System . Она была необычной в том, что программа управления файлами ( Macintosh Finder ) создавала иллюзию частично иерархической файловой системы поверх EMFS. Эта структура требовала, чтобы каждый файл имел уникальное имя, даже если он, казалось, находился в отдельной папке. IBM DOS/360 и OS/360 хранят записи для всех файлов на диске ( томе ) в каталоге на диске, который называется таблицей содержимого тома (VTOC).
Несмотря на простоту, плоские файловые системы становятся неудобными по мере роста числа файлов и затрудняют организацию данных в связанных группах файлов.
Недавнее дополнение к семейству плоских файловых систем — S3 от Amazon , удаленный сервис хранения, который намеренно упрощен, чтобы предоставить пользователям возможность настраивать способ хранения своих данных. Единственными конструкциями являются бакеты (представьте себе дисковод неограниченного размера) и объекты (похожие, но не идентичные стандартной концепции файла). Расширенное управление файлами допускается за счет возможности использовать практически любой символ (включая '/') в имени объекта и возможности выбирать подмножества содержимого бакета на основе идентичных префиксов.
Операционная система (ОС) обычно поддерживает одну или несколько файловых систем. Иногда ОС и ее файловая система настолько тесно переплетены, что их трудно описать независимо.
Обычно ОС предоставляет пользователю доступ к файловой системе. Часто ОС предоставляет интерфейс командной строки , такой как Unix shell , Windows Command Prompt и PowerShell , а также OpenVMS DCL . ОС часто также предоставляет графический пользовательский интерфейс файловых браузеров, таких как MacOS Finder и Windows File Explorer .
Unix-подобные операционные системы создают виртуальную файловую систему, которая заставляет все файлы на всех устройствах существовать в единой иерархии. Это означает, что в этих системах есть один корневой каталог , и каждый файл, существующий в системе, находится где-то под ним. Unix-подобные системы могут использовать RAM-диск или сетевой общий ресурс в качестве корневого каталога.
Unix-подобные системы назначают имя устройства каждому устройству, но это не то, как осуществляется доступ к файлам на этом устройстве. Вместо этого, чтобы получить доступ к файлам на другом устройстве, операционная система должна сначала быть проинформирована, где в дереве каталогов должны находиться эти файлы. Этот процесс называется монтированием файловой системы. Например, чтобы получить доступ к файлам на CD-ROM , нужно сказать операционной системе: «Возьми файловую систему с этого CD-ROM и размести ее в таком-то каталоге». Каталог, предоставленный операционной системе, называется точкой монтирования — например, это может быть /media . Каталог /media существует во многих системах Unix (как указано в Filesystem Hierarchy Standard ) и предназначен специально для использования в качестве точки монтирования для съемных носителей, таких как CD, DVD, USB-накопители или дискеты. Он может быть пустым или содержать подкаталоги для монтирования отдельных устройств. Как правило, только администратор (т. е. пользователь root ) может разрешить монтирование файловых систем.
Unix-подобные операционные системы часто включают программное обеспечение и инструменты, которые помогают в процессе монтирования и предоставляют ему новые функциональные возможности. Некоторые из этих стратегий были названы «автоматическим монтированием» как отражение их цели.
Linux поддерживает множество файловых систем, но распространенными вариантами для системного диска на блочном устройстве являются семейство ext* ( ext2 , ext3 и ext4 ), XFS , JFS и btrfs . Для сырой флэш-памяти без слоя трансляции флэш-памяти (FTL) или устройства технологии памяти (MTD) существуют UBIFS , JFFS2 и YAFFS , среди прочих. SquashFS — это распространенная сжатая файловая система только для чтения.
В более ранних версиях Solaris по умолчанию использовал (нежурналируемый или нелогирующий) UFS для загрузочных и дополнительных файловых систем. Solaris по умолчанию использовал, поддерживал и расширял UFS.
Со временем была добавлена поддержка других файловых систем и внесены значительные усовершенствования, включая Veritas Software Corp. (журналирование) VxFS , Sun Microsystems (кластеризация) QFS , Sun Microsystems (журналирование) UFS и Sun Microsystems (открытый исходный код, возможность объединения в пул, 128-битное сжатие и исправление ошибок) ZFS .
Расширения ядра были добавлены в Solaris для обеспечения возможности загрузочной операции Veritas VxFS . Ведение журнала или журналирование было добавлено в UFS в Solaris 7 от Sun. Выпуски Solaris 10 , Solaris Express, OpenSolaris и других вариантов операционной системы Solaris с открытым исходным кодом позже поддерживали загрузочную ZFS .
Управление логическими томами позволяет охватывать файловую систему на нескольких устройствах с целью добавления избыточности, емкости и/или пропускной способности. Устаревшие среды в Solaris могут использовать Solaris Volume Manager (ранее известный как Solstice DiskSuite ). Несколько операционных систем (включая Solaris) могут использовать Veritas Volume Manager . Современные операционные системы на базе Solaris затмевают необходимость управления томами за счет использования виртуальных пулов хранения в ZFS .
macOS (ранее Mac OS X) использует файловую систему Apple File System (APFS), которая в 2017 году заменила файловую систему, унаследованную от классической Mac OS, называемую HFS Plus (HFS+). Apple также использует термин «Mac OS Extended» для HFS+. [29] HFS Plus — это файловая система с большим количеством метаданных и сохранением регистра, но (обычно) без учета регистра . Из-за корней macOS в Unix в HFS Plus были добавлены разрешения Unix. Более поздние версии HFS Plus добавили журналирование для предотвращения повреждения структуры файловой системы и ввели ряд оптимизаций в алгоритмы распределения в попытке дефрагментировать файлы автоматически, не требуя внешнего дефрагментатора.
Имена файлов могут содержать до 255 символов. HFS Plus использует Unicode для хранения имен файлов. В macOS тип файла может быть получен из кода типа , хранящегося в метаданных файла, или из расширения имени файла .
HFS Plus имеет три вида ссылок: жесткие ссылки в стиле Unix , символические ссылки в стиле Unix и псевдонимы . Псевдонимы предназначены для сохранения ссылки на исходный файл, даже если они перемещены или переименованы; они интерпретируются не самой файловой системой, а кодом файлового менеджера в пользовательском пространстве .
macOS 10.13 High Sierra, анонсированная 5 июня 2017 года на мероприятии Apple WWDC, использует файловую систему Apple на твердотельных накопителях .
macOS также поддерживала файловую систему UFS , полученную из BSD Unix Fast File System через NeXTSTEP . Однако, начиная с Mac OS X Leopard , macOS больше не могла быть установлена на том UFS, а пред-Leopard-система, установленная на томе UFS, не могла быть обновлена до Leopard. [30] Начиная с Mac OS X Lion поддержка UFS была полностью прекращена.
Более новые версии macOS способны читать и записывать в устаревшие файловые системы FAT (16 и 32), распространенные в Windows. Они также способны читать новые файловые системы NTFS для Windows. Для записи в файловые системы NTFS в версиях macOS до Mac OS X Snow Leopard необходимо стороннее программное обеспечение. Mac OS X 10.6 (Snow Leopard) и более поздние версии позволяют записывать в файловые системы NTFS, но только после нетривиального изменения настроек системы (существует стороннее программное обеспечение, которое автоматизирует это). [31]
Наконец, macOS поддерживает чтение и запись файловой системы exFAT , начиная с Mac OS X Snow Leopard, начиная с версии 10.6.5. [32]
OS/2 1.2 представила высокопроизводительную файловую систему (HPFS). HPFS поддерживает смешанные имена файлов в разных кодовых страницах , длинные имена файлов (255 символов), более эффективное использование дискового пространства, архитектуру, которая хранит связанные элементы близко друг к другу на дисковом томе, меньшую фрагментацию данных, распределение пространства на основе экстентов , структуру дерева B+ для каталогов и корневой каталог, расположенный в средней точке диска, для более быстрого среднего доступа. Журналируемая файловая система (JFS) была поставлена в 1999 году.
PC-BSD — это настольная версия FreeBSD, которая унаследовала поддержку ZFS от FreeBSD , подобно FreeNAS . Новый графический установщик PC-BSD может обрабатывать / ( root ) на установках пулов ZFS и RAID-Z и шифрование дисков с помощью Geli с самого начала простым и удобным ( GUI ) способом. Текущая PC-BSD 9.0+ 'Isotope Edition' имеет файловую систему ZFS версии 5 и пул хранения ZFS версии 28.
Plan 9 от Bell Labs рассматривает все как файл и обращается ко всем объектам так же, как обращаются к файлу (т. е. нет ioctl или mmap ): сетевые функции, графика, отладка, аутентификация, возможности, шифрование и другие службы доступны через операции ввода-вывода в файловых дескрипторах . Протокол 9P устраняет разницу между локальными и удаленными файлами. Файловые системы в Plan 9 организованы с помощью частных пространств имен для каждого процесса, что позволяет каждому процессу иметь разное представление о множестве файловых систем, которые предоставляют ресурсы в распределенной системе.
Операционная система Inferno разделяет эти концепции с Plan 9.
Windows использует файловые системы FAT , NTFS , exFAT , Live File System и ReFS (последняя из них поддерживается и может использоваться только в Windows Server 2012 , Windows Server 2016 , Windows 8 , Windows 8.1 и Windows 10 ; Windows не может загрузиться с нее).
Windows использует абстракцию буквы диска на уровне пользователя, чтобы отличать один диск или раздел от другого. Например, путь C:\WINDOWS представляет каталог WINDOWS на разделе, представленном буквой C. Диск C: чаще всего используется для основного раздела жесткого диска , на который обычно устанавливается Windows и с которого она загружается. Эта «традиция» настолько прочно укоренилась, что во многих приложениях существуют ошибки, которые предполагают, что диск, на котором установлена операционная система, — это C. Использование букв диска и традиция использования «C» в качестве буквы диска для основного раздела жесткого диска можно проследить до MS-DOS , где буквы A и B были зарезервированы для двух дисководов. Это, в свою очередь, произошло от CP/M в 1970-х годах и, в конечном счете, от CP/CMS IBM 1967 года.
Семейство файловых систем FAT поддерживается практически всеми операционными системами для персональных компьютеров, включая все версии Windows и MS-DOS / PC DOS , OS/2 и DR-DOS . (PC DOS является OEM-версией MS-DOS, MS-DOS изначально была основана на SCP 86 -DOS . DR-DOS была основана на Digital Research Concurrent DOS , преемнике CP/M-86 .) Таким образом, файловые системы FAT хорошо подходят в качестве универсального формата обмена между компьютерами и устройствами практически любого типа и возраста.
Файловая система FAT берет свое начало от (несовместимого) 8-битного предшественника FAT в Standalone Disk BASIC и недолговечного проекта MDOS/MIDAS . [ необходима ссылка ]
За эти годы файловая система была расширена с FAT12 до FAT16 и FAT32 . В файловую систему были добавлены различные функции, включая подкаталоги , поддержку кодовых страниц , расширенные атрибуты и длинные имена файлов . Третьи стороны, такие как Digital Research, включили дополнительную поддержку отслеживания удаления и многопользовательских схем безопасности на основе томов/каталогов/файлов для поддержки паролей файлов и каталогов и разрешений, таких как права доступа на чтение/запись/выполнение/удаление. Большинство этих расширений не поддерживаются Windows.
Файловые системы FAT12 и FAT16 имели ограничение на количество записей в корневом каталоге файловой системы и имели ограничения на максимальный размер дисков или разделов, отформатированных в FAT .
FAT32 устраняет ограничения FAT12 и FAT16, за исключением ограничения на размер файла, близкого к 4 ГБ, но он остается ограниченным по сравнению с NTFS.
FAT12, FAT16 и FAT32 также имеют ограничение в восемь символов для имени файла и три символа для расширения (например, .exe ). Это обычно называют ограничением имени файла 8.3 . VFAT , необязательное расширение для FAT12, FAT16 и FAT32, представленное в Windows 95 и Windows NT 3.5 , позволяло хранить длинные имена файлов ( LFN ) в файловой системе FAT в обратно совместимом режиме.
NTFS , представленная в операционной системе Windows NT в 1993 году, позволяла управление разрешениями на основе ACL . Другие функции, также поддерживаемые NTFS, включают жесткие ссылки, множественные потоки файлов, индексацию атрибутов, отслеживание квот, разреженные файлы, шифрование, сжатие и точки повторной обработки (каталоги, работающие как точки монтирования для других файловых систем, символические ссылки, соединения, ссылки на удаленные хранилища).
exFAT имеет определенные преимущества перед NTFS в отношении накладных расходов файловой системы . [ необходима ссылка ]
exFAT не имеет обратной совместимости с файловыми системами FAT, такими как FAT12, FAT16 или FAT32. Файловая система поддерживается новыми системами Windows, такими как Windows XP, Windows Server 2003, Windows Vista, Windows 2008, Windows 7, Windows 8, Windows 8.1, Windows 10 и Windows 11.
exFAT поддерживается в macOS, начиная с версии 10.6.5 (Snow Leopard). [32] Поддержка в других операционных системах слабая, поскольку для реализации поддержки exFAT требуется лицензия. exFAT — единственная файловая система, которая полностью поддерживается как в macOS, так и в Windows и может хранить файлы размером более 4 ГБ. [33] [34]
До внедрения VSAM системы OS/360 реализовали гибридную файловую систему. Система была разработана для легкой поддержки сменных дисковых пакетов , поэтому информация, относящаяся ко всем файлам на одном диске ( томе в терминологии IBM), хранится на этом диске в плоском системном файле, называемом таблицей содержимого тома (VTOC). VTOC хранит все метаданные для файла. Позже иерархическая структура каталогов была введена с введением системного каталога , который может опционально каталогизировать файлы (наборы данных) на резидентных и сменных томах. Каталог содержит только информацию, связывающую набор данных с определенным томом. Если пользователь запрашивает доступ к набору данных на автономном томе и у него есть соответствующие привилегии, система попытается смонтировать требуемый том. Каталогизированные и некаталогизированные наборы данных по-прежнему могут быть доступны с использованием информации в VTOC, минуя каталог, если требуемый идентификатор тома предоставлен в запросе OPEN. Еще позже VTOC был проиндексирован для ускорения доступа.
Компонент IBM Conversational Monitor System (CMS) VM/370 использует отдельную плоскую файловую систему для каждого виртуального диска ( минидиска ). Данные файлов и управляющая информация разбросаны и перемешаны. Якорем является запись, называемая Master File Directory (MFD), всегда расположенная в четвертом блоке на диске. Первоначально CMS использовала блоки фиксированной длины по 800 байт, но более поздние версии использовали блоки большего размера до 4 КБ. Доступ к записи данных требует двух уровней косвенности , где запись каталога файла (называемая записью File Status Table (FST)) указывает на блоки, содержащие список адресов отдельных записей.
Данные на AS/400 и его последователях состоят из системных объектов, отображенных в системное виртуальное адресное пространство в одноуровневом хранилище . Определены многие типы объектов , включая каталоги и файлы, найденные в других файловых системах. Файловые объекты, наряду с другими типами объектов, составляют основу поддержки AS/400 интегрированной реляционной базы данных .
Файловые системы ограничивают емкость хранимых данных — как правило, это обусловлено типичным размером устройств хранения на момент проектирования файловой системы и прогнозируемым объемом в обозримом будущем.
Поскольку размеры хранилищ увеличиваются почти экспоненциально (см. закон Мура ), новые устройства хранения часто превышают существующие ограничения файловой системы всего за несколько лет после внедрения. Это требует новых файловых систем с постоянно растущей емкостью.
С более высокой емкостью потребность в возможностях и, следовательно, сложность также увеличивается. Сложность файловой системы обычно изменяется пропорционально доступной емкости хранилища. Оставив в стороне вопросы емкости, файловые системы домашних компьютеров начала 1980-х годов с объемом памяти от 50 КБ до 512 КБ не были бы разумным выбором для современных систем хранения с емкостью в сотни гигабайт. Аналогично, современные файловые системы не были бы разумным выбором для этих ранних систем, поскольку сложность современных структур файловых систем быстро израсходовала бы ограниченную емкость ранних систем хранения.
Может быть выгодно или необходимо иметь файлы в другой файловой системе, чем те, которые существуют в настоящее время. Причины включают необходимость увеличения требований к пространству за пределы ограничений текущей файловой системы. Глубину пути может потребоваться увеличить за пределы ограничений файловой системы. Могут быть соображения производительности или надежности. Предоставление доступа к другой операционной системе, которая не поддерживает существующую файловую систему, является еще одной причиной.
В некоторых случаях преобразование может быть выполнено на месте, хотя миграция файловой системы более консервативна, так как она включает в себя создание копии данных и рекомендуется. [39] В Windows файловые системы FAT и FAT32 могут быть преобразованы в NTFS с помощью утилиты convert.exe, но не наоборот. [39] В Linux ext2 может быть преобразована в ext3 (и преобразована обратно), а ext3 может быть преобразована в ext4 (но не обратно), [40] и как ext3, так и ext4 могут быть преобразованы в btrfs и преобразованы обратно до тех пор, пока не будет удалена информация об отмене. [41] Эти преобразования возможны благодаря использованию того же формата для самих данных файла и перемещению метаданных в пустое пространство, в некоторых случаях с использованием поддержки разреженных файлов . [41]
Миграция имеет недостаток, требующий дополнительного пространства, хотя это может быть быстрее. Лучший вариант — если на носителе есть неиспользованное пространство, которое будет содержать окончательную файловую систему.
Например, для миграции файловой системы FAT32 в файловую систему ext2 создается новая файловая система ext2. Затем данные из файловой системы FAT32 копируются в ext2, а старая файловая система удаляется.
Альтернативой, когда нет достаточного места для сохранения исходной файловой системы до создания новой, является использование рабочей области (например, съемного носителя). Это занимает больше времени, но имеет преимущество в создании резервной копии.
В иерархических файловых системах доступ к файлам осуществляется с помощью пути , который представляет собой ветвящийся список каталогов, содержащих файл. Различные файловые системы имеют различные ограничения на глубину пути. Файловые системы также имеют ограничение на длину отдельного имени файла.
Копирование файлов с длинными именами или расположенных в путях значительной глубины из одной файловой системы в другую может привести к нежелательным результатам. Это зависит от того, как утилита, выполняющая копирование, обрабатывает несоответствия.
система — это методы и структуры данных, которые операционная система использует для отслеживания файлов на диске или разделе; то есть способ организации файлов на диске.
HDD по-прежнему остаются ключевым хранилищем в обозримом будущем, SSD нерентабельны по емкости
Слово dentry является сокращением от 'directory entry' (запись каталога). Dentry — это не что иное, как определенный компонент в пути от корня. Они (имя каталога или имя файла) обеспечивают доступ к файлам или каталогам[.]
Объединенное хранилище: добавление физических устройств хранения в пул и выделение пространства хранения из этого общего пула. Пространство доступно для всех файловых систем и томов и увеличивается при добавлении новых устройств хранения в пул.
APFS представляет разделение пространства между томами. В APFS каждый физический диск представляет собой контейнер, который может иметь несколько томов внутри, которые совместно используют один и тот же пул свободного пространства.
{{cite web}}
: CS1 maint: неподходящий URL ( ссылка )