Вы можете эффективно объединить каталоги с UnionFS , наложив два каталога (в данном контексте называемые ветвями) в одну точку монтирования.
Есть несколько реализаций UnionFS; UnionFsFuse является одним из более простых, так как это приложение (а не патч ядра).
На сайте есть ссылка на их архив. Компиляция исходного кода должна быть простой в большинстве дистрибутивов.
Например, в Ubuntu достаточно установить пакет unionfs-fuse , выполнив следующую команду:
sudo apt-get install unionfs-fuse
После установки вы можете перейти к наложению каталогов. Есть множество вариантов. Я кратко объясню самые основные из них:
Команда
unionfs-fuse foo:bar baz
накладывает содержимое каталогов foo и bar в каталог баз. 1
Это наложение будет только для чтения; любая попытка создать или изменить файл в базе приведет к отказу в разрешении. ошибка. Тем не менее, вы все еще будете иметь возможность создавать и изменять файлы в Foo и бар себя.
Столкновения обрабатываются фиксированным образом: если файл существует в более высокой ветви (foo), он будет иметь преимущество перед файлом с тем же именем в нижней ветви (столбце).
Команда
union-fuse foo=RW:bar=RO baz
делает foo доступным для записи и bar (только для чтения). Изменение файлов foo будет возможно, но изменение файлов бара не будет. Все вновь созданные файлы в базе появятся в foo.
Команда
union-fuse -ocow foo=RW:bar=RO baz
похоже на последнюю команду. Опция копирования при записи (cow
) приводит к тому, что попытка изменить файл bar внутри baz приведет к измененной копии файла в foo (или любой другой ветке для записи более высокого уровня).
С помощью команды
union-fuse foo=RW:bar=RW baz
все можно изменить. Новые файлы будут созданы в верхней ветке (foo).
Команда
union-fuse foo=RO:bar=RW baz
позволяет изменять файлы bar внутри baz, но новые файлы создавать нельзя.
Команда
sudo umount baz
отменяет монтирование
Смотрите также: man unionfs-fuse
1 baz должен существовать до выполнения этой команды. Это относится и ко всем дальнейшим командам.