Существует ли файловая система копирования при записи для Mac OS X?

2503
Kelvin

Я на снежном барсе. У меня установлены MacFUSE и fuse4x. Можно ли установить файловую систему копирования при записи?

Я пытался собрать UnionFS-FUSE 0.25 с использованием include и библиотек fuse4x, но я получаю эту ошибку:

error: ‘AT_SYMLINK_NOFOLLOW’ undeclared 

Похоже, что OS X не определяет эту константу (я извлек все / usr / include, и он не был найден).

Я также попытался использовать встроенный в OS X union mounts ( mount -o union), но он не работал должным образом. Я смонтировал 2 файловые системы (используя файлы dmg) с опцией объединения в одну точку монтирования. Первый был доступен только для чтения и имел каталог d1с некоторыми файлами. У второго не было каталога с таким именем. Когда я попытался создать файл d1в монтируемом соединении, я получил ошибку fs только для чтения. Я ожидал, что он автоматически создаст каталог и файл под ним, как в fs # 2. Затем я попытался создать d1в fs # 2, но затем содержимое d1в fs # 1 было полностью скрыто (каталог оказался пустым). По сути, объединяющее поведение происходило только на корневом уровне файловых систем и не было рекурсивным.

Если кто-то хочет попробовать воспроизвести встроенное поведение монтирования объединения, я воспользовался этим руководством .

Я не знаком с файловыми системами копирования при записи - совпадает ли мое ожидание с тем, как должны работать файловые системы копирования при записи?

4
`mount -union` работает так, как задокументировано: * Заставляет пространство имен в точке монтирования отображаться как объединение корня смонтированной файловой системы и существующего каталога. Вначале поиск будет выполняться в смонтированной файловой системе. * Это означает, что когда в файле fs # 1 используется `d1`, вместо того, чтобы возвращать какой-либо виртуальный каталог объединения. Так что это, вероятно, не решение ... Daniel Beck 11 лет назад 0
@DanielBeck спасибо, я этого не заметил. Но это значит, что мне нужно другое решение. Kelvin 11 лет назад 0

1 ответ на вопрос

3
Kelvin

After doing a little more research, I may have to give up on a pre-written solution and just write my own.

PyFilesystem looks like it has potential, particularly the MultiFS fs type. Its FUSE code needs a patch to work with fuse4x.

The MultiFS documentation isn't clear what whether it will create a directory on the writable fs, but I'll give it a try.

UPDATE

The patch introduced a bug when it moved this line before the iconv CDLL loading:

_libfuse = CDLL(_libfuse_path) 

Just move it right after and it should work on OS X. (A general fix requires also adding the line after the if _system in block.)

So I tried the MultiFS and it does not create missing directories on the writable FS. But I'm guessing it's easy to add (even though I'm not a python expert). Also, trying to overwrite or append to a file on one of the read-only FS's doesn't consistently create the corresponding path on the writable one. I get a lot of errors and hangs (the fuse process then starts using a lot of CPU). This solution still looks very promising though.