it-консалтинг и аутсорсинг
что мы делаем контакты блог

APFS – что это такое и зачем?

Валерий Антонов 06.07.2017

5 июня 2017 года Apple анонсировала операционную систему macOS High Sierra, бета-версия которой доступна публично.
В новой системе поддерживается высокоэффективное кодирование видеоизображений HEVC и технологии виртуальной реальности. Представлен новый графический фреймворк Metal 2. И самое интересное – новая файловая система Apple File System или APFS, которая по умолчанию будет использоваться на всех новых маках с macOS High Sierra, и используется в новых версиях iOS, watchOS, tvOS.

Зачем вообще надо было обновлять файловую систему?
Во всех современных маках используется файловая система HFS+, представленная в Mac OS 8.1 в 1998 году. В свою очередь HFS+ основана на системе HFS, которой более тридцати лет! Когда она создавалась, компьютеры выглядели примерно так:

В те дни файловые системы разрабатывались для гибких и жестких дисков, когда размеры файлов исчислялись килобайтами и мегабайтами. Сегодня используются накопители SSD на флэш-памяти, а объем жестких дисков исчисляется терабайтами.
Меняются и требования. Файловая система ZFS, представленная Sun Microsystems в 2005 году, по сей день считается вполне современной. Ниже неполный список ее возможностей, которых в HFS+ нет:

  • контрольные суммы и коррекция ошибок — если происходит сбой на физическом уровне, файловая система это замечает и исправляет
  • мгновенные снимки файловой системы
  • точные данные о времени создания/изменения файлов — в HFS+ даты отслеживаются с точностью до секунды, хотя нынешние компьютеры за секунду могут совершить тысячи операций с данными
  • поддержка sparse-файлов – файлы-образы фиксированного размера будут занимать на диске не все отведенное для них место, а столько, сколько данных имеется на самом деле
  • поддержка дат после 6 февраля 2040-го года

Отдельного упоминания заслуживает реализация жестких ссылок в HFS+
Классической Mac OS жесткие ссылки (hard links) не требовались. Поддержка hard links была добавлена в Mac OS X, основанной на системе Unix. А Unix для работы жесткие ссылки требуются. Но для того, чтобы пользователи могли использовать и Mac OS 9, и Mac OS X на одном компьютере, в Apple придумали свой механизм: чтобы создать жесткую ссылку, HFS+ перемещает оригинал файла в скрытую директорию HFS+ Private Data, а оригинал заменяет жесткой ссылкой. Но увы, такая схема реализации может привести к потере данных.
Создатель ядра Linux, Линус Торвальдс, вообще назвал HFS+ “возможно худшей файловой системой”:

По-настоящему плохо не то, что HFS+ неидеальна, а то, что она создается неидеальной теми людьми, которые считают, что у них есть хорошие идеи.

Если это вполне очевидные вещи, почему решение было придумано только сейчас?
Apple давно известно, что HFS+ не отвечает современным требованиям, поэтому еще во времена Mac OS X Leopard велись работы над внедрением файловой системы ZFS. Изначально ZFS — разработка компании Sun Microsystems, которая была сделана для их собственной операционной системы, Solaris. Сегодня ZFS является торговой маркой Oracle Corporation.
Mac OS X – Unix система, как и Solaris. Примерно в 2005-2006 годах некоторые решения из Solaris были портированы в Mac OS X: DTrace, инструмент для отладки программ в реальном времени, откуда столь любимые админами opensnoop, iosnoop и куча других полезных команд. Была частично портирована и сама файловая система ZFS.
Но по неизвестной причине полноценная поддержка ZFS в Mac OS X так и не появилась. По слухам из-за того, что о появлении ZFS в Mac OS X объявил не Стив Джобс, а глава Sun Джонатан Шварц, И это несмотря на то, что к моменту релиза оставалось лишь добавить поддержку записи на диски, форматированные в ZFS. Позже Apple выпустила исходные коды для реализации ZFS на Mac OS X, что позволило энтузиастам собрать более полноценную версию файловой системы.

