override-fs 并使用 vim 编辑上层目录

override-fs 并使用 vim 编辑上层目录

出于开发目的,我使用overlay-fs将自定义更改合并到基本文件结构。合并文件夹由 java 应用程序使用。

现在我在使用时遇到了奇怪的行为维姆用于编辑上层文件夹中的自定义文件:更改不会反映在合并文件夹中。 (显然)其他所有编辑器似乎都可以工作(nano,code,gedit,...)。因此,vim 保存文件的方式不同。要复制,请以 root 身份执行以下操作:

# created needed folders
$ mkdir -p overlay/{lower,upper,work} merged
# mount the folders with overlay-fs
$ mount -t overlay overlay -o upperdir=overlay/upper,lowerdir=overlay/lower,workdir=overlay/work merged/
# create file in lower-folder with content "foo"
$ echo "foo" >overlay/lower/file.txt
$ cat merged/file.txt
# foo
# create override for file.txt in upper folder
$ echo "bar" >overlay/upper/file.txt
$ cat overlay/lower/file.txt
# foo
$ cat overlay/upper/file.txt
# bar
$ cat merged/file.txt
# foo # <- FALSE
# remount for reinitialization
$ mount -o remount merged
$ cat merged/file.txt
# bar # <- TRUE
$ echo "baz" >merged/file.txt
$ cat overlay/lower/file.txt
# foo
$ cat overlay/upper/file.txt
# baz
$ cat merged/file.txt
# baz

如果该文件尚不存在于upper文件夹中,则更改不会反映到合并文件夹中。必须重新挂载文件系统。

使用vim编辑merged/file.txt;修改为foobar;保存

$ cat overlay/lower/file.txt
# foo
$ cat overlay/upper/file.txt
# foobar
$ cat merged/file.txt
# foobar

预计也是如此。一切都好

现在使用vim编辑overlay/upper/file.txt;修改为foobaz;节省

$ cat overlay/lower/file.txt
# foo
$ cat overlay/upper/file.txt
# foobaz
$ cat merged/file.txt
# foobar # <- FALSE

这是出乎意料的。我认为这也merged/file.txt应该改变foobaz

$ mount -o remount merged
$ cat merged/file.txt
# foobaz # <- TRUE

使用 ie 进行相同的更改,echo效果正确:

$ echo "foobazaar" >overlay/upper/file.txt
$ cat overlay/lower/file.txt
# foo
$ cat overlay/upper/file.txt
# foobazaar
$ cat merged/file.txt
# foobazaar # <- TRUE

echo可以使用nanoor来代替code

谁能给我解释一下 vim 的这种行为?这是overlay-fs中的一个错误吗?

相关内容