比如说,我们最初有/
以下内容:
/bin/foo
/usr/bin/bar
/usr/lib/libfoo.so
我们还有另一个目录,例如/stuff
,其内容为:
usr/lib/mystuff/mystuff.so
etc/foo/qux/buzz
bin/stuff
有没有办法在/
和之间创建一个并集/stuff
,以便我得到:
/bin/foo
/bin/stuff
/usr/bin/bar
/usr/lib/libfoo.so
/usr/lib/mystuff/mystuff.so
/etc/foo/qux/buzz
(还有那里的所有内容/stuff
,只是没有显示在那里。)
这个联盟应该是一个暂时性(就像文件系统挂载一样),否则我也可以使用cp
,mv
或rsync
。
我该怎么做呢?
人们会期望这个问题的答案很容易找到。事实上,有许多在线资源提到在两个目录之间创建联合并将它们安装在其他地方,但没有一个真正涵盖“over”安装目录的这种特殊情况/
。
答案1
看看持久性的实时分发就是一个例子。
并非所有联合挂载方法都适用于根目录。其中包括 unionfs、aufs 和 overlayfs。 Overlayfs 是现代 Linux 系统上的使用方式。
在覆盖文件系统,您将获得下层文件系统和上层文件系统的并集,上层文件系统优先并接收写入。要获得可写联合,您需要指定工作目录用于overlayfs存储元数据;这必须是与上层目录位于同一文件系统上的空目录。
mkdir /stuff/.overlayfs.work
mount -t overlay -o lowerdir=/,upperdir=/stuff,workdir=/stuff/.overlayfs.work overlay /