为什么 /proc 不能成为 Linux 上的一层覆盖文件系统(overlayfs)?

Dua*_*Yao 3 linux mount proc overlayfs

在linux上(4.4.59和4.9.8测试过)运行以下命令会失败:

mkdir -p /tmp/proc
mount -t overlay overlay -o lowerdir=/proc:/tmp/proc /tmp/proc
Run Code Online (Sandbox Code Playgroud)

并且有一条错误消息dmesg

overlayfs: maximum fs stacking depth exceeded
Run Code Online (Sandbox Code Playgroud)

为什么不能/proc是覆盖文件系统的一层?
如果我替换/proc/devor /sys,它安装时不会出现问题,所以看起来/proc.

PS 用例是创建一个更安全的chroot环境,我想/dev在. 有 2 个已知的解决方法:/sys/procchroot

  1. 只读绑定挂载。限制是两个命令,而不是必需的一个。
  2. 只读特殊安装:mount -t proc -o ro none /tmp/proc. 限制是子安装不会自动映射。

不管怎样,我仍然很好奇为什么/dev并且/sys可以很好地使用叠加,但/proc事实并非如此。

该问题是从 stackoverflow迁移的。

sou*_*edi 5

https://github.com/torvalds/linux/commit/e54ad7f1ee263ffa5a2de9c609d58dfa27b21cd9

    /*
     * procfs isn't actually a stacking filesystem; however, there is
     * too much magic going on inside it to permit stacking things on
     * top of it
     */
s->s_stack_depth = FILESYSTEM_MAX_STACK_DEPTH;
Run Code Online (Sandbox Code Playgroud)

这可能不是一个信息丰富的答案,但内核开发人员特别不支持它。