如何在下层有子安装的地方安装overlayfs?

Phi*_*ing 5 linux mount overlayfs

我正在尝试为 chroot 环境设置一个覆盖文件。该环境由多个只读 squashfs 文件系统(下)和单个可写目录(上)组成。

棘手的部分是只有一个 squashfs 文件系统具有 chroot 的根目录,其他文件系统不包含返回根的完整祖先链。所以我试过:

mount -o ro,loop base.squash /media/foo/myimage
mount -o ro,loop home.squash /media/foo/myimage/home/
mount -t overlay overlay -o lowerdir=/media/foo/myimage,upperdir=/var/lib/myimage,workdir=/var/chache/myimage /media/bar
Run Code Online (Sandbox Code Playgroud)

这具有仅由/media/bar组成的(令人惊讶的)结果。 被忽略,留空。 base.squash/var/lib/myimagehome.squash/media/bar/home

我在文档中查看了一种添加home.squash为额外较低层的方法,但似乎所有层都将包含返回到 root 的祖先目录的完整链/

在不更改 squashfs 图像的内容的情况下,我应该如何安装它?

小智 1

这是一个令人惊讶的发现,我希望找到解决方案。我尝试了一些绑定安装的变体,但没有得到我希望的结果。

但我看到了另一个与嵌套覆盖相关的问题,这显然应该可以工作,但是 Linux 内核 4.2 中存在一个回归,导致它无法在该版本中工作。幸运的是我是4.15所以我尝试了这个方法;

mount -o ro,loop base.squash /media/foo/myimage
mount -o ro,loop home.squash /media/foo/myhome
mount -t overlay overlay -o lowerdir=/media/foo/myimage,upperdir=/var/lib/myimage,workdir=/var/chache/myimage /media/bar
mount -t overlay overlay -o lowerdir=/media/foo/myhome,upperdir=/var/lib/myhome,workdir=/var/chache/myhome /media/bar/home
Run Code Online (Sandbox Code Playgroud)

这似乎达到了预期的效果。

我尝试不指定“upperdir”和“workdir”部分,因为它在某处声明它可以工作,但会创建一个只读覆盖。但这没有用。至少对我来说不是。