O console congela no preenchimento automático do compartilhamento / mnt / folder (CIFS)

4

Eu tenho um servidor Ubuntu 14.04 que será bloqueado após um tempo indeterminado quando você tentar separar automaticamente o caminho de um compartilhamento CIFS no diretório / mnt. Eu montei o compartilhamento e parece funcionar bem por um período de tempo incerto. Eu posso fazer ls ou executar du em pastas dentro do compartilhamento montado. Então eu irei mostrar um caminho de pasta e meu console trava. Eu posso iniciar uma nova sessão, mas ela será bloqueada assim que eu tentar mexer com o compartilhamento montado; Isso também acontece com outros usuários se eu os tentar também. Eu não tenho ideia do porque isso está acontecendo? Eu nunca vi esse problema.

    
por David George 23.05.2014 / 00:19

1 resposta

1

Isso tem a ver com o modo como a conclusão do bash funciona e a maneira como o cifs funciona como um protocolo.

A conclusão do bash funciona assim:

  1. readline informa o bash da string atualmente digitada e do pressionamento de tecla da guia.
  2. O
  3. bash realiza uma Depth First Search do sistema de arquivos, cuja raiz está na parte mais correspondente da hierarquia do sistema de arquivos. Cada etapa dessa pesquisa é, na verdade, muitas solicitações - uma solicitação de lista - do sistema de arquivos.
  4. blocos readline - aguardando uma resposta do bash com uma lista de possíveis resultados a serem exibidos.
  5. essa lista chega, readline a exibe e retorna o controle de entrada para o usuário.

Em um nível de bloco ou sistema de arquivos local ou razoavelmente rápido, tudo isso acontece incrivelmente rápido.

O CIFS, infelizmente, não é um sistema de arquivos de nível de bloco. Em vez disso, o CIFS é um protocolo transacional baseado em comando. Cada pedido feito contra o CIFS é:

  • transacional, exigindo uma solicitação, reconhecimento e confirmação da confirmação,
  • representado por vários blocos de comandos CIFS / SMB individuais
  • inspecionado para autenticação

Em suma, CIFS / SMB é (pelo menos em SMB1, que quase seguramente é o que você está usando para montar este compartilhamento CIFS) extremamente falador.

No uso comum e direto de nomes de arquivos conhecidos, a solicitação é um singleton. Você faz a solicitação de um arquivo, o CIFS o autentica, reconhece sua solicitação, você confirma seu reconhecimento e suas transferências de arquivos.

No caso de conclusão de tabulação, esse ciclo é multiplicado pelo número de arquivos em um diretório específico, possivelmente duas vezes (ou mais!) se estiver desreferenciando um atalho do Windows.

em toda a rede.

Esta é uma receita para lentidões significativas, pois readline espera por bash, que, por sua vez, aguarda que o driver do sistema de arquivos negocie com o servidor CIFS.

Você pode resolver esse problema fazendo coisas como executar sua sessão de dentro de screen , assim, se a sua sessão bash trava, você pode ctrl-A-c e receber o novo terminal, para continuar para trabalhar ou até mesmo matar o outro.

    
por James S. 23.05.2014 / 02:10