find: boucle de système de fichiers détectée


9

Lorsque j'essaie de trouver un fichier en utilisant, find -name "filename"j'obtiens une erreur qui dit:

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

J'ai exécuté la ls -ldi /var/named/chroot/var/named/ /var/namedcommande et les numéros d'inode sont les mêmes. La recherche indique que le correctif consiste à supprimer le lien dur à l' /var/named/chroot/var/named/aide rm -fet à le recréer en tant que répertoire, mais lorsque je le fais, je suis informé qu'il ne peut pas être supprimé car il s'agit déjà d'un répertoire. Comment puis-je réparer ça? J'utilise Centos 6 avec Plesk 11.

La commande mount donne ceci:

/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)

Réponses:


9

named, c'est-à-dire le serveur DNS, s'exécute en chroot. Pour accéder au fichier de configuration, le script de démarrage utilise mount --bindpour rendre le répertoire de configuration visible à l'intérieur du chroot. Cela signifie que /var/named/est le même que /var/named/chroot/var/named, et /var/named/chroot/var/named/chroot/var/namedet ainsi de suite. Il s'agit d'une structure de répertoire récursive, donc si vous findtentez de la traverser, elle ne pourra jamais terminer son exécution.Elle se rend donc compte que les deux répertoires sont en fait les mêmes et vous affiche ce message pour vous avertir.

Le message signifie qu'il findne cherchera pas à l'intérieur /var/named/chroot/var/namedcar il s'est rendu compte qu'il est identique à un autre répertoire déjà vu auparavant. C'est un message totalement inoffensif, vous pouvez l'ignorer en toute sécurité: après avoir sauté /var/named/chroot/var/namedl' findopération continue normalement.


Donc, s'il n'y a rien après cette déclaration, cela signifie simplement que le fichier n'a pas été trouvé?
user1780242

oui, devinez. Essayez la même chose avec un fichier dont vous savez qu'il existe. De plus, vous pouvez supprimer les messages d'erreur en ajoutant «2> / dev / null» à la ligne de commande.
pqnet

1

Le message déclenche un code retour 1 et ne peut pas être ignoré, et la redirection ne fonctionnera pas.

Utilisation de findutils findutils-4.4.2-6.el6.x86_64

Il semble que ce soit le rapport de bogue correspondant:

Sur les systèmes exécutant le noyau Linux, "find -printf% F" ne produit plus la mauvaise réponse pour les fichiers sur les systèmes de fichiers qui ont été remontés ailleurs en utilisant "mount --bind". (Bug Savannah # 14921).

Une solution (mise à l'épreuve de la sécurité) si vous ne pouvez pas corriger le script affecté (c'est-à-dire parce qu'il a été écrit par un tiers) consiste à supprimer le package bind-chroot, au moins temporairement.


0

Je ne pense pas que ce soit un lien dur. Habituellement, les liens physiques de répertoire sont interdits. Je pourrais être un lien souple, mais on dirait que c'est une boucle de montage: il semble que /var/namedou peut /var- être est monté à nouveau /var/named/chroot. C'est peut-être un montage bind ( mount -o bind) ou juste un montage normal.

Pouvez-vous publier la sortie de votre mountcommande? De plus, c'est peut-être une monture nécessaire pour la prison chroot et vous feriez mieux de la laisser.


il est probable que ce soit un mount --bindcar c'est la seule chose qui fonctionne dans un chroot.
pqnet

0

Le problème est dû au script init nameddont le /var/namedrépertoire est monté /var/named/chroot. La solution à ce problème est également présente dans le script init.

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

Comme mentionné ci-dessus, la mountfonction ne fonctionnera que si le répertoire est vide. Utilisez donc la solution ci-dessous:

  1. Arrêtez named
  2. Créez le répertoire /var/named/chroot/var/named
  3. Créez un fichier vide dans ce répertoire
  4. Début named
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.