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.