Como evitar que a gravação no CIFS seja interrompida por minutos a fio?

4

Ao montar um sistema de arquivos CIFS a partir de um arquivador NetApp e copiar arquivos de vários gigabytes para ele, o processo de cópia será interrompido por minutos a fio. O kernel grava mensagens no syslog como estas:

Nov 15 14:03:15 myclient kernel: [173570.048387] CIFS VFS: sends on sock ffff88003a2d4000 stuck for 15 seconds
Nov 15 14:03:15 myclient kernel: [173570.049115] CIFS VFS: Error -11 sending data on socket to server
Nov 15 19:01:22 myclient kernel: [191466.594088] CIFS VFS: Server myfileserver has not responded in 120 seconds. Reconnecting...

A última mensagem pode, de fato, se repetir antes de redigir os currículos. Enquanto o processo está pendurado, não pode ser morto; até mesmo tentativas de reiniciar a máquina serão interrompidas.

O servidor é um NetApp, ainda não sei suas especificações. O cliente é duas máquinas Ubuntu 14.04 LTS, uma delas virtual (acontece em ambas). Seus kernels são a versão 3.5.0-54-generic e 3.13.0-68-generic , respectivamente.

Eu tenho três perguntas.

  1. Se você já viu esse problema, em qual versão do Linux?
  2. Como esse problema pode ocorrer em primeiro lugar? O suporte ao sistema de arquivos CIFS não deveria ser mais inteligente do que desligar de forma ininterrupta?
  3. Quais opções de montagem são garantidas para eliminar esse problema?

Minha entrada do fstab é semelhante a essa (anônima):

//myfileserver/path/to/mydirectory /mnt/mydirectory cifs credentials=mycredentialsfile,rw,sec=ntlmv2,forceuid,forcegid,file_mode=0644,dir_mode=0755,noserverino,nounix,user,noauto 0 0

Adicionar cache=none não resolve o problema. Adicionar directio não: man mount.cifs afirma que é uma opção suportada, mas não é. O que aparece para corrigir o problema é adicionar wsize=4096 ou wsize=8192 : até o momento, meus testes não mostraram nenhuma paralisação com essas opções. (Com wsize=16384 , a parada ainda ocorre.)

Em vez de apenas ir por tentativa e erro, eu gostaria de entender o que está acontecendo e eliminar o problema com 100% de certeza. Você pode me dizer por que isso está acontecendo ou o que fazer?

(Várias perguntas sobre Ask Ubuntu, Unix & Linux e ServerFault foram postadas parecidas com este problema, mas a maioria delas não são: elas reclamam de escrever em arquivos lendo ou em o sistema de arquivos sendo ocioso , enquanto no meu caso, isso nunca ocorre, o travamento ocorre apenas quando escritas arquivos

    
por reinierpost 15.11.2015 / 19:29

1 resposta

3

Por padrão, as montagens cifs usam o protocolo 1.0, que além de obsoleto é ineficiente e não recupera bem do sono por vários motivos.

Dependendo da sua tecnologia de servidor, você pode usar vers=2.1 ou vers=3.0 .

Eu aconselharia verificar com documentação ou fornecedor qual versão do protocolo SMB ele suporta, ou pelo menos usar 3.0 e consultar a saída do comando mount para ver a versão negociada.

A mudança para um protocolo de versão mais recente do CIFS deve resolver alguns ou todos os seus problemas de paralisação e fornecer velocidades de transferência mais eficientes.

Consulte a pergunta relacionada CIFS perdendo aleatoriamente a conexão com o compartilhamento do Windows para mais detalhes.

Por favor, note que o stall irá melhorar , mas não irá embora quando copiar arquivos grandes. Esse comportamento é um recurso, por ex. os arquivos vão para buffers e o sistema de arquivos aguarda a notificação do servidor de que a cópia foi concluída com sucesso.

    
por 01.06.2017 / 03:50

Tags