trova: loop del file system rilevato


9

Quando provo a trovare un file usando find -name "filename"ottengo un errore che dice:

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

Ho eseguito il ls -ldi /var/named/chroot/var/named/ /var/namedcomando e i numeri di inode sono gli stessi. La ricerca indica che la correzione consiste nell'eliminare il collegamento reale /var/named/chroot/var/named/usando rm -fe ricrearlo come una directory ma quando lo faccio mi viene consigliato che non può essere eliminato perché è già una directory. Come posso risolvere questo problema? Sto usando Centos 6 con Plesk 11.

Il comando mount dà questo:

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

Risposte:


9

named, ovvero il server DNS, viene eseguito in un chroot. Per accedere al file di configurazione, lo script di avvio utilizza mount --bindper rendere visibile la directory di configurazione all'interno del chroot. Ciò significa che /var/named/è lo stesso di /var/named/chroot/var/named, /var/named/chroot/var/named/chroot/var/namede così via. Questa è una struttura di directory ricorsiva, quindi se findtentasse di attraversarla tutte non sarebbe mai in grado di terminarne l'esecuzione, quindi si rende conto che le due directory sono effettivamente le stesse e ti stampa quel messaggio per avvisarti.

Il messaggio significa che findnon cercherà all'interno /var/named/chroot/var/namedperché si è reso conto che è lo stesso di qualche altra directory già vista prima. È un messaggio totalmente innocuo, puoi tranquillamente ignorarlo: dopo aver saltato /var/named/chroot/var/namedl' findoperazione continua normalmente.


Quindi, se non c'è nulla dopo questa affermazione, significa semplicemente che il file non è stato trovato?
user1780242

si, indovina. Prova lo stesso con un file che sai che esiste. Inoltre, puoi sopprimere i messaggi di errore aggiungendo `2> / dev / null` alla riga di comando.
pqnet,

1

Il messaggio attiva un codice di ritorno 1 e non può essere ignorato, né il reindirizzamento funzionerà.

Utilizzando findutils findutils-4.4.2-6.el6.x86_64

Sembra che questo sia il corrispondente bug report:

Sui sistemi che eseguono il kernel Linux, "find -printf% F" non produce più la risposta errata per i file su filesystem che sono stati rimontati altrove usando "mount --bind". (Insetto Savannah n. 14921).

Una soluzione (con problemi di sicurezza) se non è possibile correggere lo script interessato (ovvero perché è stato scritto da una terza parte) consiste nel rimuovere il pacchetto bind-chroot, almeno temporaneamente.


0

Non credo sia un collegamento difficile. Di solito sono vietati i collegamenti fisici alla directory. Potrei essere un soft link, ma sembra che sia un mount loop: sembra che /var/namedo forse /varsia di nuovo montato /var/named/chroot. Forse è un mount bind ( mount -o bind) o solo un mount normale.

Puoi pubblicare l'output del tuo mountcomando? Inoltre, forse questo è un supporto necessario per il carcere chroot e faresti meglio a lasciarlo.


è probabile che sia un mount --bindperché è l'unica cosa che funziona in un chroot.
pqnet,

0

Il problema è causato dallo script init su namedcui monta la /var/nameddirectory /var/named/chroot. Anche la soluzione per questo problema è presente nello script init.

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

Come accennato in precedenza, la mountfunzione funzionerà solo se la directory è vuota. Quindi usa la soluzione qui sotto:

  1. Fermare named
  2. Crea la directory /var/named/chroot/var/named
  3. Crea un file vuoto all'interno di questa directory
  4. Inizio named
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.