HFS Plus или HFS+ (также известная как Mac OS Extended или HFS Extended ) — журналируемая файловая система, разработанная Apple Inc. Она заменила иерархическую файловую систему (HFS) в качестве основной файловой системы компьютеров Apple с выпуском Mac OS 8.1 в 1998 году . HFS+ продолжала оставаться основной файловой системой Mac OS X , пока не была заменена на Apple File System (APFS), выпущенную с macOS High Sierra в 2017 году. HFS+ также является одним из форматов, поддерживаемых цифровым музыкальным проигрывателем iPod .
По сравнению со своим предшественником HFS , также называемым Mac OS Standard или HFS Standard, HFS Plus поддерживает гораздо большие файлы (адреса блоков имеют длину 32 бита вместо 16 бит) и использование Unicode (вместо Mac OS Roman или любого из нескольких других наборов символов) для именования элементов. Как и HFS, HFS Plus использует B-деревья для хранения большинства метаданных тома , но в отличие от большинства файловых систем, поддерживающих жесткие ссылки , HFS Plus поддерживает жесткие ссылки на каталоги. HFS Plus допускает имена файлов длиной до 255 символов и файлы с n-разветвлениями , аналогичные NTFS , хотя до 2005 года почти ни одно системное программное обеспечение не использовало преимущества разветвлений, кроме разветвления данных и разветвления ресурсов . HFS Plus также использует полную 32-битную таблицу отображения распределения вместо 16 бит HFS, что улучшает использование пространства на больших дисках.
HFS+, находящаяся в разработке под кодовым названием Sequoia [5], была представлена 19 января 1998 года в выпуске Mac OS 8.1 . [2]
С выпуском обновления Mac OS X 10.2.2 11 ноября 2002 года Apple добавила дополнительные функции журналирования в HFS Plus для повышения надежности данных. Эти функции были доступны через графический интерфейс пользователя, с помощью приложения Disk Utility в Mac OS X Server, но были доступны только через командную строку в стандартном клиенте для рабочего стола. [6]
С Mac OS X v10.3 все тома HFS Plus на всех компьютерах Mac были настроены на журналирование по умолчанию. В системе том HFS Plus с журналом идентифицируется как HFSJ .
Mac OS X 10.3 также представила еще одну версию HFS Plus под названием HFSX . Тома HFSX почти идентичны томам HFS Plus, за исключением того, что они никогда не окружены HFS Wrapper, что типично для томов HFS Plus, и они опционально поддерживают чувствительность к регистру для имен файлов и папок. Тома HFSX можно распознать по двум записям в заголовке тома, значению HX в поле подписи и 5 в поле версии. [2]
Mac OS X 10.3 также ознаменовала принятие Apple декомпозиции Unicode 3.2, заменившей декомпозицию Unicode 2.1, использовавшуюся ранее. Это изменение вызвало проблемы у разработчиков, пишущих программное обеспечение для Mac OS X. [7]
В Mac OS X 10.3 представлен ряд методов, призванных избежать фрагментации файлов в HFS+. [8]
В Mac OS X 10.4 Apple добавила поддержку записей Inline Attribute Data, что было частью реализации HFS Plus в Mac OS X по крайней мере с версии 10.0 , но всегда помечалось как «зарезервировано для будущего использования». [9] До выпуска Mac OS X Server 10.4 HFS Plus поддерживала только стандартные разрешения файловой системы UNIX ; однако в версии 10.4 появилась поддержка безопасности файлов на основе списков управления доступом , которая обеспечивает более богатый механизм определения разрешений файлов и также разработана для полной совместимости с моделями разрешений файлов на других платформах, таких как Microsoft Windows XP и Windows Server 2003. [ 10]
В Mac OS X Leopard 10.5 жесткие ссылки на каталоги были добавлены как фундаментальная часть Time Machine.
В Mac OS X Snow Leopard 10.6 сжатие HFS+ было добавлено с помощью Deflate (Zlib). В системах с открытым исходным кодом и некоторых других областях это называется AppleFSCompression или decmpfs. Сжатые данные могут храниться либо в расширенном атрибуте, либо в ресурсной ветке. При использовании API сторонних разработчиков AppleFSCompression не всегда полностью прозрачен. [11] В OS X 10.9 были представлены два новых алгоритма: LZVN (libFastCompression) и LZFSE .
В Mac OS X Lion 10.7 в операционную систему было добавлено логическое шифрование томов (известное как FileVault 2 ). Это дополнение к операционной системе никоим образом не изменило логическую структуру файловой системы. Менеджер логических томов Apple известен как Core Storage, и его шифрование на уровне тома может применяться к файловым системам, отличным от HFS Plus. При наличии соответствующего оборудования и шифрование, и дешифрование должны быть прозрачными.
Тома HFS Plus делятся на сектора (называемые логическими блоками в HFS), которые обычно имеют размер 512 байт. Затем эти сектора группируются в блоки выделения, которые могут содержать один или несколько секторов; количество блоков выделения зависит от общего размера тома. HFS Plus использует большее значение для адресации блоков выделения, чем HFS, 32 бита вместо 16 бит; это означает, что он может получить доступ к 4 294 967 296 (= 2 32 ) блокам выделения, а не к 65 536 (= 2 16 ) блокам выделения, доступным HFS. [2] Когда диски были маленькими, это не имело большого значения, но с появлением дисков большей емкости это означало, что наименьший объем пространства, который мог занимать любой файл (один блок выделения), становился чрезмерно большим, что приводило к потере значительного количества пространства. Например, на диске объемом 1 ГБ размер блока распределения в HFS составляет 16 КБ, поэтому даже файл размером 1 байт займет 16 КБ дискового пространства. В результате система HFS Plus значительно улучшает использование пространства на больших дисках.
Имена файлов и папок в HFS Plus также кодируются в UTF-16 [12] и нормализуются до формы, очень похожей на форму нормализации Unicode D (NFD) [13] (что означает, что предварительные символы, такие как «å», разлагаются в имени файла HFS+ и, следовательно, считаются двумя кодовыми единицами [14] , а UTF-16 подразумевает, что символы из-за пределов базовой многоязыковой плоскости также считаются двумя кодовыми единицами в имени файла HFS+). HFS Plus допускает имена файлов длиной до 255 кодовых единиц UTF-16.
Раньше тома HFS Plus были встроены в стандартную файловую систему HFS. Это было постепенно отменено переходом Tiger на Intel Mac, где файловая система HFS Plus не была встроена в оболочку. Оболочка была разработана для двух целей: она позволяла компьютерам Macintosh без поддержки HFS Plus в их ПЗУ загружать тома HFS Plus, а также она была разработана, чтобы помочь пользователям перейти на HFS Plus, включив минимальный том HFS с доступным только для чтения файлом под названием Where_have_all_my_files_gone? , объясняя пользователям с версиями Mac OS 8.0 и более ранними без HFS Plus, что для тома требуется система с поддержкой HFS Plus. Исходный том HFS содержит подпись и смещение к встроенному тому HFS Plus в заголовке тома. Все блоки распределения в томе HFS, которые содержат встроенный том, отображаются из файла распределения HFS как плохие блоки . [2]
Среди файловых систем, используемых в системах Unix, стоит отметить, что HFS Plus не поддерживает разреженные файлы .
Типичный том HFS Plus состоит из девяти структур: [2]
В HFS Plus отсутствуют некоторые функции, считающиеся основными в современных файловых системах, таких как ZFS и NTFS . [16] Контрольные суммы данных являются наиболее часто упоминаемой отсутствующей функцией. [17]
Помимо контрольного суммирования, в HFS+ отсутствуют следующие функции современных файловых систем:
HFS Plus не был разработан для Unix-подобных систем, поэтому такие функции, как разрешения файловой системы и жесткие ссылки, пришлось модернизировать, когда Apple перешла на Mac OS X. [17]
Ядро Linux включает модуль hfsplus [19] для монтирования файловых систем HFS+ для чтения и записи. HFS+ fsck и mkfs были перенесены в Linux и являются частью пакета hfsprogs. [20]
В 2009 году было диагностировано, что эти драйверы повреждают диски HFS+ емкостью более 2 ТБ. [21] В результате дистрибутивы Linux, такие как Debian и Ubuntu, перестали поддерживать монтирование дисков HFS+ или разделов объемом более 2 ТБ. [22] По состоянию на февраль 2011 года [обновлять]ведутся работы по снятию этого ограничения. [23] [ требуется обновление ]
В текущем драйвере HFS+ Linux журналирование должно быть отключено для безопасной записи данных на раздел HFS+. При условии, что раздел не используется программным обеспечением Time Machine от Apple , журналирование можно отключить в macOS: [24] Используя Disk Utility в OS X Yosemite, пользователь может удерживать Alt/Option и нажать «Отключить журналирование» в меню Файл, предварительно выбрав смонтированный раздел.
Раздел HFS+ с включенным журналированием может быть принудительно смонтирован с доступом на запись в Linux, но это не поддерживается и неразумно. [24] [25]
Проект Google Summer of Code по внедрению поддержки записи в журналируемый HFS+ [26] был принят Linux Foundation в 2011 году, но не был завершен в то время и все еще находится в процессе разработки. Прогресс и улучшения драйвера HFS+, включая некоторые обновления поддержки журналирования, время от времени публикуются в списке рассылки linux-fsdevel [27] .
По состоянию на июль 2011 года [обновлять]Paragon Software Group предоставила драйверы ядра, которые обеспечивают полный доступ на чтение и запись к журналируемым томам HFS+. [28] Продукт представляет собой фирменную реализацию HFS+ на основе фирменной библиотеки UFSD компании Paragon. Существуют как бесплатная, так и платная версии драйвера, и они включают утилиту для проверки и восстановления томов HFS+. Согласно онлайн-документации (бесплатная версия [29] или платная версия [30] ), как бесплатная, так и платная версии в настоящее время поддерживают ядра Linux от 2.6.36 до 4.12.x. Единственными официально поддерживаемыми дистрибутивами Linux являются Ubuntu , Debian , Fedora Linux , Rocky Linux , Red Hat Enterprise Linux , OpenSUSE и CentOS . [31]
По состоянию на май 2012 года Apple выпустила только драйверы HFS+ только для чтения для Windows XP, Windows Vista и Windows 7 как часть программного обеспечения Boot Camp в Mac OS X 10.6 . [32] Это означает, что пользователи этих систем могут читать данные на диске HFS+, но не записывать на них. Microsoft создала драйвер HFS+ для Xbox 360 в основном для чтения iPod в формате HFS+. [ требуется цитата ]
Бесплатное программное обеспечение с открытым исходным кодом jHFSplus, основанное на HFSExplorer и jpfm, можно использовать для монтирования разделов hfs/hfs+ как виртуальных папок, доступных только для чтения. [33]
Существует бесплатный плагин для Total Commander , который может читать, среди прочего, файловые системы HFS и HFS+. [34]
DiskInternals Linux Reader можно использовать для извлечения/сохранения папок/файлов с жестких дисков/разделов HFS и HFS+. [35]
Коммерческий продукт MacDrive также доступен для монтирования приводов HFS и HFS+, оптических дисков и других носителей в проводнике Windows и позволяет как читать, так и записывать данные на том, а также восстанавливать и форматировать диски Mac. [36]
Коммерческий продукт HFS+ для Windows от Paragon обеспечивает полное чтение и запись, а также управление дисками во всех версиях Windows от Windows XP до Windows Server 2008. [37]
Бесплатная ( GPL ) альтернатива — HFSExplorer , написанная Эриком Ларссоном. [38] HFSExplorer — это приложение Java для просмотра и извлечения файлов из тома HFS+ (Mac OS Extended) или тома HFSX (Mac OS Extended, с учетом регистра). Том может быть расположен либо на физическом диске, либо в различных форматах образа диска Apple и разреженного образа диска , либо в необработанном дампе файловой системы. Однако HFSExplorer — это решение только для чтения; он не может записывать на тома в формате HFS.