Введение

Unionfs — это служба файловой системы для Linux, FreeBSD и NetBSD, реализующая монтирование объединением (union mount) для других файловых систем. Она позволяет прозрачно накладывать файлы и каталоги отдельных файловых систем, известных как ветви, формируя единую согласованную файловую систему. Содержимое каталогов с одинаковым путем в объединенных ветвях будет отображаться вместе в едином объединенном каталоге в новой виртуальной файловой системе. При монтировании ветвей указывается приоритет одной ветви над другой. Таким образом, если обе ветви содержат файл с одинаковым именем, приоритет получает один из них. Различные ветви могут быть файловыми системами только для чтения или для чтения/записи, так что записи в виртуальную объединенную копию направляются в конкретную реальную файловую систему. Это позволяет файловой системе казаться доступной для записи, но при этом не допускает фактического изменения содержимого файловой системы, что также известно как копирование при записи. Это может быть полезно, когда носитель физически доступен только для чтения, например, в случае с Live CD. Unionfs был первоначально разработан Эрезом Задоком и его командой в Университете Стоуни Брук.

Применение

В Knoppix возможно объединение файловой системы на CD-ROM или DVD с файловой системой, содержащейся в файле образа, называемом knoppix.img (knoppix data.img для Knoppix 7), на записываемом носителе (например, USB-накопителе), при этом приоритет отдается записываемому носителю перед файловой системой только для чтения. Это позволяет пользователю изменять любые файлы в системе, при этом новые файлы сохраняются в образе и прозрачно используются вместо файлов на CD. Unionfs также можно использовать для создания единого общего шаблона для нескольких файловых систем или в целях безопасности. Иногда его применяют как систему создания моментальных снимков. Docker использует файловые системы, вдохновленные Unionfs, такие как Aufs, для организации слоев образов Docker. По мере выполнения операций над базовым образом создаются и документируются слои, каждый из которых полностью описывает, как воссоздать эти операции. Эта стратегия обеспечивает легковесность образов Docker, поскольку распространяются только обновления слоев (в отличие от полных виртуальных машин, например). UbuntuLTSP, реализация проекта Linux Terminal Server Project для Ubuntu, использует Unionfs при загрузке по PXE тонких или толстых клиентов.

Другие варианты реализации

Unionfs для Linux имеет две версии. Версия 1.x – это самостоятельная версия, которую можно собрать как модуль. Версия 2.x – более новая, переработанная и перереализованная. aufs является альтернативной версией unionfs. overlayfs, разработанный Миклосом Серэди, использовалась в OpenWRT, рассматривалась Ubuntu и была включена в основное ядро Linux 26 октября 2014 года после многих лет разработки и обсуждений для версии 3.18 ядра. unionfs fuse – независимый проект, реализованный как программа файловой системы в пользовательском пространстве, а не как модуль ядра или патч. Как и Unionfs, он поддерживает копирование при записи и ветви только для чтения или чтения/записи. Операционная система Plan 9 от Bell Labs широко использует объединяемые монтирования для создания пользовательских пространств имен для пользователей или процессов. Объединяемые монтирования также доступны в BSD с 1995 года. В GNU Hurd имеется реализация Unionfs. По состоянию на январь 2008 года она работает, но приводит к точке монтирования, доступной только для чтения. mhddfs работает аналогично Unionfs, но позволяет балансировать файлы между дисками с наибольшим объемом свободного места. Она реализована как файловая система в пользовательском пространстве. mergerfs – это union-файловая система на основе FUSE, которая предлагает различные политики доступа и записи файлов, а также другие расширенные функции (xattrs, управление смешанными дисками RO и RW, link CoW и т.д.). Sun Microsystems представила первую реализацию многоуровневой файловой системы со стековой структурой, копированием при записи и маскировкой файлов (скрытие файлов в нижних слоях от верхних слоев) в составе Translucent File Service в SunOS 3, примерно в 1986 году. JailbreakMe 3.0, инструмент для джейлбрейка iOS-устройств, выпущенный в июле 2011 года, использует техники unionfs для ускорения процесса установки модификации операционной системы.