当其中一个路径中有冒号时是否可以进行覆盖安装?我看过的所有 FUSE 覆盖安装解决方案都使用冒号来分隔覆盖中的路径,但我找不到摆脱它的方法。
答案1
目录结构
假设我们正在尝试覆盖foo:bar
, 和bar:baz
。挂载点将是union
foo
└── a
bar
└── b
foo:bar
└── c
bar:baz
└── d
union
mergerfs
无论你尝试做什么逃避,你都可以从源头看它不会起作用。如果你试图猜测一种逃避它的方法,那就很烦人了:
$ mergerfs 'foo\:bar':'bar\:baz' union
它不会抛出错误,但会默默地忽略不存在的目录:
$ ls union
b
unionfs-fuse
同样的问题as mergerfs
,无法逃脱冒号。如果目录不存在,至少它会失败并出现错误:
$ unionfs-fuse 'foo\:bar':'bar\:baz' union
Failed to open /foo\/: No such file or directory. Aborting!
overlayfs
overlayfs
做允许在路径中转义冒号,但它不是 FUSE 文件系统。
$ mount -t overlay overlay -o lowerdir='foo\:bar':'bar\:baz' union
$ ls union
c d
解决方法
一个适用于两者的简单解决方法mergerfs
是unionfs-fuse
使用符号链接:
$ ln -s foo:bar foo_bar
$ ln -s bar:baz bar_baz
$ unionfs-fuse foo_bar:bar_baz union
$ ls union
c d