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”部分,因为它在某处声明它可以工作,但会创建一个只读覆盖。但这没有用。至少对我来说不是。