HPFS
HPFS (High Performance File System, «высокопроизводительная файловая система») — это файловая система, разработанная компанией IBM совместно с Microsoft для операционной системы OS/2. Она была представлена в 1989 году как замена более ранней файловой системы FAT, ориентированной на однозадачные среды и малые объёмы данных. HPFS обеспечивает улучшенную производительность при работе с большими дисками (более 512 МБ), поддерживает длинные имена файлов (до 254 символов), расширенные атрибуты и кэширование данных, что делает её одной из первых файловых систем, предназначенных для многозадачных многопользовательских систем.
История
Предпосылки создания
В середине 1980-х годов операционная система MS-DOS и её файловая система FAT столкнулись с ограничениями, связанными с ростом объёмов жёстких дисков. FAT16 поддерживала максимальный размер раздела до 2 ГБ, а размер кластера мог достигать 64 КБ, что приводило к неэффективному использованию дискового пространства. Имена файлов были ограничены форматом «8.3» (8 символов имени, 3 символа расширения). С появлением OS/2 1.2 (1988 год), которая требовала более мощной файловой системы для многозадачной работы и серверных приложений, возникла необходимость в новой разработке.
Разработка и внедрение
HPFS была создана группой инженеров IBM и Microsoft, работавших над OS/2. Изначально проект назывался «H-PFS» (High-Performance File System), а первая реализация появилась в OS/2 1.2. IBM и Microsoft разделились в 1990 году, после чего Microsoft сосредоточилась на Windows NT, где использовала свою файловую систему NTFS, а IBM продолжила развивать HPFS в версиях OS/2 2.x и 3.x (Warp). HPFS также поддерживалась в ранних версиях Windows NT (до 3.51 включительно), но к выходу Windows NT 4.0 (1996 год) поддержка была полностью прекращена, так как Microsoft сочла её устаревшей.
Архитектура и устройство
Структура диска
HPFS основывается на концепции секторов и extent-блоков. Основные элементы:
- Загрузочный блок (Boot Block): содержит запись о точках монтирования и информацию о геометрии диска. Находится в начале раздела.
- Суперблок (Super Block): хранит метаданные — количество секторов, количество свободных блоков, указатели на корневой каталог. Расположен в логическом секторе 16 (смещение 8192 байта от начала раздела).
- Блок восстанавливаемости (Spare Block): используется для отказоустойчивости при сбоях питания.
- Группы дорожек (allocation bands): дисковое пространство разбивается на зоны (обычно 8 КБ), внутри которых кластеры распределяются локально, чтобы уменьшить фрагментацию и время перемещения головок.
- B+-деревья (B+Trees): структуры данных для индексации каталогов и поиска файлов. В отличие от FAT, где каталог — линейный список, B+-деревья обеспечивают логарифмическое время поиска.
Имена файлов и расширенные атрибуты
HPFS поддерживает имена длиной до 254 символов (в кодировке OEM или Unicode в зависимости от версии). Регистр символов сохраняется, но не различается (HPFS не чувствительна к регистру — «File.txt» и «file.txt» считаются одним файлом). Для каждого файла можно задать расширенные атрибуты (Extended Attributes, EA) — метаданные, которые позволяют хранить, например, иконки, комментарии, информацию о программе-владельце, тип файла (ассоциацию). EA хранятся в отдельной области диска (EA Data Set) и могут быть до 64 КБ на файл (в OS/2 2.x — до 256 МБ на весь раздел).
Кластеризация
Размер кластера в HPFS динамический и может быть 1, 2, 4, 8, 16, 32, 64, 128 или 256 секторов (512 байт на сектор). Для дисков до 256 МБ рекомендуется кластер 1 сектор, для 512 МБ — 2 сектора и т.д. Максимальный размер раздела — до 64 ГБ (при размере кластера 256 секторов). Фрагментация контролируется с помощью extent-блоков: файл может состоять из нескольких extent-сегментов, и для каждого хранится его начальный сектор и длина. Это повышает скорость чтения по сравнению с FAT, где фрагментированные файлы требуют множества случайных обращений.
Производительность и преимущества
Кэширование
HPFS использует динамическое кэширование в оперативной памяти: часто используемые секторы каталогов и данных хранятся в кэше (по умолчанию 512 КБ, может увеличиваться до доступной памяти). Это снижает количество обращений к диску при многозадачной работе.
Оптимизация для многозадачности
Система поддерживает «ленивую запись» (lazy write) — данные записываются на диск с отсрочкой, что улучшает производительность фоновых операций. В случае сбоя питания используется протокол восстановления: блок восстанавливаемости содержит журнал операций, по которому можно откатить незавершённые транзакции.
Поддержка больших дисков
HPFS эффективно работает на дисках объёмом от 512 МБ до 64 ГБ, что было значительным прогрессом по сравнению с FAT16, где раздел более 2 ГБ требовал разбиения на логические диски.
Применение
OS/2
Основная область применения HPFS — операционные системы семейства OS/2: версии 1.2, 1.3, 2.x (1992), 3.x (Warp, 1994) и eComStation (2001). На системах с OS/2 HPFS использовалась для системного раздела, для серверов баз данных (например, IBM DB2), файловых серверов и рабочих станций.
Windows NT
Windows NT 3.1, 3.5 и 3.51 поддерживали HPFS как альтернативу NTFS и FAT. Однако Microsoft прекратила поддержку в Windows NT 4.0, сославшись на переход на собственную NTFS и сложности с лицензированием.
Другие системы
HPFS была портирована в Linux (через модули ядра, например, hpfs), что позволяло монтировать разделы OS/2 в Unix-подобных средах. В современном Linux модуль HPFS объявлен устаревшим (начиная с ядра 4.x). Поддержка также была в некоторых BSD-системах и в Haiku (проект-последователь BeOS).
Критика и недостатки
Ограничения
- Журналирование: HPFS не является журналируемой файловой системой в полном смысле слова. Восстановление после сбоя возможно, но с потерей данных, которые не были записаны в суперблок. Это делает её ненадёжной для серверов с высокой интенсивностью записи.
- Фрагментация системных областей: суперблок и B+-деревья расположены в начале диска, что при длительной работе приводит к рассредоточению метаданных.
- Максимальное количество файлов: ограничено 2^32 (4,3 млрд), но на практике 2^16 (65536) файлов в каталоге вызывают серьёзное падение производительности.
- Имена файлов в OEM: в ранних версиях HPFS не поддерживала Unicode, что затрудняло работу с нелатинскими символами (кириллица, иероглифы). В OS/2 Warp 3.0 (1994) добавлена поддержка Unicode через расширенные атрибуты, но не во всех реализациях.
Сравнение с NTFS
NTFS, разработанная Microsoft для Windows NT, превзошла HPFS по ряду параметров: журналирование всех операций (через $LogFile), сжатие файлов на лету, шифрование (EFS), поддержка разрешений (ACL), гораздо большие объёмы дисков (до 16 ЭБ) и имена файлов длиной до 32 767 символов (в NTFS 3.1). NTFS также более устойчива к сбоям питания. HPFS проиграла конкуренцию во многом из-за коммерческого решения Microsoft прекратить её поддержку.
Современное состояние
HPFS почти не используется в 2020-х годах. Основные причины — доминирование Windows с NTFS и Linux с ext4, а также исчезновение OS/2 как платформы. Последняя коммерческая версия OS/2 — eComStation 2.1 (2011). Существует Open Source-проект ArcaOS (с 2017 года), который базируется на OS/2 и поддерживает HPFS, но для хранения данных в современных условиях (диски более 2 ТБ) рекомендуются сторонние решения на ext4 или NTFS. Поддержка HPFS в ядре Linux полностью удалена в версии 5.15 (2021 год).
Источники
- «OS/2 2.0 Technical Reference», IBM Corporation, 1992.
- «File Systems in OS/2: HPFS and FAT», Microsoft OS/2 SDK, 1989.
- «Inside Windows NT: File System», Microsoft Press, 1993.
- Tanenbaum, A., «Modern Operating Systems», 4th ed., 2014 (раздел о файловых системах).
- «HPFS filesystem — Linux kernel documentation», kernel.org, версия 4.x (архив).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →