Процесс который создает файловую систему на диске

Обновлено: 07.07.2024

Файловая система (ФС) является важной частью любой операционной системы, которая отвечает за организацию хранения и доступа к информации на каких-либо носителях. Рассмотрим в качестве примера файловые системы для наиболее распространенных в наше время носителей информации – магнитных дисков. Как известно, информация на жестком диске хранится в секторах (обычно 512 байт) и само устройство может выполнять лишь команды считать/записать информацию в определенный сектор на диске. В отличие от этого файловая система позволяет пользователю оперировать с более удобным для него понятием - файл. Файловая система берет на себя организацию взаимодействия программ с файлами, расположенными на дисках. Для идентификации файлов используются имена. Современные файловые системы предоставляют пользователям возможность давать файлам достаточно длинные мнемонические названия.

Под каталогом в ФС понимается, с одной стороны, группа файлов, объединенных пользователем исходя из некоторых соображений, с другой стороны каталог - это файл, содержащий системную информацию о группе составляющих его файлов. Файловые системы обычно имеют иерархическую структуру, в которой уровни создаются за счет каталогов, содержащих информацию о файлах и каталогах более низкого уровня.

Рассмотрим более подробно структуру жесткого диска. Базовой единицей жесткого диска является раздел, создаваемый во время разметки жесткого диска. Каждый раздел содержит один том, обслуживаемый какой-либо файловой системой и имеющий таблицу оглавления файлов - корневой каталог. Некоторые операционные системы поддерживают создание томов, охватывающих несколько разделов. Жесткий диск может содержать до четырех основных разделов. Это ограничение связано с характером организации данных на жестких дисках IBM-совместимых компьютеров. Многие операционные системы позволяют создавать, так называемый, расширенный (extended) раздел, который по аналогии с разделами может разбиваться на несколько логических дисков.

В первом физическом секторе жесткого диска располагается головная запись загрузки и таблица разделов (табл. 1). Головная запись загрузки (master boot record, MBR) - первая часть данных на жестком диске. Она зарезервирована для программы начальной загрузки BIOS (ROM Bootstrap routine), которая при загрузке с жесткого диска считывает и загружает в память первый физический сектор на активном разделе диска, называемый загрузочным сектором (Boot Sector). Каждая запись в таблице разделов (partition table) содержит начальную позицию и размер раздела на жестком диске, а также информацию о том, первый сектор какого раздела содержит загрузочный сектор.

Размер (байт)

Загрузочная запись (MBR)

Запись 1 раздела

Запись 2 раздела

Запись 3 раздела

Запись 4 раздела

Табл. 1. Таблица деления диска

В широком смысле понятие "файловая система" включает:

  • совокупность всех файлов на диске,
  • наборы служебных структур данных, используемых для управления файлами, такие как, например, каталоги файлов, дескрипторы файлов, таблицы распределения свободного и занятого пространства на диске,
  • комплекс системных программных средств, реализующих управление файлами, в частности операции по созданию, уничтожению, чтению, записи, именованию файлов, установке атрибутов и уровней доступа, поиску и т.д.

Различие между файловыми системами заключается, в основном, в способах распределения пространства между файлами на диске и организации на диске служебных областей.

Современные операционные системы стремятся обеспечить пользователя возможностью работать одновременно с несколькими файловыми системами. В этом случае ФС рассматривается как часть подсистемы ввода-вывода. В большинстве операционных систем (Windows 95, NT, OS/2) реализуется механизм переключения файловых систем (File System Switch, FSS), позволяющий поддерживать различные типы ФС. В соответствии с этим подходом информация о файловых системах и файлах разбивается на две части – зависимую от ФС и не зависимую. FSS обеспечивает интерфейс между ядром и файловой системой, транслируя запросы ядра в операции, зависящие от типа файловой системы. При этом ядро имеет представление только о независимой части ФС.

Файловая система представляет многоуровневую структуру (рис. 1), на верхнем уровне которой располагается так называемый переключатель файловых систем (в Windows, такой переключатель называется устанавливаемым диспетчером файловой системы - installable filesystem manager, IFS). Он обеспечивает интерфейс между приложением и конкретной файловой системой, к которой обращается приложение. Переключатель файловых систем преобразует запросы к файлам в формат, воспринимаемый следующим уровнем - уровнем драйверов файловых систем. Для выполнения своих функций драйверы файловых систем обращаются к драйверам конкретных устройств хранения информации.

Клиент-серверные приложения предъявляют повышенные требования к производительности файловых систем. Современные файловые системы должны обеспечивать эффективный доступ к файлам, поддержку носителей данных достаточно большого объема, защиту от несанкционированного доступа к данным и сохранение целостности данных. Под целостностью данных подразумевается способность ФС обеспечивать отсутствие ошибок и нарушений согласованности в данных, а также восстанавливать поврежденные данные.

Файловая система FAT (File Allocation Table) была разработана Биллом Гейтсом и Марком МакДональдом в 1977 году и первоначально использовалась в операционной системе 86-DOS. Чтобы добиться переносимости программ из операционной системы CP/M в 86-DOS, в ней были сохранены ранее принятые ограничения на имена файлов. В дальнейшем 86-DOS была приобретена Microsoft и стала основой для ОС MS-DOS 1.0, выпущенной в августе 1981 года. FAT была предназначена для работы с гибкими дисками размером менее 1 Мбайта, и вначале не предусматривала поддержки жестких дисков. В настоящее время FAT поддерживает файлы и разделы размеров до 2 Гбайт.

