Servidor samba do Linux: falha cifs_mount com código de retorno = -12

16

Servidor: RHEL 5.9 / smbd 3.0.33 - Clientes: vários, embora todos usassem o mount.cifs atual (5.2)

Eu já resolvi esse problema, mas foi um pesadelo caçar esses códigos de erro. Eu senti que precisava de documentação universal.

Sintomas : Falha de montagem imprevisível e intermitente de um cliente cifs específico para o servidor samba do Linux. Todos os meus clientes linux pam_mount as casas dos usuários no login. Aleatoriamente, e esporadicamente, as montagens dir home começaram a falhar em uma máquina. Logins e montagens continuaram a funcionar perfeitamente em todos os outros clientes. Inicialmente, eu pensei que uma quantidade incomum de atividade no cliente quebrado estava causando smbd para freak, mas falhas intermitentes persistiram mesmo após o uso se esgotou.

A tentativa de montar manualmente falha e reporta:

Errors from underlying mount program
mount error(12): Cannot allocate memory
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)

Defina <debug enable="1"/> em /etc/security/pam_mount.conf.xml para obter mais informações de pam_mount:

command: 'mount' '-t' 'cifs' '//my_server/watdo' '/home/watdo' '-o' 'user=watdo,uid=666,gid=666'
pam_mount(misc.c:38): set_myuid<pre>: (ruid/rgid=0/0, e=0/0)
pam_mount(misc.c:38): set_myuid<post>: (ruid/rgid=0/0, e=0/0)
pam_mount(mount.c:64): Errors from underlying mount program:
pam_mount(mount.c:68): mount error(12): Cannot allocate memory
pam_mount(mount.c:68): Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)'

/var/log/kern.log também relatou este evento:

kernel: [4316790.256149] CIFS VFS: cifs_mount failed w/return code = -12

'echo 1 > / proc / fs / cifs / cifsFYI ' excita a depuração do mount.cifs (escreve para / var / log / debug). Aqui está a parte boa (parece familiar?):

CIFS Session Established successfully
For smb_command 117
Sending smb:  total_len 88
cifs_sync_mid_result: cmd=117 mid=54307 state=4
Mapping smb error code 0xc0000205 to POSIX err -12

Neste ponto, não há literalmente nenhuma outra informação disponível no lado do cliente. O pedido de montagem cifs sai e o cliente morre quase imediatamente. O erro mount.cifs (12) é bem pouco informativo (a página man não ajuda, thx guys). Uma extensa pesquisa na internet revela que este é um código de erro comum, e também confirma isso como não informativo.

Hora de verificar o servidor! Defina log level = 3 para smbd em /etc/samba/smb.conf (no livro Usando Samba: "Os níveis acima de 3 são para uso dos desenvolvedores e despejam enormes quantidades de informação enigmática." Lol!). Aqui está a linha relevante:

[2013/02/08 10:18:03, 3] smbd/error.c:error_packet_set(106) error packet at smbd/reply.c(514) cmd=117 (SMBtconX) NT_STATUS_INSUFF_SERVER_RESOURCES

Quase lá ... do arquivo da lista de discussão do smb encontrei alguém relatando um tipo de problema semelhante, identificado como um limite de compartilhamento vinculado em uma conexão smb individual. Listar compartilhamentos abertos no servidor:

smbstatus -S | grep <serverIP> | wc -l retornou 2048 . Muito visível.

Examinando realmente a saída de smbstatus -S revelou milhares de entradas para 'IPC $'. Os documentos do Samba no IPC $ revelam que ele está envolvido com navegação de compartilhamento anônimo e acesso a "alguns outros recursos". Eu defino host deny no servidor em /etc/samba/smb.conf:

[IPC$]
hosts deny = 0.0.0.0/0

Funciona muito bem agora. OK, espero que algo aqui ajude alguma pobre alma algum tempo no futuro.

Eu acho que no espírito do site eu vou fazer uma pergunta: Por que o smbd não limparia as ações do IPC $? Por que estabelecer uma conexão de IPC $ por usuário para um compartilhamento em vez de uma por conexão de cliente? Você pode desabilitar a criação de compartilhamento IPC $ do lado do cliente? Existe uma maneira de aumentar o número máximo de conexões por compartilhamento (não que isso teria ajudado nesse caso)? Eu não vi isso nos documentos.

    
por zastard 12.02.2013 / 19:14

1 resposta

1

Este é um oldie, mas considerando que ele não foi respondido e eu estava olhando para o IPC $ e o Samba, eu vou tentar por causa da documentação.

Why would smbd not clean up IPC$ shares?

Como dito acima nos comentários à sua pergunta, o serviço é usado para administração remota e comunicação entre servidores, e particularmente no Samba ele é usado para alguns propósitos de navegação e tcp / ip. A menos que você precise por algum motivo ou algo não funciona, é seguro desativá-lo. [1]

Why establish one IPC$ per user connection to a share rather than one per client connection?

Como um usuário pode ter várias conexões de cliente.

Can you disable IPC$ share creation from the client side?

Sim e não. Ele realmente não desabilita a criação do compartilhamento IPC $, mas você pode desabilitar o acesso a ele do cliente Windows. [2]

Para o Windows Vista, Windows 7, Windows 8 e Windows 10, você pode fazer a seguinte edição de registro:

  1. Clique em Iniciar, digite “regedit” na caixa Pesquisar e clique em regedit.exe nos resultados da pesquisa. A caixa de diálogo Controle de conta de usuário é exibida.
  2. Diga “Sim” ao prompt do UAC e o Editor do Registro deve abrir.
  3. Abra o ramo HKEY_LOCAL_MACHINE.
  4. Abra a ramificação SYSTEM.
  5. Abra a ramificação CurrentControlSet.
  6. Abra o ramo Serviços.
  7. Abra a ramificação do LanmanServer.
  8. Selecione o ramo Parâmetros.
  9. Selecione Editar, Novo, “Valor DWORD (32 bits)”
  10. Digite "AutoShareWks" e pressione Enter. (Deixe o valor padrão de 0.)
  11. Reinicie ou reinicie o serviço usando um Prompt de Comando (DOS ou terminal): “net stop server” e, em seguida, “net start server”.

Is there a way to increase the max # connections per share (not that this would have helped in this case)? I didn't see it in the docs.

Sim [3]. Abaixo da parte apenas insira:

[share]
   max connections = ##

Onde XX é o número de conexões.

Fontes:

por 18.05.2018 / 04:23