Serveur: RHEL 5.9 / smbd 3.0.33 - Clients: divers, bien que tous utilisent le fichier mount.cifs actuel (5.2)
J'ai déjà résolu ce problème, mais c'était un tel cauchemar de traquer ces codes d'erreur que j'avais l'impression qu'il fallait une documentation universelle.
Symptômes : échec de montage imprévisible et intermittent d'un client cifs spécifique au serveur Linux Samba. Tous mes clients linux pam_mount résident à la connexion. De façon aléatoire et sporadique, les montages du répertoire d'origine ont commencé à échouer sur une machine. Les connexions et les montages ont continué de fonctionner parfaitement sur tous les autres clients. Au début, je pensais qu'une quantité inhabituelle d'activité sur le client cassé faisait flipper smbd, mais des échecs intermittents persistaient même après la fin de l'utilisation.
La tentative de montage manuel échoue et signale:
Errors from underlying mount program
mount error(12): Cannot allocate memory
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
Définissez <debug enable="1"/>
dans /etc/security/pam_mount.conf.xml pour obtenir plus d'informations 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 a également rendu compte de cet événement:
kernel: [4316790.256149] CIFS VFS: cifs_mount failed w/return code = -12
'echo 1> / proc / fs / CIFS / cifsFYI' pédaliers jusqu'à mount.cifs debug (écrit / var / log / debug). Voici la bonne partie (regardez familier?):
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
À ce stade, il n'y a littéralement aucune autre information disponible du côté client. la demande de montage cifs s'éteint et le client meurt presque immédiatement. L'erreur de mount.cifs (12) est assez peu informative (la page de manuel n'aide pas, les gars). Des recherches approfondies sur Internet révèlent qu'il s'agit d'un code d'erreur courant, ce qui confirme également qu'il n'est pas informatif.
Il est temps de vérifier sur le serveur! Définissez log level = 3
pour smbd dans /etc/samba/smb.conf ( à partir du manuel Utilisation de Samba: « Les niveaux supérieurs 3 sont pour une utilisation par les développeurs et déversent d' énormes quantités d'informations cryptique. » Lol!). Voici la ligne pertinente:
[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
Presque là ... à partir des archives de la liste de diffusion smb, j'ai trouvé quelqu'un signalant une sorte de problème similaire, identifié comme une limite de partage liée à une connexion smb individuelle. Liste des partages ouverts sur le serveur:
smbstatus -S | grep <serverIP> | wc -l
retourné 2048 . Très visible.
Examine actuellement la sortie de milliers d'entrées smbstatus -S
révélées pour «IPC $». Les documents de Samba sur IPC $ révèlent qu'il est impliqué dans la navigation de partage anonyme et l'accès à "d'autres ressources". J'ai défini le refus d'hôte sur le serveur dans /etc/samba/smb.conf:
[IPC$]
hosts deny = 0.0.0.0/0
Fonctionne très bien maintenant. OK, j'espère que quelque chose ici aidera une pauvre âme dans le futur.
Je suppose que dans l'esprit du site, je vais poser une question: pourquoi smbd ne nettoierait-il pas les actions IPC $? Pourquoi établir un IPC $ par connexion utilisateur à un partage plutôt qu'un par connexion client? Pouvez-vous désactiver la création de partage IPC $ du côté client? Existe-t-il un moyen d'augmenter le nombre maximal de connexions par partage (pas que cela aurait aidé dans ce cas)? Je ne l'ai pas vu dans les documents.