lxc+btrfs - 创建然后删除带循环符号链接的目录会导致文件句柄过时

lxc+btrfs - 创建然后删除带循环符号链接的目录会导致文件句柄过时

环境:

  • virtualbox 虚拟机中的 debian jessie
  • 在来宾和容器中使用 root 帐户
  • 虚拟机内的 lxc 容器
  • btrfs 上的 lxc 容器根文件系统
  • 在虚拟机来宾中运行时工作正常,但在容器中则不行
  • 在容器中运行且位于基本 btrfs 文件系统中存在的文件夹中时工作正常
  • 在新子目录中的容器中运行时失败(与基础的增量)

当我尝试从 ruby​​-build 安装 ruby​​ 时,出现了一个奇怪的问题。在安装过程中,它运行一个配置脚本,该脚本有 25,000 多行,运行如下内容:

mkdir d
ln -s f d
rm d/f
rmdir d

之后,当前目录句柄已过时,运行“ls”会导致:

ls: cannot open directory .: Stale file handle

在尝试稍微确定一下之后,我发现它只发生在容器内部,并且仅当从基础映像中不存在的文件夹运行时发生。

例如,基础镜像已经有 /root,所以如果我从 /root 运行 4 个命令,它就可以正常工作。但是,如果我从 /root/somesubdir 运行它会失败。同样的事情发生在 /tmp 和 /opt 中(只有一个 / mount,对于 /tmp 或 /opt 没有什么特别的),它对 /tmp 或 /opt 工作得很好,但不适用于我在其中创建的某些子目录。

如果我在 /run 中运行命令(这是一个 tmpfs 挂载),那么它在容器的子目录中运行得很好。

这是我的坐骑:

Filesystem                         1K-blocks     Used Available Use% Mounted on
/var/lib/lxc/base_container/rootfs  37747708 20436096  16331024  56% /
udev                                   10240        0     10240   0% /dev
tmpfs                                4097824       12   4097812   1% /dev/shm
tmpfs                                4097824   106600   3991224   3% /run
tmpfs                                   5120        0      5120   0% /run/lock
tmpfs                                4097824        0   4097824   0% /sys/fs/cgroup

我认为这是创建的 d/f 文件的一些怪癖,它是一个到其自身的循环符号链接。

关于出了什么问题或如何解决它有什么想法吗?

相关内容