Так или иначе, но ZFS от Apple мы не получили, хотя сейчас доступна сторонняя открытая реализация ZFS, позволяющая пользоваться всеми достижениями последних лет разработки. К ее минусам можно отнести то, что операционная система не может быть установлена на том ZFS, медленную скорость чтения/записи и высокие требования к оперативной памяти.

Что нового в APFS
APFS – большой шаг вперед по сравнению с HFS+. Наконец-то мы получили современную и надежную файловую систему без наследия 80-х годов ХХ века и вот почему:

  • шифрование на уровне файлов и таблиц разделов, в то время как FileVault реализован на логическом уровне CoreStorage
  • полноценная поддержка Unicode. В HFS+ имена файлов и папок нормализуются, APFS хранит их в неизменном виде
  • снапшоты, или мгновенные снимки файловой системы для быстрых и эффектиных бэкапов
  • поддержка флеш-накопителей на уровне файловой системы, что значительно повышает производительность чтения/записи. APFS пишет данные так, как они будут расположены на флеш-накопителе, в то время как HFS+ всегда считает, что пишет на магнитный жесткий диск
  • мгновенный подсчет размера директории — в APFS размер директории хранится отдельно, а не подсчитывается каждый раз заново

Я ничего не понял. APFS лучше, чем ZFS?
Проще говоря, она “догоняет”. Конечно, в новой и “сырой” APFS нет многих функций, которые есть в хорошо отлаженной ZFS. С другой стороны, файловая система APFS создавалась как универсальное решение для всей линейки устройств от Apple, которое должно быть совместимо со всем оборудованием, иметь обратную совместимость и нормально работать как на iWatch, так и на Mac Pro. ZFS же предъявляет более высокие требования к железу: например, рекомендуется использовать не менее 8ГБ оперативной памяти, – поэтому использовать ее на iPhone вряд ли удастся. Поэтому ZFS рассматривается в основном как решение для серверов.

А что насчет сравнения APFS и HFS?
На developers.apple.com опубликовано сравнение форматов томов между файловыми системами.

Number of allocation blocks – Максимальное количество файлов
File IDs – Разрядность инод
Maximum file size – максимальный размер файла
Time stamp granularity – Точность отметки времени
Copy-on-writeКопирование при записи
Crash protected – Защита данных в случае обесточивания
File and directory clones – Клоны файлов и директорий
Snapshots – Снимки файловой системы
Space sharing – Тонкие копии
Native encryption – Встроенное шифрование
Sparse files – Разреженные файлы
Fast directory sizing – Быстрый подсчет размера папок

Так как APFS оптимизирована для SSD, скорость доступа к флеш-носителю будет выше, чем при использовании HFS+.
На жестких дисках прирост производительности будет минимальным. Мы провели тесты c обычным жестким диском, вот результаты:

One more thing
В APFS осталась одна логическая проблема, которая есть в HFS+: нечувствительность к регистру — с точки зрения операционной системы, файлы “Document.pages” и “DOCUMENT.pages” называются одинаково.
До появления спецификаций APFS мы все-таки считали, что новая файловая система будет чувствительна к регистру имен файлов, но оказалось, что это не так.
Чем это плохо? Представим себе ситуацию: вы запускаете банк-клиент, исполняемый файл внутри пакета Bank.app/Contents/MacOS/Bank заменен файлом с вредоносной нагрузкой, а оригинальный находится там же, но называется Bank.app/Contents/MacOS/BANK. Операционная система проверит подпись файла BANK, с которой все хорошо, а запустит вредоносный Bank, и ваши пароли для доступа к счетам попадут к злоумышленнику. Это лишь одна гипотетическая уязвимость, связанная с нечувствительностью к регистру. На самом деле их в разы больше.
Возможность установить macOS на чувствительную к регистру HFS+ есть, но многие программы будут работать некорректно.
С другой стороны, нечувствительная к регистру файловая система гораздо удобнее для неопытных пользователей.

В итоге
В целом от APFS ждали куда большего, но и эта реализация уже намного лучше, чем HFS+. Файловая система оптимизирована под SSD-диски и будет отлично работать на новых устройствах от Apple. Все это — неплохой задел на следующие тридцать лет.
А если Apple сдержит свое обещание и выложит спецификации APFS в открытый доступ, появится возможность частичной реализации APFS в Windows и Linux.