Если у меня есть 2 каталога, a и b, может кто-нибудь предложить удобный способ создания каталога, в котором, как представляется, содержится содержимое как a, так и b, без копирования файлов? На данный момент я использую ln -s * для загрузки ссылок sym, а затем удаляю ссылки sym, когда я закончу. Я бы предпочел, чтобы, если содержимое подкаталогов оказалось объединенным, и управление этим методом sym link может потребовать некоторых усилий.
Это нормально, если результирующий каталог доступен только для чтения в приложении.
ln -s a/ b
создаст символическую директорию,b
которая указывает наa
.Ответы:
Вы можете эффективно объединить каталоги с UnionFS , наложив два каталога (в данном контексте называемые ветвями) в одну точку монтирования.
Есть несколько реализаций UnionFS; UnionFsFuse является одним из более простых, так как это приложение (а не патч ядра).
На сайте есть ссылка на их архив. Компиляция исходного кода должна быть простой в большинстве дистрибутивов.
Например, в Ubuntu достаточно установить пакет unionfs-fuse , выполнив следующую команду:
После установки вы можете перейти к наложению каталогов. Есть множество вариантов. Я кратко объясню самые основные из них:
Команда
Наложение содержимого каталогов foo и bar в каталог баз . 1
Это наложение будет только для чтения; любая попытка создать или изменить файл в базе приведет к отказу в разрешении. ошибка. Тем не менее, вы все еще будете иметь возможность создавать и изменять файлы в Foo и бар себя.
Столкновения обрабатываются фиксированным образом: если файл существует в более высокой ветви ( foo ), он будет иметь преимущество перед файлом с тем же именем в нижней ветви ( столбце ).
Команда
делает foo доступным для записи и bar (только для чтения). Модификация файлов foo будет возможна, но модификация файлов бара не будет. Все вновь созданные файлы в базе появятся в foo .
Команда
похоже на последнюю команду. Опция copy on write (
cow
) приводит к тому, что попытка изменить файл bar внутри baz приведет к измененной копии файла в foo (или любой другой ветке для записи более высокого уровня).С помощью команды
все можно изменить. Новые файлы будут созданы в верхней ветке ( foo ).
Команда
позволяет изменять файлы bar внутри baz , но новые файлы создавать нельзя.
Команда
отменяет монтирование
Смотрите также: man unionfs-fuse
1 baz должен существовать до выполнения этой команды. Это относится и ко всем дальнейшим командам.
источник