假设我在文件上绑定挂载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
or /etc/hostname
,但由于它们是只读的,因此无法正常工作。我们通常的解决方法是创建一个可写分区,其中只包含我们希望修改的文件,然后将这些可写文件绑定挂载到服务可以找到它们的传统 Linux 路径上。
当进程打开文件以进行写入并就地修改它时,这将起作用。但是,如上所述,当进程执行相当于mv
.
挂载的ed点不能移动或删除,它们基本上是不可变的。
但是,您可以在它们上面安装一些东西。
mv
如果以前存在硬链接,也会断开它们。因为 a 和 b 涉及挂载点,所以不能使用
mv
. 但是,您可以使用cp
.或者,您可以绑定挂载父目录,而不是将挂载绑定到 b。