环境:
- 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 文件的一些怪癖,它是一个到其自身的循环符号链接。
关于出了什么问题或如何解决它有什么想法吗?