查找:检测到文件系统循环

查找:检测到文件系统循环

当我尝试使用查找文件时,find -name "filename"出现错误:

./var/named/chroot/var/named' is part of the same file system loop as `./var/named'

我运行了ls -ldi /var/named/chroot/var/named/ /var/named命令,索引节点号是相同的。研究表明修复方法是/var/named/chroot/var/named/使用删除硬链接rm -f并将其重新创建为目录,但当我这样做时,我被告知不能删除它,因为它已经是一个目录了。我该如何解决?我正在运行 Centos 6 和 Plesk 11。

mount 命令给出了这样的信息:

/dev/vzfs on / type reiserfs (rw,usrquota,grpquota)
proc on /proc type proc (rw,relatime)
sysfs on /sys type sysfs (rw,relatime)
none on /dev type tmpfs (rw,relatime)
none on /dev/pts type devpts (rw,relatime)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,relatime)
/etc/named on /var/named/chroot/etc/named type none (rw,bind)
/var/named on /var/named/chroot/var/named type none (rw,bind)
/etc/named.rfc1912.zones on /var/named/chroot/etc/named.rfc1912.zones type none (rw,bind)
/etc/rndc.key on /var/named/chroot/etc/rndc.key type none (rw,bind)
/usr/lib64/bind on /var/named/chroot/usr/lib64/bind type none (rw,bind)
/etc/named.iscdlv.key on /var/named/chroot/etc/named.iscdlv.key type none (rw,bind)
/etc/named.root.key on /var/named/chroot/etc/named.root.key type none (rw,bind)

答案1

named,即 DNS 服务器,在 chroot 中运行。为了访问配置文件,启动脚本使用mount --bind使配置目录在 chroot 内可见。这意味着与、等/var/named/相同。这是一个递归目录结构,因此如果尝试遍历它,它将永远无法终止其执行,因此它意识到这两个目录实际上是相同的,并打印该消息以警告您。/var/named/chroot/var/named/var/named/chroot/var/named/chroot/var/namedfind

该消息意味着find不会在内部搜索,/var/named/chroot/var/named因为它意识到它与之前已经见过的其他目录相同。这是一条完全无害的消息,您可以安全地忽略它:跳过操作后,/var/named/chroot/var/named操作find将继续正常进行。

答案2

该消息会触发返回码 1,并且不能被忽略,重定向也不起作用。

使用 findutils findutils-4.4.2-6.el6.x86_64

看来这是相应的错误报告:

在运行 Linux 内核的系统上,对于使用“mount --bind”重新挂载到其他位置的文件系统上的文件,“find -printf %F”不再产生错误的答案。 (萨凡纳错误#14921)。

如果您无法修复受影响的脚本(即因为它是由第 3 方编写的),则(安全挑战)解决方案是删除 bind-chroot 包,至少暂时删除。

答案3

我不认为这是一个硬链接。通常目录硬链接是被禁止的。我可能是一个软链接,但看起来它是一个安装循环:似乎/var/named或可能/var再次安装在/var/named/chroot.也许它是绑定安装 ( mount -o bind) 或只是普通安装。

mount你能发布你的命令的输出吗?另外,也许这是 chroot 监狱所需的安装,你最好保留它。

答案4

该问题是由将目录named挂载/var/named/var/named/chroot.这个问题的解决方案也存在于 init 脚本中。

mount_chroot_conf()
{
   # Mount source is a directory. Mount it only if directory in chroot is
   # empty.

如上所述,该mount函数仅在目录为空时才起作用。所以使用下面的解决方案:

  1. 停止named
  2. 创建目录/var/named/chroot/var/named
  3. 在此目录下创建一个空文件
  4. 开始named

相关内容