我使用的是 Snow Leopard。我安装了 MacFUSE 和 fuse4x。是否有可以安装的写时复制文件系统?
我尝试使用 fuse4x 的包含和库构建 UnionFS-FUSE 0.25,但出现此错误:
error: ‘AT_SYMLINK_NOFOLLOW’ undeclared
看来 OS X 没有定义这个常量(我搜索了整个 /usr/include 但没有找到)。
我也尝试使用 OS X 的内置联合挂载(mount -o union
),但是它没有按预期运行。我将 2 个文件系统(使用 dmg 文件)使用联合选项挂载到同一个挂载点。第一个是只读的,并且有一个名为的目录,d1
其中包含一些文件。第二个没有同名的目录。当我尝试在d1
联合挂载中创建文件时,出现只读 fs 错误。我期望它自动在 fs #2 中创建目录及其下的文件。然后我尝试d1
在 fs #2 中创建,但是 fs #1 中的内容d1
却完全被隐藏(目录显示为空)。基本上,联合行为仅发生在文件系统的根级别,并且不是递归的。
如果有人想尝试复制内置的 union mount 行为,我使用了这个指导。
我不熟悉写时复制文件系统 - 我的期望是否与写时复制文件系统的工作方式相符?
答案1
经过更多的研究之后,我可能不得不放弃预先写好的解决方案,而直接编写自己的解决方案。
文件系统看起来它很有潜力,特别是 MultiFS fs 类型。它的 FUSE 代码需要一个与 fuse4x 配合使用的补丁。
MultiFS 文档不清楚它是否会在可写 fs 上创建目录,但我会尝试一下。
更新
当补丁将此行移到 iconv CDLL 加载之前时,引入了一个错误:
_libfuse = CDLL(_libfuse_path)
只需将其移到后面,它就可以在 OS X 上运行。(一般修复还需要在块后添加行if _system in
。)
所以我尝试了 MultiFS,它确实不是在可写文件系统上创建缺失的目录。但我猜添加起来很容易(尽管我不是 Python 专家)。此外,尝试覆盖或附加到只读文件系统之一上的文件并不会始终在可写文件系统上创建相应的路径。我收到很多错误并挂起(然后保险丝过程开始使用大量 CPU)。不过,这个解决方案仍然看起来很有希望。