Ici, j'ai un serveur Samba (Debian 5.0) qui est configuré pour héberger les profils Windows XP.
Les clients se connectent à ce serveur et travaillent sur leurs profils directement sur le partage samba (le profil n'est pas copié localement).
De temps en temps, un client peut ne pas s'arrêter correctement et donc Windows ne libère pas les verrous de fichiers. En regardant la table de verrouillage de samba, nous pouvons voir que de nombreux fichiers sont toujours verrouillés même si le client n'est plus connecté. Dans notre cas, cela semble se produire avec les fichiers de verrouillage créés par Mozilla Thunderbird et Firefox. Voici un exemple de la table de verrouillage samba:
# smbstatus -L | grep DENY_ALL | head -n5
Pid Uid DenyMode Access R/W Oplock SharePath Name Time
--------------------------------------------------------------------------------------------------
15494 10345 DENY_ALL 0x3019f RDWR EXCLUSIVE+BATCH /home/CORP/user1 app.profile/user1.thunderbird/parent.lock Mon Nov 22 07:12:45 2010
18040 10454 DENY_ALL 0x3019f RDWR EXCLUSIVE+BATCH /home/CORP/user2 app.profile/user2.thunderbird/parent.lock Mon Nov 22 11:20:45 2010
26466 10056 DENY_ALL 0x3019f RDWR EXCLUSIVE+BATCH /home/CORP/user3 app.profile/user3.firefox/parent.lock Mon Nov 22 08:48:23 2010
Nous pouvons voir que les fichiers ont été ouverts par Windows et ont imposé un verrou DENY_ALL.
Désormais, lorsqu'un client se reconnecte à ce partage et essaie d'ouvrir ces fichiers, samba dit qu'ils sont verrouillés et refuse l'accès.
Existe-t-il un moyen de contourner cette situation ou ai-je raté quelque chose?
Edit: Nous aimerions éviter de désactiver les verrous de fichiers sur le serveur samba car il y a de bonnes raisons de les activer.
la source
Jettes un coup d'oeil à:
et voyez si cela résoudra votre problème ou non.
Depuis la
smb.conf
page de manuel:Edit :
je viens de réfléchir à une autre solution possible. Vous pouvez faire quelque chose comme ça sur le partage en question.
Cela empêcherait simplement les oplocks sur les fichiers .lock.
la source
Certaines personnes très intelligentes chez Samba ont décidé de supprimer cette option et il n'y a pas de remplacement pour elle.
Jusqu'à présent pour la compatibilité SMB, car il s'agit en effet d'un comportement gagnant par défaut.
À moins qu'un utilisateur ne connaisse la ligne de commande Linux et comment tuer les fichiers / processus ouverts, vous devez redémarrer SMBD ou le serveur lui-même pour effacer cela.
Merveilleusement fait, Samba.org.
la source
reset on zero vc
option est toujours répertoriée dans le manuel, et également affichée partestparm
. Donc, soit il est de retour, soit il n'a vraiment pas été supprimé.Je rencontrais un problème similaire, un client s'est écrasé lors de la copie d'un fichier volumineux et le fichier a été verrouillé après le redémarrage. Heureusement, cela ne se produit pas très souvent, mais c'est quand même assez ennuyeux de devoir tuer le processus de samba.
reset on zero vc
semblait être juste la solution, mais il est censé avoir été supprimé de Samba4, bien que la version 4.7.6 sur Fedora (27) l'ait toujours (éventuellement corrigé par RH). De toute façon, comme le dit la page de manuel, cela n'aidera pas beaucoup, car cela ne fonctionne qu'avec SMB1 (qui ne devrait plus être utilisé) et ne fait rien sur les connexions SMB2 et SMB3, la seule façon de gérer cela est mentionnée dans le fil lié par Micheal . Je ne connais pas la justification de la suppression et ce qui est si mauvaisreset on zero vc
, J'envisagerais d'utiliser le délai d'attente tcp à cette fin plus comme un hack. Quoi qu'il en soit, quelque chose de raisonnable pourrait être par exempleCela tuera la connexion environ 40 secondes (30 + 3 * 3) après la dernière communication, ce qui est généralement plus que suffisant pour remarquer un crash et un redémarrage (étant donné que la pile TCP du serveur est suffisamment intelligente pour fermer la connexion lorsque le client rejette ses paquets keepalive après le redémarrage).
Notez que cela augmente la charge sur votre réseau, mais je doute que cela soit même perceptible même avec de nombreux clients.
la source
deadtime = 10
ou ainsi le supprimerait, mais avec les verrous de fichier persistants sur les connexions SMB3_11 pour toujours, cela n'a aucun effet, car le temps mort ne sera pas vérifié pendant que les verrous de fichier pour un PID existent toujours. Extrêmement frustrant.deadtime
ne fait rien si vos clients ont des fichiers ouverts, alors la question serait de savoir quels fichiers ils gardent ouverts. Mais c'est probablement un tout autre problème que celui discuté ici, vous devriez donc ouvrir une nouvelle question pour cela. Masocket options
suggestion n'aide que pour les connexions qui ne sont pas correctement fermées (parce que les clients se bloquent, une panne de réseau, etc.), mais probablement pas si vos clients WX se connectent simplement au serveur sans autre action ou en utilisant une sorte de session anonyme (ce quinobody.nogroup
suggère ).12345 someuser somegroup...
une entrée, puis 80012345 nobody nogroup ...
entrées, mais seulement une poignée de verrous de fichiers (pas 800). Très étrange. Affecte maintenant 3 de mes sites clients.Vous pouvez désactiver les oplocks par partage avec les éléments suivants:
Le type d'oplock par défaut est Level1. Les oplocks de niveau 2 sont activés par partage dans le fichier smb.conf. Alternativement, vous pouvez désactiver les oplocks par fichier dans le partage:
Si vous rencontrez des problèmes avec les oplocks, comme le montrent les entrées du journal de Samba, vous pouvez vouloir jouer en toute sécurité et désactiver les oplocks et les oplocks de niveau 2.
Désactivation des Oplocks du noyau Les oplocks du noyau sont un paramètre smb.conf qui notifie Samba (si le noyau UNIX a la capacité d'envoyer à un client Windows une pause oplock) lorsqu'un processus UNIX tente d'ouvrir le fichier mis en cache. Ce paramètre concerne le partage de fichiers entre UNIX et Windows avec les oplocks activés sur le serveur Samba: le processus UNIX peut ouvrir le fichier qui est Oplocked (mis en cache) par le client Windows et le processus smbd n'enverra pas de pause oplock, ce qui expose le fichier à le risque de corruption des données. Si le noyau UNIX a la capacité d'envoyer une interruption oplock, le paramètre oplocks du noyau permet à Samba d'envoyer l'interruption oplock. Les oplocks du noyau sont activés par serveur dans le fichier smb.conf.
La valeur par défaut est non.
La source
la source