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

Одной из важнейших характеристик исходной FAT было использование имен файлов формата «8.3», в котором 8 символов отводится на указание имени фай­ла и 3 символа – для расширения имени. К стандартной FAT (имеется в виду прежде всего реализация FAT16) добавились еще две разновидности, используе­мые в широко распространенных операционных системах Microsoft (Windows 95 и Windows NT): VFAT (виртуальная FAT) и FAT32, используемая в одной из редакций ОС Windows 95 и Windows 98. Ныне эта файловая система (FAT32) поддерживается и такими ОС, как Windows Millennium Edition, и все­ми ОС семейства Windows 2000. Имеются реализации систем управления фай­лами для FAT32, Windows NT и ОС Linux.

Файловая система VFAT впервые появилась в Windows for Workgroups 3.11. С выходом Windows 95 в VFAT добавилась поддержка длинных имен файлов (long file name, LFN). Тем не менее VFAT сохраняет совместимость с ис­ходным вариантом FAT; это означает, что наряду с длинными именами в ней поддерживаются имена формата «8.3», а также существует специальный меха­низм для преобразования имен «8.3» в длинные имена, и наоборот. Именно фай­ловая система VFAT поддерживается исходными версиями Windows 95, Win­dows NT 4. При работе с VFAT крайне важно использовать файловые утилиты, поддерживающие VFAT вообще и длинные имена, в частности. Дело в том, что более ранние файловые утилиты DOS запросто модифицируют то, что кажется им исходной структурой FAT. Это может привести к потере или порче длинных имен из таблицы FAT, поддерживаемой VFAT (или FAT32). Следовательно, для томов VFAT необходимо пользоваться файловыми утилитами, которые понима­ют и сохраняют файловую структуру VFAT.

В исходной версии Windows 95 основной файловой системой была 32-разрядная VFAT. VFAT может использовать 32-разрядные драйверы защищенного режима или 16-разрядные драйверы реального режима. При этом элементы FAT остают­ся 12- или 16-разрядными, поэтому на диске используется та же структура дан­ных, что и в предыдущих реализациях FAT. VFAT обрабатывает все обращения к жесткому диску и использует 32-разрядный код для всех файловых операций с дисковыми томами.

Основными недостатками файловых систем FAT и VFAT являются большие по­тери на кластеризацию при больших размерах логического диска и ограничения на сам размер логического диска. Это привело к разработке новой реализации файловой системы с использованием той же идеи использования таблицы FAT. Поэтому в Microsoft Windows 95 OEM Service Release 2 (эта версия Windows 95 часто называется Windows 95 OSR2) на смену системе VFAT пришла файловая система FAT32.

FAT32 является полностью самостоятельной 32-разрядной фай­ловой системой и содержит многочисленные усовершенствования и дополнения по сравнению с предыдущими реализациями FAT. Принципиальное отличие заключается в том, что FAT32 намного эффективнее расходует дисковое пространство. Прежде всего, система FAT32 использует кла­стеры меньшего размера по сравнению с предыдущими версиями, которые огра­ничивались 65535 кластерами на том (соответственно, с увеличением размера диска приходилось увеличивать и размер кластеров). Следовательно, даже для дисков размером до 8 Гбайт FAT32 может использовать 4-килобайтные класте­ры. В результате по сравнению с дисками FAT16 экономится значительное дис­ковое пространство (в среднем 10-15 %).

FAT32 также может перемещать корневой каталог и использовать резервную ко­пию FAT вместо стандартной. Расширенная загрузочная запись FAT32 позволя­ет создавать копии критических структур данных; это повышает устойчивость дисков FAT32 к нарушениям структуры FAT по сравнению с предыдущими вер­сиями.

Кроме повышения емкости FAT до величины в 4 Тбайт, файловая система FAT32 вносит ряд необходимых усовершенствований в структуру корневого каталога. Корневой каталог в FAT32 представлен в виде обычной цепочки класте­ров. Следовательно, корневой каталог может находиться в произвольном месте диска, что снимает действовавшее ранее ограничение на размер корневого ката­лога (512 элементов).

Windows 95 OSR2 и Windows 98 могут работать и с разделами VFAT, созданны­ми Windows NT. To, что говорилось ранее об использовании файловых утилит VFAT с томами VFAT, относится и к FAT32. Поскольку прежние утилиты FAT (для FAT32 в эту категорию входят обе файловые системы, FAT и VFAT) могут повредить или уничтожить важную служебную информацию, для томов FAT32 нельзя пользоваться никакими файловыми утилитами, кроме утилит FAT32.