В FAT применяются следующие соглашения по именам файлов:

    • имя должно начинаться с буквы или цифры и может содержать любой символ ASCII, за исключением пробела и символов "/\[]:;|=,^*?
    • Длина имени не превышает 8 символов, за ним следует точка и необязательное расширение длиной до 3 символов.
      • регистр символов в именах файлов не различается и не сохраняется.

      Структура раздела FAT изображена на рисунке 2. В блоке параметров BIOS содержится необходимая BIOS информация о физических характеристиках жесткого диска. Файловая система FAT не может контролировать отдельно каждый сектор, поэтому она объединяет смежные сектора в кластеры (clusters). Таким образом, уменьшается общее количество единиц хранения, за которыми должна следить файловая система. Размер кластера в FAT является степенью двойки и определяется размером тома при форматировании диска (табл. 2). Кластер представляет собой минимальное пространство, которое может занимать файл. Это приводит к тому, что часть пространства диска расходуется впустую. В состав операционной системы входят различные утилиты (DoubleSpace, DriveSpace), предназначенные для уплотнения данных на диске.

      Блок параметров BIOS (BPB)

      Свое название FAT получила от одноименной таблицы размещения файлов. В таблице размещения файлов хранится информация о кластерах логического диска. Каждому кластеру в FAT соответствует отдельная запись, которая показывает, свободен ли он, занят ли данными файла, или помечен как сбойный (испорченный). Если кластер занят под файл, то в соответствующей записи в таблице размещения файлов указывается адрес кластера, содержащего следующую часть файла. Из-за этого FAT называют файловой системой со связанными списками. Оригинальная версия FAT, разработанная для DOS 1.00, использовала 12-битную таблицу размещения файлов и поддерживала разделы объемом до 16 Мб (в DOS можно создать не более двух разделов FAT). Для поддержки жестких дисков размером более 32 Мб разрядность FAT была увеличена до 16 бит, а размер кластера - до 64 секторов (32 Кб). Так как каждому кластеру может быть присвоен уникальный 16-разрядный номер, то FAT поддерживает максимально 2 16 , или 65536 кластеров на одном томе.

      Размер раздела

      Размер кластера

      512 Мб – 1023 Мб

      Поскольку загрузочная запись слишком мала для хранения алгоритма поиска системных файлов на диске, то системные файлы должны находиться в определенном месте, чтобы загрузочная запись могла их найти. Фиксированное положение системных файлов в начале области данных накладывает жесткое ограничение на размеры корневого каталога и таблицы размещения файлов. Вследствие этого общее число файлов и подкаталогов в корневом каталоге на диске FAT ограничено 512.

      Каждому файлу и подкаталогу в FAT соответствует 32-байтный элемент каталога (directory entry), содержащий имя файла, его атрибуты (архивный, скрытый, системный и “только для чтения”), дату и время создания (или внесения в него последних изменений), а также прочую информацию (табл. 3).

      Размер (байт)

      Номер начального кластера с данными

      Табл. 3. Элемент каталога

      Файловая система FAT всегда заполняет свободное место на диске последовательно от начала к концу. При создании нового файла или увеличении уже существующего она ищет самый первый свободный кластер в таблице размещения файлов. Если в процессе работы одни файлы были удалены, а другие изменились в размере, то появляющиеся в результате пустые кластеры будут рассеяны по диску. Если кластеры, содержащие данные файла, расположены не подряд, то файл оказывается фрагментированным. Сильно фрагментированные файлы значительно снижают эффективность работы, так как головки чтения/записи при поиске очередной записи файла должны будут перемещаться от одной области диска к другой. В состав операционных систем, поддерживающих FAT, обычно входят специальные утилиты дефрагментации диска, предназначенные повысить производительность файловых операций.

      Еще один недостаток FAT заключается в том, что ее производительность сильно зависит от количества файлов, хранящихся в одном каталоге. При большом количестве файлов (около тысячи), выполнение операции считывания списка файлов в каталоге может занять несколько минут. Это обусловлено тем, что в FAT каталог имеет линейную неупорядоченную структуру, и имена файлов в каталогах идут в порядке их создания. В результате, чем больше в каталоге записей, тем медленнее работают программы, так как при поиске файла требуется просмотреть последовательно все записи в каталоге.

      Поскольку FAT изначально проектировалась для однопользовательской операционной системы DOS, то она не предусматривает хранения такой информации, как сведения о владельце или полномочия доступа к файлу/каталогу.

      FAT является наиболее распространенной файловой системой и ее в той или иной степени поддерживают большинство современных ОС. Благодаря своей универсальности FAT может применяться на томах, с которыми работают разные операционные системы.

      Хотя нет никаких препятствий использовать при форматировании дискет любую другую файловую систему, большинство ОС для совместимости используют FAT. Отчасти это можно объяснить тем, что простая структура FAT требует меньше места для хранения служебных данных, чем остальные системы. Преимущества других файловых систем становятся заметны только при использовании их на носителях объемом более 100 Мб.

      Надо отметить, что FAT - простая файловая система, не предотвращающая порчи файлов из-за ненормального завершения работы компьютера. В состав операционных систем, поддерживающих FAT, входят специальные утилиты проверяющие структуру и корректирующие несоответствия в файловой системе.

      Высокопроизводительная файловая система HPFS (High Performance File System) была представлена фирмой IBM в 1989 году вместе с операционной системой OS/2 1.20. Файловая система HPFS также поддерживалась ОС Windows NT до версии 3.51 включительно. По производительности эта ФС существенно опережает FAT. HPFS позволяет использовать жесткие диски объемом до 2 Терабайт (первоначально до 4 Гбайт). Кроме того, она поддерживает разделы диска размером до 512 Гб и позволяет использовать имена файлов длиной до 255 символов (на каждый символ при этом отводится 2 байта). В HPFS по сравнению с FAT уменьшено время доступа к файлам в больших каталогах.

      HPFS распределяет пространство на диске не кластерами как в FAT, а физическими секторами по 512 байт, что не позволяет ее использовать на жестких дисках, имеющих другой размер сектора. Эти секторы принято называть блоками. Чтобы уменьшить фрагментацию диска, при распределении пространства под файл HPFS стремится, по возможности, размещать файлы в последовательных смежных секторах. Фрагмент файла, располагающийся в смежных секторах, называется экстентом.

      Для нумерации единиц распределения пространства диска HPFS использует 32 разряда, что дает 2 32 , или более 4 миллиардов номеров. Однако HPFS использует числа со знаком, что сокращает число возможных номеров блоков до 2 миллиардов. Помимо стандартных атрибутов файла, HPFS поддерживает расширенные атрибуты файла (Extended Attributes, EA), которые могут содержать до 64 Кб различных дополнительных сведений о файле.

      Диск HPFS имеет следующие три базовые структуры (рис. 3): загрузочный блок (BootBlock), дополнительный блок (SuperBlock) и резервный блок (SpareBlock).

      Битовая карта группы 1

      Битовая карта группы 2

      Битовая карта группы 3

      Битовая карта группы 4

      Рис. 3. Дисковый раздел HPFS

      Загрузочный блок в HPFS аналогичен загрузочному блоку в FAT. Он располагается в секторах с 0 по 15 и занимает на диске 8 Кб. Системные файлы, также как и в FAT, располагаются в корневом каталоге, но при этом физически могут находиться в любом месте на диске.

      В 16 секторе размещается дополнительный блок, содержащий указатель на список блоков битовых карт (bitmap block list). В этом списке перечислены все блоки на диске, в которых расположены битовые карты, используемые для обнаружения свободных секторов. Также в дополнительном блоке хранится указатель на список дефектных блоков (bad block list), указатель на группу каталогов (directory band), указатель на файловый узел корневого каталога и дата последней проверки диска. Файловый узел (fnode) – это структура диска HPFS, которая содержит информацию о расположении файла и о его расширенных атрибутах.

      В следующем секторе находится резервный блок, содержащий карту аварийного замещения (hotfix map), указатель на список свободных запасных блоков (directory emergency free block list) и ряд системных флагов. Резервный блок обеспечивает высокую отказоустойчивость HPFS и позволяет восстанавливать поврежденные данные на диске.

      Остальное пространство диска разделено на группы (band) хранения данных. Каждая группа занимает 8 Мб и имеет свою собственную битовую карту свободного пространства, которая похожа на таблицу размещения файлов FAT. Каждому сектору группы соответствует один бит к ее битовой карте, показывающий занят ли соответствующий сектор. Битовые карты двух групп располагаются на диске рядом, также как располагаются и сами группы. Это дает возможность непрерывно разместить на жестком диске файл размером до 16 Мб.

      Одна из групп данных размером 8 Мб, расположенная в середине жесткого диска и называемая группой каталогов, хранит информацию о каталогах диска. В ней наряду с остальными каталогами располагается и корневой каталог. Расположение группы каталогов в центре диска значительно сокращает время позиционирования головок чтения/записи.

      В отличие от линейной структуры FAT, структура каталога в HPFS представляет собой сбалансированное дерево (так называемое B-дерево) с записями, расположенными в алфавитном порядке. Как показано на рисунке 4, сбалансированное дерево состоит из корневого (root block) и оконечных блоков (leaf block). Блоки занимают 4 последовательных сектора и в среднем могут содержать 40 записей. Каждая запись корневого блока указывает на один из оконечных блоков (если только в каталоге не меньше 40 файлов); в свою очередь, каждая запись в оконечном блоке указывает на файловый узел файла или на оконечный блок следующего уровня. Таким образом, двухуровневая структура может содержать 40 оконечных блоков по 40 записей в каждом и описывать до 1600 файлов. При поиске файловая система HPFS просматривает только необходимые ветви дерева.

      Рис. 4. Структура каталогов в HPFS

      Файловый узел имеет размер 512 байт и всегда по возможности располагается непосредственно перед первым блоком своего файла. Каждый файл и каталог диска HPFS имеет свой файловый узел. Информация, хранящаяся в файловом узле, включает в себя расширенные атрибуты файла, если они достаточно малы, чтобы поместится в один сектор диска, и сокращенное имя файла в формате 8.3. Если расширенные атрибуты не помещаются в файловый узел, то в него записывается указатель на них. Положение файла на диске описывается в файловом узле двумя 32-битными числами. Первое из чисел представляет собой указатель на первый блок файла, а второе - длину экстента. Если же файл фрагментирован, то его размещение описывается дополнительными парами 32-битных чисел. В файловом узле можно хранить информацию максимум о 8 экстентах файла. Если файл имеет больше число экстентов, то в его файловый узел записывается указатель на блок размещения (allocation block), который может содержать до 40 указателей на экстенты или на другие блоки размещения. Таким образом, двухуровневая структура блоков размещения может хранить информацию о 480 (12*40) секторах, что теоретически, позволяет работать с файлами размером до 7.68 Гб (12*40*16 Мб).

      Файловая система VFAT (Virtual FAT), реализованная в Windows NT 3.5, Windows 95 (DOS 7.0), - это файловая система FAT, включающая поддержку длинных имен файлов (Long File Name, LFN) в кодировке UNICODE (каждый символ имени кодируется 2 байтами). VFAT использует ту же самую схему распределения дискового пространства, что и файловая система FAT, поэтому размер кластера определяется величиной раздела.

      В VFAT ослаблены ограничения, устанавливаемые соглашениями по именам файлов FAT:

        • имя может быть длиной до 255 символов.
        • в имя можно включать несколько пробелов и точек, однако, текст после последней точки рассматривается как расширение.
          • регистр символов в именах не различается, но сохраняется.

          Основной задачей при разработке VFAT была необходимость корректной работы старых программ, не поддерживающих длинные имена файлов. Как правило, прикладные программы для доступа к файлам используют функции ОС. Если у элемента каталога установить “нереальную” комбинацию битов атрибутов: “только для чтения”, “скрытый”, “системный”, “метка тома” – то любые файловые функции старых версий DOS и Windows не заметят такого элемента каталога. В итоге для каждого файла и подкаталога в VFAT хранится два имени: длинное и короткое в формате 8.3 для совместимости со старыми программами. Длинные имена (LFN) хранятся в специальных записях каталога, байт атрибутов, у которых равен 0Fh. Для любого файла или подкаталога непосредственно перед единственной записью каталога с его именем в формате 8.3 находится группа из одной или нескольких записей, представляющих длинное имя. Каждая такая запись содержит часть длинного имени файла не более 13 символов, из всех таких записей ОС составляет полное имя файла. Поскольку одно длинное имя файла может занимать до 21 записи, а корневой каталог FAT ограничен 512 записями, желательно ограничить использование длинных имен в корневом каталоге.

          Если вкратце, то файловая система - всего лишь последовательность секторов, определяющая порядок организации хранения файлов. Начнём с того, что файловая система находится на разделе (partition), который в терминах Microsoft почему-то называется "логическим диском". Раздел находится на диске. А как размечается диск?

          Диск тоже - всего лишь последовательность секторов. А организация разделов прописывается в заголовке и зависит от типа разбиения диска. Сейчас существует два вида разбиения диска: старый MBR , позволяющий загрузку в стандартном режиме BIOS (Legacy) и новый GPT , требующий поддержки EFI (UEFI). Сейчас можно использовать оба, однако GPT требуется только для жёстких дисков объёмом более двух терабайт.

          Утилита Windows DiskPart для работы с дисками и разделами Утилита Windows DiskPart для работы с дисками и разделами

          Надо отметить, что MBR позволяет создать не более четырёх первичных (primary) разделов, один из которых может быть расширенным (extended). В расширенном разделе могут располагаться до четырёх логических (logical) разделов - впрочем, один из логических разделов тоже может быть расширенным. ну и так далее. Нюанс в том, что Windows умела загружаться только с первичных разделов.

          В GPT нет таких ограничений, там все разделы располагаются линейно.

          Но прежде чем разбивать диски, следует немножко изучить вопрос, как последовательность секторов определяется в BIOS. В старых системах было три режима работы жёсткого диска: Normal (CHS) , LBA , Large.

          Сейчас эти проблемы отпали, появились другие: Windows XP загружается, если установлен режим жёсткого диска IDE , а Windows 7 загружается, если установлен режим жёсткого диска AHCI - а если надо настроить для этих двух систем мультизагрузку ? На самом деле, Windows 7 умеет загружаться в режиме IDE (хотя и не на всех системах), а Windows XP умеет загружаться в режиме AHCI (просто при её установке надо или подсунуть ей драйвер, или прошить его в установочный дистрибутив заранее). Впрочем, эту проблему тоже можно считать решённой.

          Но мало иметь нужный раздел - на нём нужно ещё создать файловую систему определённого формата. В UNIX это делается командой newfs (new file system), в Linux командой mkfs (make file system), а в Windows процесс создания файловой системы называется форматированием.

          Для современных версий Windows формат файловой системы NTFS , кроме того она исторически понимает формат FAT32 (основной для Windows 98) и FAT16 (основной для Windows 95 и Windows NT 4.0). Кроме того, дискеты 3.5 дюйма обычно имели файловую систему FAT12. Сейчас все версии FAT ещё актуальны, но обычно для сторонних накопителей (например, флеш-накопителей). Дело в том, что эти файловые системы не поддерживают некоторых функций безопасности, в частности прав пользователя.

          На самом деле NTFS - дальнейшее развитие файловой системы HPFS, которая традиционно использовалась в операционной системе IBM OS/2 Warp. У них даже одинаковый идентификатор, из-за чего при настройке мультизагрузки могут быть проблемы.

          Для FreeBSD - файловая система UFS2 и сейчас активно продвигается ZFS

          Для Linux используются файловые системы ext2 / ext3 / ext4 / reiserfs

          Кроме того Linux использует отдельный идентификатор для раздела подкачки (linux swap). В Windows обычно используется файл подкачки (виртуальная память).

          Сделаем ещё один шаг и вспомним про LVM . Вкратце: раздел помечается как элемент тома LVM Несколько таких элементов объединяются в единый том, а затем. их можно разбить на разделы. Или использовать как один раздел. Для тех, кто не понял, зачем ещё один уровень абстракции, поясню: на трёх жёстких диска по терабайту можно создать один раздел linux объёмом три терабайта.

          А как же Windows? Да, у Windows есть аналогичная (но несовместимая) технология. В Windows можно создать составной том .

          И, разумеется, все системы обязаны понимать файловую систему ISO/UDF - просто потому, что это файловая система дисков CD/DVD, а так же их образов . Что такое образ компакт-диска? Это файл с расширением .iso - и его можно прожечь на чистый DVD-диск (болванку). Существуют и другие виды образов: расширение .img используется для флеш-накопителей.

          Не лишним будет упомянуть и такое колдунство, как виртуализация . Да, виртуальная машина тоже использует файл образа жёсткого диска вместо физического диска. А его формат зависит от гипервизора.

          Папку в сети можно сделать общей для других компьютеров, открыв к ней доступ по FTP , SSH , SMB или NFS (Network File System) . При этом для некоторых протоколов и файловых систем можно задать квоты .

          Но эти сетевые протоколы предоставляют доступ на высоком уровне, предоставляя доступ к файловой системе, как к уже готовому сервису. А вот протокол iSCSI позволяет делать по сети проброс блочных устройств - то есть дисковых накопителей целиком. Такое сетевое блочное устройство можно разбить на разделы с собственными файловыми системами точно так же, как и локальное.

          Подключение сетевого диска по протоколу iSCSI стандартными средствами Windows Подключение сетевого диска по протоколу iSCSI стандартными средствами Windows

          Напоследок осталось упомянуть про различные варианты организации дисковых массивов RAID :

          • RAID-0 - stripe (два диска объединены в 1, отказоустойчивость нулевая)
          • RAID-1 - mirror (два диска работают параллельно)
          • RAID-10 - четыре диска объединены в два зеркала, по сравнению с RAID-1 выигрыш в скорости в 2 раза.

          На этом краткий обзор технологий для работы с дисковыми накопителями и файловыми системами закончен. Буду рад, если Вы из этой статьи почерпнули что-то полезное для себя.

          Типы файловых систем

          Рядовому пользователю компьютерных электронных устройств редко, но приходится сталкиваться с таким понятием, как «выбор файловой системы». Чаще всего это происходит при необходимости форматирования внешних накопителей (флешек, microSD), установке операционных систем, восстановлении данных на проблемных носителях, в том числе жестких дисках. Пользователям Windows предлагается выбрать тип файловой системы, FAT32 или NTFS, и способ форматирования (быстрое/глубокое). Дополнительно можно установить размер кластера. При использовании ОС Linux и macOS названия файловых систем могут отличаться.

          Возникает логичный вопрос: что такое файловая система и в чем ее предназначение? В данной статье дадим ответы на основные вопросы касательно наиболее распространенных ФС.

          Что такое файловая система

          Обычно вся информация записывается, хранится и обрабатывается на различных цифровых носителях в виде файлов. Далее, в зависимости от типа файла, кодируется в виде знакомых расширений – *exe, *doc, *pdf и т.д., происходит их открытие и обработка в соответствующем программном обеспечении. Мало кто задумывается, каким образом происходит хранение и обработка цифрового массива в целом на соответствующем носителе.

          Операционная система воспринимает физический диск хранения информации как набор кластеров размером 512 байт и больше. Драйверы файловой системы организуют кластеры в файлы и каталоги, которые также являются файлами, содержащими список других файлов в этом каталоге. Эти же драйверы отслеживают, какие из кластеров в настоящее время используются, какие свободны, какие помечены как неисправные.

          Запись файлов большого объема приводит к необходимости фрагментации, когда файлы не сохраняются как целые единицы, а делятся на фрагменты. Каждый фрагмент записывается в отдельные кластеры, состоящие из ячеек (размер ячейки составляет один байт). Информация о всех фрагментах, как части одного файла, хранится в файловой системе.

          Файловая система связывает носитель информации (хранилище) с прикладным программным обеспечением, организуя доступ к конкретным файлам при помощи функционала взаимодействия программ A PI. Программа, при обращении к файлу, располагает данными только о его имени, размере и атрибутах. Всю остальную информацию, касающуюся типа носителя, на котором записан файл, и структуры хранения данных, она получает от драйвера файловой системы.

          На физическом уровне драйверы ФС оптимизируют запись и считывание отдельных частей файлов для ускоренной обработки запросов, фрагментации и «склеивания» хранящейся в ячейках информации. Данный алгоритм получил распространение в большинстве популярных файловых систем на концептуальном уровне в виде иерархической структуры представления метаданных (B-trees). Технология снижает количество самых длительных дисковых операций – позиционирования головок при чтении произвольных блоков. Это позволяет не только ускорить обработку запросов, но и продлить срок службы HDD. В случае с твердотельными накопителями, где принцип записи, хранения и считывания информации отличается от применяемого в жестких дисках, ситуация с выбором оптимальной файловой системы имеет свои нюансы.

          Основные функции файловых систем

          Файловая система отвечает за оптимальное логическое распределение информационных данных на конкретном физическом носителе. Драйвер ФС организует взаимодействие между хранилищем, операционной системой и прикладным программным обеспечением. Правильный выбор файловой системы для конкретных пользовательских задач влияет на скорость обработки данных, принципы распределения и другие функциональные возможности, необходимые для стабильной работы любых компьютерных систем. Иными словами, это совокупность условий и правил, определяющих способ организации файлов на носителях информации.

          Основными функциями файловой системы являются:

          • размещение и упорядочивание на носителе данных в виде файлов;
          • определение максимально поддерживаемого объема данных на носителе информации;
          • создание, чтение и удаление файлов;
          • назначение и изменение атрибутов файлов (размер, время создания и изменения, владелец и создатель файла, доступен только для чтения, скрытый файл, временный файл, архивный, исполняемый, максимальная длина имени файла и т.п.);
          • определение структуры файла;
          • поиск файлов;
          • организация каталогов для логической организации файлов;
          • защита файлов при системном сбое;
          • защита файлов от несанкционированного доступа и изменения их содержимого.

          VDS Timeweb арендовать

          Задачи файловой системы

          Функционал файловой системы нацелен на решение следующих задач:

          • присвоение имен файлам;
          • программный интерфейс работы с файлами для приложений;
          • отображение логической модели файловой системы на физическую организацию хранилища данных;
          • поддержка устойчивости файловой системы к сбоям питания, ошибкам аппаратных и программных средств;
          • содержание параметров файла, необходимых для правильного взаимодействия с другими объектами системы (ядро, приложения и пр.).

          В многопользовательских системах реализуется задача защиты файлов от несанкционированного доступа, обеспечение совместной работы. При открытии файла одним из пользователей для других этот же файл временно будет доступен в режиме «только чтение».

          Вся информация о файлах хранится в особых областях раздела (томах). Структура справочников зависит от типа файловой системы. Справочник файлов позволяет ассоциировать числовые идентификаторы уникальных файлов и дополнительную информацию о них с непосредственным содержимым файла, хранящимся в другой области раздела.

          Операционные системы и типы файловых систем

          Существует три основных вида операционных систем, используемых для управления любыми информационными устройствами: Windows компании Microsoft, macOS разработки Apple и операционные системы с открытым исходным кодом на базе Linux. Все они, для взаимодействия с физическими носителями, используют различные типы файловых систем, многие из которых дружат только со «своей» операционкой. В большинстве случаев они являются предустановленными, рядовые пользователи редко создают новые дисковые разделы и еще реже задумываются об их настройках.

          В случае с Windows все выглядит достаточно просто: NTFS на всех дисковых разделах и FAT32 (или NTFS) на флешках. Если установлен NAS (сервер для хранения данных на файловом уровне), и в нем используется какая-то другая файловая система, то практически никто не обращает на это внимания. К нему просто подключаются по сети и качают файлы.

          На мобильных гаджетах с ОС Android чаще всего установлена ФС версии ext4 во внутренней памяти и FAT32 на карточках microSD. Владельцы продукции Apple зачастую вообще не имеют представления, какая файловая система используется на их устройствах – HFS+, HFSX, APFS, WTFS или другая. Для них существуют лишь красивые значки папок и файлов в графическом интерфейсе.

          Более богатый выбор у линуксоидов. Но здесь настройка и использование определенного типа файловой системы требует хотя бы минимальных навыков программирования. Тем более, мало кто задумывается, можно ли использовать в определенной ОС «неродную» файловую систему. И зачем вообще это нужно.

          Рассмотрим более подробно виды файловых систем в зависимости от их предпочтительного использования с определенной операционной системой.

          Файловые системы Windows

          Исходный код файловой системы, получившей название FAT, был разработан по личной договоренности владельца Microsoft Билла Гейтса с первым наемным сотрудником компании Марком Макдональдом в 1977 году. Основной задачей FAT была работа с данными в операционной системе Microsoft 8080/Z80 на базе платформы MDOS/MIDAS. Файловая система FAT претерпела несколько модификаций – FAT12, FAT16 и, наконец, FAT32, которая используется сейчас в большинстве внешних накопителей. Основным отличием каждой версии является преодоление ограниченного объема доступной для хранения информации. В дальнейшем были разработаны еще две более совершенные системы обработки и хранения данных – NTFS и ReFS.

          FAT (таблица распределения файлов)

          Числа в FAT12, FAT16 и FAT32 обозначают количество бит, используемых для перечисления блока файловой системы. FAT32 является фактическим стандартом и устанавливается на большинстве видов сменных носителей по умолчанию. Одной из особенностей этой версии ФС является возможность применения не только на современных моделях компьютеров, но и в устаревших устройствах и консолях, снабженных разъемом USB.

          Пространство FAT32 логически разделено на три сопредельные области:

          • зарезервированный сектор для служебных структур;
          • табличная форма указателей;
          • непосредственная зона записи содержимого файлов.

          К недостатком стандарта FAT32 относится ограничение размера файлов на диске до 4 Гб и всего раздела в пределах 8 Тб. По этой причине данная файловая система чаще всего используется в USB-накопителях и других внешних носителях информации. Для установки последней версии ОС Microsoft Windows 10 на внутреннем носителе потребуется более продвинутая файловая система.

          С целью устранения ограничений, присущих FAT32, корпорация Microsoft разработала обновленную версию файловой системы exFAT (расширенная таблица размещения файлов). Новая ФС очень схожа со своим предшественником, но позволяет пользователям хранить файлы намного большего размера, чем четыре гигабайта. В exFAT значительно снижено число перезаписей секторов, ответственных за непосредственное хранение информации. Функция очень важна для твердотельных накопителей ввиду необратимого изнашивания ячеек после определенного количества операций записи. Продукт exFAT совместим с операционными системами Mac, Android и Windows. Для Linux понадобится вспомогательное программное обеспечение.

          NTFS (файловая система новой технологии)

          Стандарт NTFS разработан с целью устранения недостатков, присущих более ранним версиям ФС. Впервые он был реализован в Windows NT в 1995 году, и в настоящее время является основной файловой системой для Windows. Система NTFS расширила допустимый предел размера файлов до шестнадцати гигабайт, поддерживает разделы диска до 16 Эб (эксабайт, 10 18 байт ). Использование системы шифрования Encryption File System (метод «прозрачного шифрования») осуществляет разграничение доступа к данным для различных пользователей, предотвращает несанкционированный доступ к содержимому файла. Файловая система позволяет использовать расширенные имена файлов, включая поддержку многоязычности в стандарте юникода UTF, в том числе в формате кириллицы. Встроенное приложение проверки жесткого диска или внешнего накопителя на ошибки файловой системы chkdsk повышает надежность работы харда, но отрицательно влияет на производительность.

          ReFS (Resilient File System)

          Последняя разработка Microsoft, доступная для серверов Windows 8 и 10. Архитектура файловой системы в основном организована в виде B + -tree. Файловая система ReFS обладает высокой отказоустойчивостью благодаря реализации новых функций:

          • Copy-on-Write (CoW) – никакие метаданные не изменяются без копирования;
          • данные записываются на новое дисковое пространство, а не поверх существующих файлов;
          • при модификации метаданных новая копия хранится в свободном дисковом пространстве, затем система создает ссылку из старых метаданных на новую версию.

          Все это позволяет повысить надежность хранения файлов, обеспечивает быстрое и легкое восстановление данных.

          Файловые системы macOS

          Для операционной системы macOS компания Apple использует собственные разработки файловых систем:

          Файловые системы macOS

          1. HFS+, которая является усовершенствованной версией HFS, ранее применяемой на компьютерах Macintosh, и ее более соверешенный аналог APFS. Стандарт HFS+ используется во всех устройствах под управлением продуктов Apple, включая компьютеры Mac, iPod, а также Apple X Server.
          2. Кластерная файловая система Apple Xsan, созданная из файловых систем StorNext и CentraVision, используется в расширенных серверных продуктах. Эта файловая система хранит файлы и папки, информацию Finder о просмотре каталогов, положениях окна и т.д.

          Файловые системы Linux

          В отличие от ОС Windows и macOS, ограничивающих выбор файловой системы предустановленными вариантами, Linux предоставляет возможность использования нескольких ФС, каждая из которых оптимизирована для решения определенных задач. Файловые системы в Linux используются не только для работы с файлами на диске, но и для хранения данных в оперативной памяти или доступа к конфигурации ядра во время работы системы. Все они включены в ядро и могут использоваться в качестве корневой файловой системы.

          Файловая система Линукс

          Основные файловые системы, используемые в дистрибутивах Linux:

          Ext2, Ext3, Ext4 или Extended Filesystem – стандартная файловая система, первоначально разработанная еще для Minix. Содержит максимальное количество функций и является наиболее стабильной в связи с редкими изменениями кодовой базы. Начиная с ext3 в системе используется функция журналирования. Сегодня версия ext4 присутствует во всех дистрибутивах Linux.

          JFS или Journaled File System разработана в IBM в качестве альтернативы для файловых систем ext. Сейчас она используется там, где необходима высокая стабильность и минимальное потребление ресурсов (в первую очередь в многопроцессорных компьютерах). В журнале хранятся только метаданные, что позволяет восстанавливать старые версии файлов после сбоев.

          ReiserFS также разработана в качестве альтернативы ext3, поддерживает только Linux. Динамический размер блока позволяет упаковывать несколько небольших файлов в один блок, что предотвращает фрагментацию и улучшает работу с небольшими файлами. Недостатком является риск потери данных при отключении энергии.

          XFS рассчитана на файлы большого размера, поддерживает диски до 2 терабайт. Преимуществом системы является высокая скорость работы с большими файлами, отложенное выделение места, увеличение разделов на лету, незначительный размер служебной информации. К недостаткам относится невозможность уменьшения размера, сложность восстановления данных и риск потери файлов при аварийном отключении питания.

          Btrfs или B-Tree File System легко администрируется, обладает высокой отказоустойчивостью и производительностью. Используется как файловая система по умолчанию в OpenSUSE и SUSE Linux.

          Другие ФС, такие как NTFS, FAT, HFS, могут использоваться в Linux, но корневая файловая система на них не устанавливается, поскольку они для этого не предназначены.

          Дополнительные файловые системы

          В операционных системах семейства Unix BSD (созданы на базе Linux) и Sun Solaris чаще всего используются различные версии ФС UFS (Unix File System), известной также под названием FFS (Fast File System). В современных компьютерных технологиях данные файловые системы могут быть заменены на альтернативные: ZFS для Solaris, JFS и ее производные для Unix.

          Кластерные файловые системы включают поддержку распределенных хранилищ, расширяемость и модульность. К ним относятся:

          • ZFS – «Zettabyte File System» разработана для распределенных хранилищ Sun Solaris OS;
          • Apple Xsan – эволюция компании Apple в CentraVision и более поздних разработках StorNext;
          • VMFS (Файловая система виртуальных машин) разработана компанией VMware для VMware ESX Server;
          • GFS – Red Hat Linux именуется как «глобальная файловая система» для Linux;
          • JFS1 – оригинальный (устаревший) дизайн файловой системы IBM JFS, используемой в старых системах хранения AIX.

          Практический пример использования файловых систем

          Владельцы мобильных гаджетов для хранения большого объема информации используют дополнительные твердотельные накопители microSD (HC), по умолчанию отформатированные в стандарте FAT32. Это является основным препятствием для установки на них приложений и переноса данных из внутренней памяти. Чтобы решить эту проблему, необходимо создать на карточке раздел с ext3 или ext4. На него можно перенести все файловые атрибуты (включая владельца и права доступа), чтобы любое приложение могло работать так, словно запустилось из внутренней памяти.

          Операционная система Windows не умеет делать на флешках больше одного раздела. С этой задачей легко справится Linux, который можно запустить, например, в виртуальной среде. Второй вариант - использование специальной утилиты для работы с логической разметкой, такой как MiniTool Partition Wizard Free . Обнаружив на карточке дополнительный первичный раздел с ext3/ext4, приложение Андроид Link2SD и аналогичные ему предложат куда больше вариантов.

          Файловая система для microSD

          Флешки и карты памяти быстро умирают как раз из-за того, что любое изменение в FAT32 вызывает перезапись одних и тех же секторов. Гораздо лучше использовать на флеш-картах NTFS с ее устойчивой к сбоям таблицей $MFT. Небольшие файлы могут храниться прямо в главной файловой таблице, а расширения и копии записываются в разные области флеш-памяти. Благодаря индексации на NTFS поиск выполняется быстрее. Аналогичных примеров оптимизации работы с различными накопителями за счет правильного использования возможностей файловых систем существует множество.

          Надеюсь, краткий обзор основных ФС поможет решить практические задачи в части правильного выбора и настройки ваших компьютерных устройств в повседневной практике.

          Типовая совокупность действий пользователя в отношении файловой системы на диске состоит из форматирования диска, создания на нем структуры каталогов, заполнения их файлами, а также выполнения разнообразных действий с этими файлами. В предыдущей лекции говорилось главным образом о том, какие возможности предоставляет файловая система пользователю для решения его задач. Теперь перейдем к рассмотрению вопросов, которые связаны с реализацией предоставляемых сервисов, алгоритмами и структурами данных на диске, позволяющими связать символьное имя файла с данными. Кроме того, файловые службы должны решать проблемы совместного доступа к данным, проблемы проверки и сохранения целостности файловой системы, проблемы повышения производительности и ряд других.

          Нижний уровень в системе хранения данных - диски с подвижными головками. Для обмена с магнитным диском на уровне аппаратуры нужно указать номер цилиндра, номер поверхности, номер блока на соответствующей дорожке и число байтов, которое нужно записать или прочитать от начала этого блока. Таким образом, диски могут быть разбиты на блоки фиксированного размера, и можно непосредственно получить доступ к любому блоку (организовать прямой доступ к файлам).

          В традиционной многоуровневой системе построения операционных систем с устройствами (дисками) непосредственно взаимодействует часть ОС, называемая системой ввода-вывода, основу которой составляют драйверы устройств. Задача системы ввода-вывода: скрыть особенности работы с дисками и предоставить в распоряжение более высокоуровневого компонента ОС - файловой системы - используемое дисковое пространство в виде непрерывной последовательности блоков фиксированного размера. Файловая система располагается соответственно между системой ввода-вывода и прикладной программой см., например, [ Карпов ] .


          В ОС Windows файловая система интегрирована в систему ввода-вывода (см. рис. 12.1), построенную в виде набора разнообразных драйверов, и также реализована в виде драйвера, например, драйвера NTFS или драйвера FAT . Общение драйверов организовано путем посылки так называемых IRP ( I/O request packet ) пакетов. Функционирование системы ввода-вывода подробно описано в [ Руссинович ] , [ Сорокина ] . В данной лекции речь пойдет о ее файловой подсистеме.

          Кластеры

          Обычно диски разбиты на блоки (секторы) размером - 512 б. Однако удобнее оперировать блоками более крупного размера - кластерами (cluster). Размер кластера равен размеру сектора, умноженному на кластерный множитель (claster factor), и может быть установлен во время операции форматирования диска. По умолчанию это значение равно 4 Кб и может быть изменено. Альтернативные значения размера кластера можно, например, извлечь из справочной информации команды format .

          Эксперимент. Получение информации о потенциальном размере кластера

          Ниже приведена часть результатов вывода команды "format /?"

          Заменяет размер кластера по умолчанию. В общих случаях рекомендуется использовать размеры кластера по умолчанию.

          NTFS поддерживает размеры 512, 1024, 2048, 4096, 8192, 16КБ, 32КБ, 64K.

          FAT32 поддерживает размеры 512, 1024, 2048, 4096, 8192, 16КБ, 32КБ, 64КБ, (128КБ, 256КБ для размера сектора > 512 Байт).

          Файловые системы FAT и FAT32 налагают следующие ограничения на число кластеров тома:

          FAT: число кластеров <= 65526

          FAT32 : 65526 < число кластеров < 4177918

          Выполнение команды Format будет немедленно прервано, если будет обнаружено нарушение указанных выше ограничений, используя указанный размер кластеров .

          Сжатие томов NTFS не поддерживается для размеров кластеров более 4096 Байт.

          Размер кластера , которые в дальнейшем также будут называться блоками диска, играет немаловажную роль. Небольшой размер блока будет приводить к тому, что каждый файл будет содержать много блоков и читаться медленно. Большие блоки обеспечивают более высокую скорость обмена с диском, но из-за внутренней фрагментации (каждый файл занимает целое число блоков, и в среднем половина последнего блока пропадает) снижается процент полезного дискового пространства. Специально проведенные исследования показали, что оптимальным является компромиссный размер блока, лежащий в диапазоне от 1-го до 8 Кб.

          Система различает кластеры диска (volume claster) и кластеры диска, принадлежащие файлу (logical claster). Для них поддерживается разная нумерация, соответственно VCN и LCN .

          Структуры данных, необходимые для описания файловой системы на диске

          Основная функция файловой системы - связь символьного имени файла и блоков диска, принадлежащих файлу, - реализуется с помощью ссылки из записи каталога о данном файле на запись в таблице, формат которой определяется типом файловой системы на данном диске.

          Например, в файловой системе FAT , одной из файловых систем, поддерживаемых ОС Windows , имеется таблица отображения файлов (file allocation table ), которая поддерживает связный список блоков для каждого файла. Таблица индексирована по номерам блоков. Запись в каталоге указывает на строку в таблице, содержащую первый блок файла, а далее по таблице можно найти все остальные блоки данного файла. Принцип работы файловой системы FAT более подробно описан в [ Карпов ] .

          Рассмотрим устройство базовой файловой системы ОС Windows - NTFS .

          Главная файловая таблица MFT

          В файловой системе NTFS запись о файле в каталоге сопоставляется с записью о файле в главной файловой таблице диска - MFT (master file table), которая содержит информацию о расположении данных файла.

          Записи MFT

          MFT - главная структура данных на диске, представляет собой обычный файл, содержащий до 2 48 записей размером 1 Кб каждая (см. рис. 12.2). Каждому файлу или каталогу соответствует одна запись. Записи 12-15 зарезервированы для служебных файлов, а записи, начиная с 16-й, предназначены для файлов пользователей. Для больших файлов требуется несколько записей, первая из которых называется базовой. Таблица MFT может располагаться в любом месте диска.

          В состав каждой записи входит заголовок и последовательность пар <заголовок атрибута, значение>. Если атрибут целиком помещается в записи MFT , он считается резидентным. В противном случае атрибут помещается в отдельные блоки диска, а в заголовке атрибута хранится информация о его местонахождении. Всегда резидентны атрибуты: "имя файла", "стандартная информация", а такие атрибуты, как "поток данных файла", "индекс" большого каталога обычно нерезидентны, хотя для файлов размером несколько сот байтов поток данных может быть резидентным атрибутом, т.к. целиком помещается в записи MFT .

          Чаще данные файла все же не помещаются в записи MFT . Рассмотрим данный вариант несколько подробнее. В этом случае вслед за заголовком в записи размещается список дисковых блоков файла ( рис. 12.3).

          Запись MFT для 10-блочного файла, состоящего из четырех фрагментов (серий)


          Рис. 12.3. Запись MFT для 10-блочного файла, состоящего из четырех фрагментов (серий)

          Для сильно фрагментированных файлов требуется много серий и несколько MFT записей. Первая запись о файле содержит список остальных записей. Если этот список велик, то он является нерезидентным атрибутом и размещается в отдельном файле.

          Номера дисковых кластеров файлов можно узнать при помощи утилиты nfi.exe (NTFS File Sectors Information Util), входящей в состав ресурсов Windows.

          Эксперимент. Просмотр кластеров, принадлежащих файлу с помощью утилиты nfi.exe

          Здесь приведена информация о файлах \tmp\nfi\exp.h и \tmp\nfi\h.h , которую выдает утилита nfi . Наиболее интересно расположение на диске нерезидентного атрибута потока данных, дисковые номера кластеров которого в данном случае обозначаются как logical sectors .

          Читайте также: