3

Если у меня есть 2 каталога, a и b, может кто-нибудь предложить удобный метод создания каталога, в котором, как представляется, содержится содержимое как a, так и b, без копирования файлов? На данный момент я использую ln -s * для загрузки ссылок sym, а затем по завершении удаляю ссылки sym. Я бы предпочел, хотя, если содержимое подкаталогов оказалось объединенным, и управление этим методом sym link может потребовать некоторых усилий.

Это нормально, если результирующий каталог доступен только для чтения в приложении.

1 ответ1

4

Вы можете эффективно объединить каталоги с 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 должен существовать до выполнения этой команды. Это относится и ко всем дальнейшим командам.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .