概要
我正在从本地计算机提供 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,所以我会看看这是否有帮助。