(用户错误)OverlayFS - 当合并目录重新安装为较低版本时,在当前合并目录(安装点)中删除的文件会重新出现

(用户错误)OverlayFS - 当合并目录重新安装为较低版本时,在当前合并目录(安装点)中删除的文件会重新出现

在 Debian Stretch(以 root 身份运行)上,当前行为是:

# Create base directory
mkdir base
touch base/example

# Create merge, upper and work directories for 2 layers
mkdir layer1 layer1.upper layer1.work
mkdir layer2 layer2.upper layer2.work

# Mount layer1 as the merged directory using layer1.upper as the true upper layer,
# with base as a lower layer and layer1.work as the necessary work directory
mount -t overlay overlay -o lowerdir=$(pwd)/base,upperdir=$(pwd)/layer1.upper,workdir=$(pwd)/layer1.work layer1
ls layer1 # should show example as expected
ls layer1.upper # shows no file (this is expected behaviour, it should only show files written on layer1)
rm layer1/example
ls layer1 # should show no files
ls layer1.upper # should show a special character device called "example", this is the "whiteout" file

# unmount, and remount with layer2 being the new upper layer and using layer1.upper directory as the top level lower layer.
umount layer1
mount -t overlay overlay -o lowerdir=$(pwd)/base:$(pwd)/layer1.upper,upperdir=$(pwd)/layer2.upper,workdir=$(pwd)/layer2.work layer2
ls layer2 # now shows example again as if it was never deleted

这是一个错误吗?或者这是一种限制/预期行为?

如果预期的话,有什么关于快速、简单的解决方法的建议吗?

FWIW 它在 auFS 下按预期工作,因此一种解决方法是安装 aufs-dkms 并继续使用 auFS...无论如何我都可以这样做,但我真的很想弄清楚这是一个错误还是预期的行为。


[更新]我做错了,请参阅(现已更正)答案!

答案1

我决定这是一个错误。因此,我已向 Debian 提交了错误报告:

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=896646

哎呀!原来我做错了!正如对 Debian bug 的回应所述:

Overlayfs 的行为如文档所述。文档(filesystems/overlayfs.txt)说:“指定的下层目录将从最右边的目录开始向左堆叠。在上面的示例中,lower1将是顶层,lower2是中间层,lower3是底层。”

在您的示例中,这意味着“layer1.upper”是最低层,并且其白色被位于其顶部的“base”中的文件覆盖。我认为您只需要在安装选项中交换这些目录的顺序即可。

我读过该文档,但错过了“从右到左”的部分!

我可以确认,如果正确完成(即交换顺序,使其从右到左),它会按预期工作。

相关内容