HFS+
HFS+ (Hierarchical File System Plus, также известная как HFS Extended и Mac OS Extended) — это файловая система, разработанная компанией Apple Inc. для использования в операционных системах macOS (ранее Mac OS X) и macOS Server. Она является эволюционным развитием более ранней файловой системы HFS (Hierarchical File System) и была представлена в 1998 году как часть операционной системы Mac OS 8.1. Основным назначением HFS+ было устранение ключевых ограничений предшественницы, в первую очередь — поддержка больших объёмов дискового пространства и файлов, а также использование Unicode для имён файлов, что позволило корректно работать с символами различных языков, включая кириллицу.
История
Предпосылки создания
Предшественница HFS+, файловая система HFS, была разработана в 1985 году для первых компьютеров Macintosh. Она использовала 16-битные адреса блоков, что ограничивало максимальный размер раздела 2 гигабайтами (ГБ) при стандартном размере блока 512 байт. С ростом объёмов жёстких дисков и появлением мультимедийных файлов (видео, аудио) это ограничение стало критическим. Кроме того, HFS использовала кодировку MacRoman для имён файлов, что не поддерживало символы многих языков, включая русский, и не позволяло использовать имена длиннее 31 символа.
Внедрение и развитие
HFS+ была анонсирована в 1998 году и дебютировала в Mac OS 8.1. Она стала основной файловой системой для всех последующих версий классической Mac OS (до Mac OS 9.2.2) и была унаследована операционной системой Mac OS X, выпущенной в 2001 году. В Mac OS X HFS+ получила ряд улучшений, включая поддержку журналирования (Journaling), которая была добавлена в Mac OS X 10.3 Panther (2003 год). Журналирование повысило надёжность системы, снизив риск повреждения данных при сбоях питания или системных ошибках.
В 2005 году, с выходом Mac OS X 10.4 Tiger, была добавлена поддержка расширенных атрибутов файлов (Extended Attributes), что позволило хранить метаданные, такие как теги, комментарии и информация о происхождении файла (например, откуда он был загружен). В 2007 году, с Mac OS X 10.5 Leopard, HFS+ получила поддержку сжатия файлов на уровне файловой системы (Compression), что позволяло экономить дисковое пространство без использования сторонних утилит.
Закат и замена
Несмотря на долгую историю, HFS+ имела ряд архитектурных недостатков, которые стали особенно заметны с появлением твердотельных накопителей (SSD) и увеличением объёмов данных. К ним относились: слабая поддержка контрольных сумм для данных, неэффективная работа с большим количеством мелких файлов, отсутствие встроенной поддержки снапшотов (снимков состояния) и шифрования на уровне отдельных файлов (шифрование было реализовано только на уровне всего тома через FileVault). В 2016 году, с выходом macOS Sierra (10.12), Apple представила новую файловую систему — Apple File System (APFS), которая стала основной для всех устройств под управлением iOS, macOS, tvOS и watchOS. Начиная с macOS High Sierra (10.13) в 2017 году, HFS+ была полностью заменена APFS на всех новых установках и при обновлении систем с твердотельными накопителями. На жёстких дисках (HDD) и в некоторых старых конфигурациях HFS+ продолжала использоваться до 2020-х годов, но в настоящее время практически вытеснена APFS.
Технические характеристики
Структура и организация
HFS+ использует B-деревья (Balanced Trees) для хранения каталогов и метаданных, что обеспечивает более быстрый поиск файлов по сравнению с линейными списками, применявшимися в HFS. Основные структуры данных включают:
- Каталоговый файл (Catalog File): B-дерево, содержащее записи обо всех файлах и папках на томе. Каждая запись включает имя файла (в кодировке UTF-16, до 255 символов), тип, создателя, временные метки, права доступа (POSIX) и указатели на экстенты (блоки данных).
- Файл экстентов (Extents Overflow File): B-дерево, которое хранит записи о расположении фрагментированных файлов. Если файл не помещается в первые 8 экстентов, записанных в каталоговом файле, дополнительные экстенты помещаются сюда.
- Файл атрибутов (Attributes File): B-дерево, добавленное в Mac OS X 10.4, для хранения расширенных атрибутов файлов.
- Файл журнала (Journal File): Хранит записи о транзакциях, что позволяет восстановить целостность тома после сбоя.
Ограничения и возможности
HFS+ поддерживает 32-битные адреса блоков, что теоретически позволяет адресовать до 2^32 блоков. При стандартном размере блока 4 КБ максимальный размер тома составляет 16 ТБ (терабайт). Максимальный размер файла также ограничен 2^63 байтами (8 ЭБ, эксабайт), что на практике ограничивается размером тома. Количество файлов на одном томе ограничено 2^31 (около 2,1 миллиарда).
Кодировка имён
Одним из ключевых улучшений HFS+ стала поддержка Unicode (UTF-16) для имён файлов. Это позволило использовать символы практически всех языков мира, включая кириллицу, иероглифы и специальные символы. Однако HFS+ использует нормализацию Unicode в форме NFD (Normalization Form Decomposition), что может приводить к проблемам совместимости с другими файловыми системами (например, NTFS или FAT32), которые используют форму NFC (Normalization Form Composition). Это выражается в том, что файл, скопированный с HFS+ на другую систему, может отображаться с иным именем или не открываться.
Журналирование
Журналирование (Journaling) в HFS+ является метаданно-ориентированным: оно записывает изменения в структуре каталогов и атрибутах, но не защищает сами данные файлов от повреждения. В случае сбоя система может восстановить целостность файловой структуры, но содержимое файлов, записываемых в момент сбоя, может быть потеряно. Журналирование поддерживается в двух режимах: только для метаданных (Metadata Journaling) и для данных (Data Journaling), но последний режим используется редко из-за снижения производительности.
Сравнение с другими файловыми системами
HFS+
HFS+ была основной файловой системой для macOS в течение почти 20 лет. Её преимуществами были:
- Полная поддержка метаданных macOS (например, ресурсные форки, типы и создатели файлов).
- Встроенная поддержка Unicode.
- Журналирование для повышения надёжности.
- Поддержка расширенных атрибутов и сжатия.
Недостатками являлись:
- Отсутствие контрольных сумм для данных (в отличие от ZFS или Btrfs).
- Устаревшая архитектура B-деревьев, не оптимизированная для SSD.
- Проблемы с фрагментацией на больших томах.
- Ограниченная поддержка снапшотов и клонирования.
APFS
APFS (Apple File System) была разработана как замена HFS+ и устранила многие её недостатки. Ключевые отличия:
- Поддержка контрольных сумм для метаданных (но не для данных по умолчанию).
- Встроенная поддержка снапшотов, клонирования и шифрования на уровне файлов.
- Оптимизация для флеш-накопителей (SSD) через использование технологии TRIM и copy-on-write.
- Более эффективная работа с большим количеством мелких файлов.
- Поддержка пространственных имён (sparse files) и быстрого изменения размера тома.
NTFS
NTFS (New Technology File System) — основная файловая система Windows. В отличие от HFS+, NTFS поддерживает:
- Контрольные суммы для метаданных (Master File Table).
- Сжатие и шифрование на уровне файлов (EFS).
- Жёсткие и символьные ссылки.
- Журналирование как метаданных, так и данных (в некоторых режимах).
Однако NTFS не имеет встроенной поддержки ресурсных форков и типов файлов Mac, что делает её менее удобной для использования в macOS без дополнительного программного обеспечения (например, Paragon NTFS или Tuxera NTFS). Чтение NTFS в macOS поддерживается нативно, но запись — только через сторонние драйверы.
Применение
Основное использование
HFS+ была стандартной файловой системой для всех компьютеров Macintosh с 1998 по 2017 год. Она использовалась для:
- Системных разделов macOS (загрузочные тома).
- Внешних жёстких дисков и флеш-накопителей, отформатированных для использования с macOS.
- Time Machine — встроенной утилиты резервного копирования macOS (до перехода на APFS).
Совместимость с другими ОС
- Windows: Windows не поддерживает HFS+ нативно. Для чтения и записи томов HFS+ в Windows необходимо устанавливать сторонние драйверы, такие как Paragon HFS+ или MacDrive. Без них том HFS+ отображается как неотформатированный.
- Linux: Ядро Linux поддерживает чтение HFS+ с версии 2.6, а запись — с версии 2.6.14 (2005 год). Однако запись на тома с включённым журналированием может быть нестабильной, поэтому рекомендуется отключать журналирование перед монтированием в Linux.
- macOS: macOS полностью поддерживает HFS+ как для чтения, так и для записи, включая все расширенные функции (журналирование, сжатие, расширенные атрибуты).
Интересные факты
- Кодовое имя: Внутреннее кодовое имя проекта HFS+ было «Sequoia», в честь дерева секвойи, символизирующего рост и развитие.
- Ресурсные форки: HFS+ унаследовала от HFS поддержку ресурсных форков — специальных частей файла, хранящих иконки, локализации и другие метаданные. В современных версиях macOS эта функция считается устаревшей и заменена расширенными атрибутами и пакетами (bundles).
- Проблемы с датами: В HFS+ дата создания файла хранится с точностью до одной секунды, а дата модификации — до 1/60 секунды. Однако из-за использования 32-битного счётчика времени, основанного на 1 января 1904 года, HFS+ не может корректно обрабатывать даты после 6 февраля 2040 года (проблема «2040 года»).
- Совместимость с APFS: При обновлении macOS с HFS+ на APFS все данные сохраняются, но обратное преобразование (из APFS в HFS+) невозможно без полного форматирования.
Источники
- Apple Inc. «Mac OS X Server File System Administration Guide» (2005).
- Apple Inc. «Technical Note TN1150: HFS Plus Volume Format» (2004).
- Singh, Amit. «Mac OS X Internals: A Systems Approach» (2006).
- Документация к ядру Linux: «Documentation/filesystems/hfsplus.txt».
- Статья «HFS+» в англоязычной Википедии (версия от 2023 года).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →