在 Overlayfs 中将 NFS 作为一层安装很困难 - bash:不支持操作

在 Overlayfs 中将 NFS 作为一层安装很困难 - bash:不支持操作

概要

我正在从本地计算机提供 NFS 共享,虽然挂载和访问共享按预期工作,但当我尝试将 NFS 引用为 overlayfs 中的较低目录时,需要子目录的 exec/read/write 权限的操作会失败,并显示不支持操作

设置

这是我在本地设置安装的方法

sudo mkdir -p tmpfs_dir
sudo mount -t tmpfs -o size=4096m tmpfs tmpfs_dir

mkdir -p tmpfs_dir/{lower,upper,work}
sudo mount -t nfs -o ro,nolock,noacl,vers=3,proto=tcp 127.0.0.1:/nfsshare tmpfs_dir/lower

mkdir -p overlay_dir
sudo mount -t overlay -o lowerdir=tmpfs_dir/lower,upperdir=tmpfs_dir/upper,workdir=tmpfs_dir/work none overlay_dir

在overlayfs的根目录上调用ls -好的

ls -lah overlay_dir
total 108K
drwxr-xr-x  1 myuser   myuser   40 Feb 12 00:31 .
drwxr-xr-x  7 myuser   myuser   4.0K Feb 11 17:19 ..
drwxr-xr-x  2 root     root     4.0K Aug 20 16:07 bin
drwxr-xr-x  4 root     root     4.0K Aug 16 14:36 boot
drwxr-xr-x 20 root     root     4.0K Aug 20 15:57 dev
drwxr-xr-x 98 root     root     4.0K Sep 10 18:13 etc
drwxr-xr-x  3 root     root     4.0K Aug  7  2019 home
...

在overlayfs的子目录上调用ls -休息时间

ls -lah overlay_dir/bin
ls: cannot open directory 'overlay_dir/bin': Operation not supported

在 NFS 的根目录上调用 ls -好的

ls -lah tmpfs_dir/lower
total 108K
drwxr-xr-x  1 myuser   myuser   40 Feb 12 00:31 .
drwxr-xr-x  7 myuser   myuser   4.0K Feb 11 17:19 ..
drwxr-xr-x  2 root     root     4.0K Aug 20 16:07 bin
drwxr-xr-x  4 root     root     4.0K Aug 16 14:36 boot
drwxr-xr-x 20 root     root     4.0K Aug 20 15:57 dev
drwxr-xr-x 98 root     root     4.0K Sep 10 18:13 etc
drwxr-xr-x  3 root     root     4.0K Aug  7  2019 home
...

在 NFS 的子目录上调用 ls -好的

ls -lah tmpfs_dir/lower/bin
total 16M
drwxr-xr-x  2 root root 4.0K Aug 20 16:07 .
drwxr-xr-x 26 root root 4.0K Feb  7 14:57 ..
-rwxr-xr-x  1 root root 1.1M Jun  6  2019 bash
-rwxr-xr-x  1 root root 700K Mar 12  2018 btrfs
lrwxrwxrwx  1 root root    5 Mar 12  2018 btrfsck -> btrfs
-rwxr-xr-x  1 root root 368K Mar 12  2018 btrfs-debug-tree
-rwxr-xr-x  1 root root 364K Mar 12  2018 btrfs-find-root
-rwxr-xr-x  1 root root 388K Mar 12  2018 btrfs-image
...

从overlayfs的子目录调用可执行文件 -休息时间

overlay_dir/bin/bash
bash: overlay_dir/bin/bash: Operation not supported

看来使用overlayfs访问根目录下的任何内容都会显示不支持操作错误。然而,我发现递归调用chown 修复覆盖共享中的文件,但是(i)在安装后修改权限似乎是不必要的黑客行为,并且(ii)检测文件的所有者有点麻烦,因为不这样做(例如盲目地sudo chown在每个子目录上运行)将在所有者不同的情况下抛出错误

sudo chown -R root bin

ls -lah bin/bash
-rwxr-xr-x 1 root root 1.1M Jun  6  2019 bin/bash

overlay_dir$ bin/bash -c "echo 'why does it work now?'"
why does it work now?

太长了;博士

如何从overlayfs中正确挂载NFS,这样我就不必在挂载后修改权限?

眼镜

  • 分配Ubuntu 18.04
  • 核心5.3.0-28-generic
  • 安装版本libmount 2.31.1
  • 提供 v4 和 v3 服务的 NFS 服务器

进一步的考虑

  • 具有 NFS v4 和 Overlayfs 的只读 nfsroot是我能找到的最接近类似问题的
  • 我目前的研究使我相信在较旧的 Linux 内核上提供 NFS 可能可以工作到 4.15,所以我会看看这是否有帮助。

相关内容