Необходимость представлять длинные имена и обеспечить совместимость с прежними версиями FAT привела разработчиков компании Microsoft к компромиссному решению: для представления длинного имени они стали использовать элементы каталога, в том числе и корневого.

Для длинного имени файла используется несколько эле­ментов каталога. Таким образом, появление длинных имен фактически приве­ло к дальнейшему уменьшению количества файлов, которые могут находиться в корневом каталоге. Поскольку длинное имя может содержать до 256 символов, всего один файл с полным длинным именем занимает до 25 элементов FAT (1 для имени 8.3 и еще 24 для самого длинного имени). Количество элементов корневого каталога VFAT уменьшается до 21. Очевидно, что это не самое изящ­ное решение, поэтому компания Microsoft советует избегать длинных имен в корневых каталогах FAT при отсутствии FAT32, у которой количество элемен­тов каталога соответственно просто увеличено.

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

Сокращение HPFS расшифровывается как «High Performance File System» – вы­сокопроизводительная файловая система. HPFS впервые появилась в OS/2 1.2 и LAN Manager. HPFS была разработана совместными усилиями лучших спе­циалистов компании IBM и Microsoft. Архитектура HPFS начала создаваться как файловая система, которая сможет использовать преиму­щества многозадачного режима и обеспечит в будущем более эффективную и на­дежную работу с файлами на дисках большого объема.

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

Принципы размещения файлов на диске, положенные в основу HPFS, увеличи­вают как производительность файловой системы, так и ее надежность и отказо­устойчивость. Для достижения этих целей предложено несколько способов: раз­мещение каталогов в середине дискового пространства, использование методов бинарных сбалансированных деревьев для ускорения поиска информации о файле, рассредоточение информации о местоположении записей файлов по всему дис­ку, при том что записи каждого конкретного файла размещаются (по возможно­сти) в смежных секторах и поблизости от данных об их местоположении. Дейст­вительно, система HPFS стремится, прежде всего, к тому, чтобы расположить файл в смежных кластерах, или, если такой возможности нет, разместить его на диске таким образом, чтобы фрагменты (extents) файла физически были как можно ближе друг к другу. Такой подход существенно уменьшает время позиционирова­ния головок записи/чтения жесткого диска и время ожидания (rotational laten­cy) – задержка между установкой головки чтения/записи на нужную дорожку диска и началом чтения данных с диска). Можно сказать, что файловая система HPFS имеет, по сравнению с FAT, следующие основные преимущества:

высокая производительность;

надежность;

работа с расширенными атрибутами, что позволяет управлять доступом к фай­лам и каталогам;

эффективное использование дискового пространства.

Все эти преимущества обусловлены структурой диска HPFS. Рассмотрим ее бо­лее подробно (рис. 3.6).

Рис. 3.6. Структура раздела HPFS

 

В начале диска расположено несколько управляющих блоков. Все остальное дис­ковое пространство в HPFS разбито на части («полосы», «ленты» из смежных секторов, в оригинале – band). Каждая такая группа данных занимает на диске пространство в 8 Мбайт и имеет свою собственную битовую карту распределе­ния секторов. Эти битовые карты показывают, какие секторы данной полосы за­няты, а какие – свободны. Каждому сектору ленты данных соответствует один бит в ее битовой карте. Если бит имеет значение 1, то соответствующий сектор занят, а если 0 – свободен.

Битовые карты двух полос располагаются на диске рядом, так же располагаются и сами полосы. То есть последовательность полос и карт выглядит следующим образом: битовая карта, битовая карта, лента с данными, лента с данными, бито­вая карта, битовая карта и т. д. Такое расположение «лент» позволяет непрерыв­но разместить на жестком диске файл размером до 16 Мбайт и в то же время не удалять от самих файлов информацию об их местонахождении.

Очевидно, что если бы на весь диск была только одна битовая карта (bit map), как это сделано в FAT, то для работы с ней приходилось бы перемещать головки чте­ния/записи в среднем через половину диска. Именно для того, чтобы избежать этих потерь, в HPFS и разбит диск на «полосы». Получается своего рода распре­деленная структура данных об используемых и свободных блоках.

