linux - 为什么 LXC 由于 "Too many levels of symbolic links"而无法启动,但在第二次或第三次尝试时启动?

标签 linux ubuntu mount nfs lxc

我正在运行带有 LXC 1.07 的 Ubuntu 14.04 LTS,我想从我的 lxc-container(ubuntu 模板)中访问目录,这些目录是由主机上的 autofs 管理的 NFS 挂载。

假设主机有 3 个不同的由 autofs 挂载的 NFS 共享:

自动音量:

/vol/server1 -fstype=nfs IPserver1:/vol/server1
/vol/server2 -fstype=nfs IPserver2:/vol/server2
/vol/server3 -fstype=nfs IPserver3:/vol/server3

现在我尝试从我的容器中访问这些,配置如下所示:

lxc.mount.entry = /vol/server1     vol/server1 none bind 0 0
lxc.mount.entry = /vol/server2     vol/server2 none bind 0 0
lxc.mount.entry = /vol/server3     vol/server3 none bind 0 0

现在的问题是这只在我第二次或第三次启动容器时有效,大多数时候 LXC 会提示“符号链接(symbolic link)级别太多”并退出。这是输出:

lxc-start: conf.c: mount_entry: 2049 Too many levels of symbolic links - failed to mount '/vol/server1' on '/usr/lib/x86_64-linux-gnu/lxc/vol/server1'
lxc-start: conf.c: lxc_setup: 4163 failed to setup the mount entries for 'vm.local'
lxc-start: start.c: do_start: 688 failed to setup the container
lxc-start: sync.c: __sync_wait: 51 invalid sequence number 1. expected 2

我第二次启动容器时它会提示/vol/server2 等等,直到它最终按预期工作。

问题是什么?为什么我启动它的次数越多,它就越有效?

最佳答案

感谢 lxc-user 邮件列表的好用户,我现在知道问题出在哪里了。

似乎主机上的 autofs 不够快,无法挂载目录,这就是容器提示的原因。在下一次尝试时,先前的 lxc.mount.entry 已由 autofs 等挂载。

解决方案似乎是摆脱 autofs 或在主机上调用“ls/vol/server”,以便 autofs 在声明容器之前有一些时间来完成它的工作。

关于linux - 为什么 LXC 由于 "Too many levels of symbolic links"而无法启动,但在第二次或第三次尝试时启动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31266838/

相关文章:

php - 我怎样才能提取 drupal-x.x.tar.gz 文件

docker - apt -o APT::Keep-Downloaded-Packages=true install <pkg> 不会将 debs 保留在 docker 中

MySQL服务器正在运行,但我无法连接: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

Docker(带有 SYSTEMCTL 的 CentOS 7): Failed to mount tmpfs & cgroup

Android:当 SD 卡真正安装且可读时的 Intent

c++ - 使用带有大量文件描述符的 select() 的外部代码

c++ - 在 RAM 中保留数据,同时允许其他进程在 linux C++ 中访问它

linux - 使用ascp下载时出错

ruby-on-rails - 使用 Rails 预编译 Assets 时出错 - ruby​​_executable_hooks:14:in `read':没有这样的文件或目录 - assets:precompile:all (Errno::ENOENT)

linux - 如何以编程方式获取 syscall.Mount() 的文件系统类型