假设我将文件绑定安装a
在文件之上b
......
$ echo 'line 1' > a
$ touch b
$ mount --bind a b
初始文件内容将按照预期在两个路径上进行镜像:
$ cat a
line 1
$ cat b
line 1
如果我连接到任一路径,新内容将按预期双向镜像:
$ echo 'line 2' >> a
$ cat a
line 1
line 2
$ cat b
line 1
line 2
$ echo 'line 3' >> b
$ cat a
line 1
line 2
line 3
$ cat b
line 1
line 2
line 3
但是,我无法b
通过以下方式覆盖mv
:
$ echo 'totally new contents' > temp
$ mv tmp b
mv: can't rename 'tmp': Device or resource busy
有没有办法让它发挥作用,以便将新内容镜像到a
?
我想要这样做的原因与我的系统文件系统的设置方式有关。
它是一个嵌入式系统,因此大部分文件系统都是只读安装的。某些第 3 方服务尝试写入硬编码文件,例如/etc/machine-info
或/etc/hostname
,这不起作用,因为它们是只读的。我们解决这个问题的常规方法是拥有一个仅包含我们希望修改的文件的可写分区,然后将这些可写文件绑定挂载到服务可以找到它们的传统 Linux 路径上。
当进程打开文件进行写入并就地修改它时,这会起作用。但是,如上所述,当进程执行相当于 的操作时,它不起作用mv
。
答案1
因为 a 和 b 涉及一个挂载点,所以不能使用mv
.但是,您可以使用 覆盖它cp
。
或者,您可以绑定安装父目录,而不是绑定安装到 b。
答案2
山编辑点不能移动或删除,它们基本上是不可变的。
不过,您可以在它们上面安装一些东西。
mv
如果硬链接以前存在的话,也会破坏它们。