Дисковое пространство в HPFS выделяется не кластерами, как в FAT, а блоками. В современной реализации размер блока взят равным одному сектору, но в принципе он мог бы быть и иного размера. По сути дела, блок – это и есть кластер. Размещение файлов в таких небольших блоках позволяет более эффектив­но использовать пространство диска, так как непроизводительные потери сво­бодного места составляют в среднем всего 256 байт на каждый файл. Например, кластер на отформатированном под FAT диске объемом от 512 до 1024 Мбайт имеет размер 16 Кбайт. Следовательно, непродуктивные потери сво­бодного пространства на таком разделе в среднем составляют 8 Кбайт (8192 байт) на один файл, в то время как на разделе HPFS эти потери всегда будут состав­лять всего 256 байт на файл. Таким образом, на каждый файл экономится почти 8 Кбайт.

На рис. 3.6 показано, что помимо «лент» с записями файлов и битовых карт в томе с HPFS имеются еще три информационные структуры. Это так называе­мый загрузочный блок (boot block), дополнительный блок (super block) и запас­ной (резервный) блок (spare block). Загрузочный блок (boot block) располагается в секторах с 0 по 15; он содержит имя тома, его серийный номер, блок парамет­ров BIOS, который содержит информацию о жестком диске, и программу начальной за­грузки. В дополнительном блоке (super block) содержится указатель на список битовых карт (bitmap blocklist). В этом списке перечислены все блоки на диске, в которых расположены би­товые карты, используемые для обнаружения свободных секторов. Также в до­полнительном блоке хранится указатель на список дефектных блоков (bad block list), указатель на группу каталогов (directory band), указатель на файловый узел (F‑node) корневого каталога, а также дата последней проверки раздела програм­мой CHKDSK. В списке дефектных блоков перечислены все поврежденные секто­ры (блоки) диска. Когда система обнаруживает поврежденный блок, он вносится в этот список и для хранения информации больше не используется. Кроме этого, в структуре super block содержится информация о размере «полосы».

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

Файлы и каталоги в HPFS базируются на фундаментальном объекте, называе­мом F-Node, в котором содержится информация о расположении файла и о его расширенных атрибутах. Эта структура характерна для HPFS и аналога в файловой системе FAT не имеет. Каждый файл и каталог диска имеет свой файловый узел F-Node. Каждый объект F-Node занимает один сектор и всегда располагается поблизости от своего файла или каталога (обычно – непосредственно перед файлом или ка­талогом). Объект F-Node содержит длину и первые 15 символов имени файла, специальную служебную информацию, статистику по доступу к файлу, расши­ренные атрибуты файла, список прав доступа и т. д.

Однако существенно больший (по сравнению с размещением Directory Band в середине логического диска) вклад в производительность HPFS дает использо­вание метода сбалансированных двоичных деревьев для хранения и поиска ин­формации о местонахождении файлов. Как известно, в файловой системе FAT каталог имеет линейную структуру, специальным образом не упорядоченную, поэтому при поиске файла требуется последовательно просматривать его с само­го начала. В HPFS структура каталога представляет собой сбалансированное де­рево с записями, расположенными в алфавитном порядке (рис. 3.7). Каждая за­пись, входящая в состав В-Тrее дерева, содержит атрибуты файла, указатель на соответствующий файловый узел, информацию о времени и дате создания фай­ла, времени и дате последнего обновления и обращения, длине данных, содержа­щих расширенные атрибуты, счетчик обращений к файлу, длине имени файла и само имя, и другую информацию.

Рис. 3.7. Сбалансированное двоичное дерево

 

Файловая система HPFS при поиске файла в каталоге просматривает только не­обходимые ветви двоичного дерева (В-Тrее). Такой метод во много раз эффек­тивнее, чем последовательное чтение всех записей в каталоге, что имеет место в системе FAT. Для того чтобы найти искомый файл в каталоге (точнее, указатель на его информационную структуру F-node), организованном на принципах сба­лансированных двоичных деревьев, большинство записей вообще читать не нуж­но. В результате для поиска информации о файле необходимо выполнить суще­ственно меньшее количество операций чтения диска.

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

HPFS относится к так называемым монтируемым файловым системам. Это оз­начает, что она не встроена в операционную систему, а добавляется к ней при не­обходимости. Файловая система HPFS устанавливается оператором IFS в файле CONFIG.SYS. Этот оператор всегда помещается в первой строке данного конфи­гурационного файла. В приводимом далее примере оператор IFS устанавливает файловую систему HPFS с кэшем в 2 Мбайт, длиной записи кэша в 8 Кбайт и ав­томатической процедурой проверки дисков С и D:

IFS=E \OS2\HPFS.IFS /CACHE:2048 /CRECL:4 /AUTOCHECK:CD