2

Поэтому я попытался объединить два каталога вместе и потерпел неудачу. Вот расшифровка того, что я пробовал, и, основываясь на уроках и информации, которую я видел по поиску, я почти уверен, что это должно сработать. Я думаю, что aufs2, как правило, предпочтительнее, и есть также mddhfs, но я не могу найти никакой документации по последнему, а первого нет в репозиториях (кроме того, я не хочу устанавливать build-essentials и т.д., Потому что я действительно хочу их установить в объединении, а не в основной файловой системе).

Во всяком случае, я настроил следующий тестовый сценарий

user@host:~$ cd Desktop
user@host:~/Desktop$ mkdir test
user@host:~/Desktop$ cd test
user@host:~/Desktop/test$ mkdir test1
user@host:~/Desktop/test$ mkdir test2
user@host:~/Desktop/test$ mkdir test3
user@host:~/Desktop/test$ echo "this is file A" > test1/fileA.txt
user@host:~/Desktop/test$ echo "this is file B" > test2/fileB.txt

Затем я объединяю каталоги test1 и test2 как таковые

unionfs-fuse /home/user/Desktop/test/test1=RW:/home/user/Desktop/test/test2=RO /home/user/Desktop/test/test3

И я получаю ожидаемый результат

user@host:~/Desktop/test$ unionfs-fuse /home/user/Desktop/test/test1=RW:/home/user/Desktop/test/test2=RO /home/user/Desktop/test/test3
user@host:~/Desktop/test$ ls -l test3
-rw-r--r-- 1 user user 14 2010-06-25 11:34 fileA.txt
-rw-r--r-- 1 user user 14 2010-06-25 11:34 fileB.txt

Затем я размонтирую новый каталог

user@host:~/Desktop/test$ sudo umount test3

А потом попробуй это

user@host:~/Desktop/test$ unionfs-fuse /home/user/Desktop/test/test1=RW:/home/user/Desktop/test/test2=RO /home/user/Desktop/test/test1
fuse: mountpoint not empty
fuse: if you are sure this is safe, use the 'nonempty' mount option

Что я определенно не ожидал. Так что я понял, что, черт возьми, давай попробуем!

user@host:~/Desktop/test$ unionfs-fuse /home/user/Desktop/test/test1=RW:/home/user/Desktop/test/test2=RO /home/user/Desktop/test/test1 -o nonempty
user@host:~/Desktop/test$ ls -l test1

Первая команда выполняется, а вторая зависает ... Любой хочет объяснить, почему? Я думал, что unionfs позволил объединить две директории в одну из двух в качестве точки монтирования. По крайней мере, так указывалось в нескольких уроках unionfs. Есть ли способ сделать то, что я хочу? Некоторые другие варианты?

1 ответ1

1

Вот пример использования, который был успешно протестирован в системе (K)Ubuntu (Linux step3 3.13.0-63-generic # 103-Ubuntu SMP x86_64 x86_64 x86_64 GNU/Linux).

Все отмеченные команды были выполнены с правами root. Пожалуйста, подтвердите, что приведенное ниже является лишь своего рода проверкой концепции, приведите аргументы к командам в соответствии с вашими индивидуальными потребностями.

Для стандартной (K) установки Ubuntu, пожалуйста, убедитесь, что пакет «unionfs-fuse» установлен - его можно установить с помощью командной строки «sudo apt-get install unionfs-fuse».

Например, следующие инструкции описывают, как наложить существующий непустой (домашний каталог пользователя) "на себя", чтобы все изменения сохранялись постоянными в каталоге (случай 1.) или в любом случае отбрасывались (случай 2.).

"Хитрость" заключается в том, чтобы сначала "смонтировать привязку" каталога для наложения на другой, а затем использовать объединенную файловую систему для объединения неизменяемого оригинала с каталогом "изменений".

Файлы, созданные или измененные в "исходном" каталоге, будут доступны только в каталоге "изменений". Файлы, созданные в "перемещенном" каталоге, будут постоянно доступны в "исходном" каталоге, но не в "изменениях".

  1. Сделайте (не пустой) dir (например, /home /user1) недоступным для записи, чтобы все изменения и все вновь созданные файлы оставались постоянными (в /tmp /home_user1_changes)

1.1 Создание вспомогательных каталогов

1.1.1 mkdir /tmp /home_user1_changes

1.1.2 mkdir /tmp /home_user1_relocated

1.2 Используйте опцию mount bind для монтирования каталога в директорию "overlay unwritable" (/tmp/home_user1_relocated)

1.2.1 mount --bind /home /user1 /tmp /home_user1_relocated

1.3. Использовать файловую систему unionfs для объединения перемещенного исходного содержимого с содержимым директории "changes".

1.3.1 unionfs-fuse -o cow -o allow_other -o use_ino -o nonempty /tmp /home_user1_changes = RW:/tmp /home_user1_relocated = RO /home /user1

[теперь все изменения в /home /user1 сохраняются в /tmp /home_user1_changes, но не в "overlaid" /home /user1]

1.4 Откат

1.4.1 umount /home /user1

1.4.2 umount /tmp /home_user1_relocated

1.4.3 опционально проверять файлы в /tmp /home_user1_changes

1.4.4 опционально: rm -fR /tmp /home_user1_changes, rmdir /tmp /home_user1_relocated

[/home/user1 в состоянии как и прежде 1., изменения с тех пор находятся в /tmp /home_user1_changes]

  1. Сделайте (не пустой) dir (например, /home /user1) недоступным для записи, чтобы все изменения и все вновь созданные файлы сохранялись только временно (в /tmp /home_user1_changes)

2.1 Создание вспомогательных каталогов

2.1.1 mkdir /tmp /home_user1_changes

2.1.2 mkdir /tmp /home_user1_relocated

2.2 Используйте опцию mount bind для монтирования каталога в директорию "overlay unwritable" (/tmp/home_user1_relocated)

2.2.1 mount --bind /home /user1 /tmp /home_user1_relocated

2.3 Принудительно сделать каталог /tmp /home_user1_changes временным

2.3.1 mount -t tmpfs -o size = 20% none /tmp /home_user1_changes

2.4. Используйте файловую систему unionfs, чтобы объединить перемещенное исходное содержимое с содержимым директории "changes".

2.4.1 unionfs-fuse -o cow -o allow_other -o use_ino -o nonempty /tmp /home_user1_changes = RW:/tmp /home_user1_relocated = RO /home /user1

[теперь все изменения в /home /user1 сохраняются в /tmp /home_user1_changes, но не в "overlaid" /home /user1]

2.5 Откат

2.5.1 umount /home /user1

2.5.2 umount /tmp /home_user1_relocated

2.5.3.1 при необходимости проверять файлы в /tmp /home_user1_changes

2.5.3.2 umount /tmp /home_user1_changes [изменения исчезнут]

2.5.4 опционально: rm -fR /tmp /home_user1_changes, rmdir /tmp /home_user1_relocated

[/home/user1 теперь в состоянии, как и раньше 1., все изменения отсутствуют]

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