La console si blocca al completamento automatico della condivisione / mnt / cartella (CIFS)

4

Ho un server Ubuntu 14.04 che si bloccherà dopo un lasso di tempo indeterminato quando tenterai di completare automaticamente il percorso di una condivisione CIFS nella directory / mnt. Montare la condivisione e sembra funzionare bene per un periodo di tempo incerto. Posso eseguire ls o eseguire du sulle cartelle all'interno della condivisione montata. Quindi andrò a estrarre un percorso di cartella e la console si bloccherà. Posso iniziare una nuova sessione ma si bloccherà non appena cercherò di rovinare la condivisione montata; questo succede anche ad altri utenti se li provo pure. Non ho idea del perché questo sta accadendo? Non ho mai visto questo problema.

    
posta David George 23.05.2014 - 00:19

1 risposta

1

Questo ha a che fare sia con il modo in cui funziona il completamento di bash sia con il funzionamento di cifs come protocollo.

Il completamento di bash funziona così:

  1. readline informa bash della stringa attualmente digitata e del tasto di tabulazione.
  2. bash esegue una Prima ricerca di profondità del filesystem, la cui radice è nella parte più corrispondente della gerarchia del filesystem. Ogni fase di questa ricerca è in realtà molte richieste - una richiesta per un elenco - dal filesystem.
  3. blocchi di readline - in attesa di una risposta da bash con un elenco di possibili risultati da visualizzare.
  4. quell'elenco arriva, readline lo visualizza e restituisce il controllo di input all'utente.

Su un blocklevel o su un filesystem locale o comunque ragionevolmente veloce, tutto ciò avviene incredibilmente rapidamente.

CIFS, sfortunatamente, non è un filesystem blocklevel. Invece, CIFS è un protocollo transazionale basato sui comandi. Ogni singola richiesta fatta contro CIFS è:

  • transazionale, che richiede una richiesta, una conferma e una conferma della conferma,
  • rappresentato da più blocchi di comando CIFS / SMB singoli
  • ispezionato per l'autenticazione

In breve, CIFS / SMB è (almeno in SMB1, che è quasi sicuramente quello che stai usando per montare questa condivisione CIFS) estremamente loquace.

Nell'uso ordinario e diretto di nomi di file noti, la richiesta è un singleton. Fai la richiesta di un file, CIFS ti autentica, conferma la tua richiesta, confermi il loro riconoscimento e il trasferimento dei file.

Nel caso di completamento della tabulazione, quel ciclo viene moltiplicato per il numero di file in una particolare directory, possibilmente per due (o più!) se si tratta di dereferenziare una scorciatoia di Windows.

In tutta la rete.

Questa è una ricetta per rallentamenti significativi man mano che readline attende bash che è a sua volta in attesa che il driver del filesystem negozia con il server CIFS.

Potresti voler aggirare questo problema facendo cose come eseguire la sessione da screen , in questo modo se la sessione di bash si blocca, puoi ctrl-A-c e ottenere un nuovo terminale di marca, quindi puoi continuare lavorare o addirittura uccidere l'altro.

    
risposta data James S. 23.05.2014 - 02:10

Leggi altre domande sui tag