所以我有/usr
一个'ro'
文件系统(无法更改它、工作规则和安全性),并且我有另一个目录,/bigdata
即'rw'
.
我正在安装一些服务,但它需要写入/usr/foo
,所以我想我可以符号链接到/bigdata
.问题是我还有其他文件/usr/foo
。
是否有解决方法,不包括复制foo
in的所有内容bigdata
?
谢谢!
答案1
一种想法是重写,/usr/foo
但仅限于行为不当的应用程序。行为不当的应用程序将被视为/usr/foo
的别名,/bigdata
但系统中的每个其他进程将继续看到/usr/foo
的真实内容,包括实际位于其中的文件。这假设行为不当的应用程序不关心/usr/foo
它无法访问 的正常内容。
sudo unshare --mount sh -c 'mount --make-rprivate / &&
mount -n --bind /bigdata /usr/foo &&
exec su "$SUDO_USER" -c misbehaving_application'
(已测试)
否则,覆盖文件系统正如评论中所建议的,可能会解决您的问题。
最后,作为最后的手段,一些符号链接练习可以解决这个问题。这个想法是:
/usr/foo
绑定挂载其他地方的副本mkdir /writable/place/foo mount --bind /usr/foo /writable/place/foo
/usr/foo
用你的替换目录压缩mount --bind /bigdata /usr/foo
对现有文件进行符号链接,以便可以从 /usr/foo 访问它们
for x in /writable/place/foo/*; do ln -s "$x" /usr/foo done
(未测试)