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

Как бы я это сделал? Я пробовал unionfs, но он всегда будет следовать порядку папок, например, если я монтирую папку RW в первую очередь, все записи будут идти в эту папку, я хочу следующее поведение, как описано ниже:

Я хочу иметь 2 папки RW и объединенную папку

RW - driveA
RW - driveB
Unioned - mergeDrive

По сути, когда я делаю перемещение файла (я могу касаться файлов только через mergeDrive , я хочу, чтобы каждый файл перемещался в свою собственную папку.

Так, например,

mv /mnt/mergeDrive/subFolderA/fileA.csv /mnt/mergeDrive/subFolderB/fileA.csv

Исходный путь файла A:

/mnt/driveA/subFolderA/fileA.csv

Ожидаемый путь после движения:

/mnt/driveA/subFolderB/fileA.csv

Тогда я хочу иметь возможность сделать:

mv /mnt/mergeDrive/subFolderA/fileB.csv /mnt/mergeDrive/subFolderB/fileB.csv

Исходный путь FileB:

/mnt/driveB/subFolderA/fileB.csv

Ожидаемый путь после движения:

/mnt/driveB/subFolderB/fileB.csv

Поэтому, откуда бы ни исходила корневая папка файла, при перемещении она остается в этой корневой папке, даже если она перемещается через /mergeDrive/ . Можете ли вы настроить unionfs(или что-то подобное) для этого?

1 ответ1

0

Ваши сомнения законны. Я проверил unionfs-fuse . Он несколько пытается не перемещать файлы между ветками.

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

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

Я не проверял aufs или overlayfs .

Однако я проверил mhddfs. Это файловая система в пользовательском пространстве (FUSE) (см. Вопросы безопасности относительно FUSE). Кажется, mhddfs работает именно так, как вы хотите. Обратите внимание, что мои тесты были ограничены, я не читал код, чтобы точно знать его алгоритмы. Я думаю, что вы должны проверить это самостоятельно. Основной синтаксис:

mhddfs /mnt/driveA/ /mnt/driveB/ /mnt/mergeDrive/

В этой статье есть замечание:

если на определенном диске заканчивается свободное место в середине записи (предположим, вы пытались создать на нем очень большой файл), процесс записи не завершится сбоем; mhddfs просто перенесет уже записанные данные на другой диск (на котором больше свободного места) и продолжит запись там.

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

На самом деле я никогда не наблюдал, чтобы mhddfs передавал файлы между двумя ветвями. Даже если целевой каталог существовал только в какой-либо другой ветви, инструмент продублировал необходимую часть дерева каталогов в той ветви, где находились файлы, чтобы они могли изменить свой путь, не перенося его в другую ветвь.

Чтобы было ясно: я говорю о тестах с участием простого mv Совершенно очевидно, что если вы cp в другой каталог в объединенной точке монтирования, то полученная копия может оказаться в другой ветви, чем оригинал. Имейте в виду, что некоторые программы изменяют файлы на месте, другие создают копии.

Также обратите внимание , что в версии 0.1.39 есть ошибка. Пользователи сообщают о снижении до 0.1.38 . В качестве альтернативы вы можете попробовать этот форк: mhddfs-nosegfault.

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