Ci vuole molto tempo in una piccola directory


21

Eseguendo Ubuntu, apro un terminale e lo faccio

sudo bash
cd /
ls | head -n 1000

E prevedibilmente vengono restituite circa 20 directory.

Tuttavia, se faccio un ls e non lo installo in nulla, ls rimane sospeso fino a quando non lo uccido da un altro terminale. Cosa potrebbe succedere?

MODIFICARE:

> type ls
ls is aliased to `ls --color=auto`

MODIFICARE:

> /bin/ls /
<normal response>
> /bin/ls --color=auto
<hangs indefinitely>

Perché colorare l'output di ls sta causando il blocco di questo comando?


3
Corri type lsper controllare tutti i possibili alias ecc.
jw013

5
L'esecuzione strace lspuò potenzialmente aiutarti a identificare il problema. stracevisualizza tutte le chiamate di sistema effettuate dal programma che invoca.
Gowtham,

2
Prova /bin/ls(o meglio command ls) a eseguire lssenza le opzioni con alias, per confermare se è l'opzione colore a fare la differenza. FWIW, lsdisattiva la colorazione quando la sua uscita è un tubo o un altro dispositivo non terminale.
jw013,

3
una barra rovesciata prima dell'esecuzione di un comando invece dell'alias. \ls
Rob

Risposte:


28

Se esegui ls normalmente, mostrerà solo l'elenco dei file senza dover eseguire stat (2) su nessuno di essi. In altre parole, non accede ai FILES stessi, ma solo alla directory che contiene i file.

Se aggiungi l'opzione --color o usi altre opzioni ls che devono esaminare i file stessi, allora ls dovrà stat (2) quei file.

Molto probabilmente almeno uno dei file nella tua directory viene effettivamente montato da un sistema remoto, tramite NFS o simili. E il server da cui hai montato quella partizione non è attivo o non risponde. Quindi, quando ls cerca di ottenere le informazioni su quella directory, si bloccherà nel kernel in attesa che il server risponda.

Come altri hanno già detto, se usi strace scoprirai a quale directory ls sta tentando di accedere quando si blocca. Quindi puoi smontare quella partizione montata o qualsiasi altra cosa.


Un'altra possibilità è che uno dei file nella tua directory sia un link simbolico che punta a una partizione remota e il cui server non risponde ... stesso principio.
MadScientist,

Avevo nfs montato da un server che era inattivo. Sembra strano che stat si blocchi sul mount di nfs essendo inattivo. Non sarebbe troppo difficile dire se fosse inattivo e stampare semplicemente la directory con il colore che vengono stampati i collegamenti simbolici rotti.
Snitse,

In realtà, è difficile (per ls) dire che il server NFS è inattivo. NFS è solo un diverso tipo di filesystem (come ext3, xfs, ecc.) Tutti i filesystem sono implementati nel kernel. Un programma utente come ls (1) esegue semplicemente una chiamata di sistema come stat (2) su un percorso; non ha idea del tipo di filesystem utilizzato. In questo caso la chiamata di sistema si blocca (quindi l'app per lo spazio utente è bloccata) fino a quando non si ottiene il risultato. Quindi, ls viene messo in stop dal kernel fino a quando non si ottiene il risultato ... il che non accade mai. Quindi non posso dire che qualcosa non va.
MadScientist

Dovrei dire che PUOI cambiare il comportamento di NFS. Se si specifica un "hard mount", il kernel proverà per sempre a riconnettersi se il server scade e non tornerà dalla chiamata di sistema fino a quando ciò non accadrà. In alternativa è possibile richiedere un "soft mount", in cui il kernel ritorna con un errore se la richiesta del server scade. Tuttavia, molti / la maggior parte dei programmi non sono scritti per gestire correttamente questi tipi di operazioni di timeout, quindi la specifica di montaggi software in NFS è pericolosa e causa instabilità del sistema. Coloro che usano NFS regolarmente usano virtualmente sempre e raccomandano montaggi difficili. Vedi nfs (5).
MadScientist,

Avevo dei sshfssupporti e l'unico modo per smontarli era uccidere i relativi processi sshe sshfsprocessi.
Gauthier,
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.