在这里我有一个Samba服务器(Debian 5.0),它被configuration为承载Windows XPconfiguration文件。
客户端连接到此服务器,并直接在samba共享上处理其configuration文件(configuration文件不在本地复制)。
每隔一段时间,客户端可能无法正常closures,因此Windows不会释放文件locking。 在查看sambalocking表时,我们可以看到,即使客户端不再连接,许多文件仍然被locking。 在我们的例子中,这似乎是由Mozilla Thunderbird和Firefox创build的锁文件发生的。 这是一个桑巴locking表的例子:
# 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
我们可以看到这些文件是由Windows打开的,并施加了一个DENY_ALL锁。
现在,当客户端重新连接到这个共享并尝试打开这些文件时,samba说他们被locking并拒绝访问。
有没有办法解决这种情况,或者我错过了什么?
编辑:我们希望避免禁用samba服务器上的文件locking,因为有足够的理由来启用这些locking。
以下步骤帮助我解决了这个问题:
看一下:
reset on zero vc = yes / no
看看是否能解决你的问题。
从smb.conf手册页:
这个布尔选项控制传入的会话设置是否应该终止来自同一IP的其他连接。 这匹配默认的Windows 2003行为。 当你有一个脆弱的networking和Windows决定重新连接,而旧的连接仍然有共享模式打开的文件时,将此参数设置为是必要的。 这些文件通过新的连接变得无法访问。 客户端在新的连接上发送一个零VC,并且Windows 2003终止来自同一个IP的所有其他连接。 这样locking的文件可以再次访问。 请注意,启用此选项将会终止伪装路由器后面的连接。
编辑 :
我只是想另一个可能的解决scheme。 你可以在有问题的部分上做这样的事情。
veto oplock files = /*.lock/
这只会阻止.lock文件上的oplocks。
Samba的一些非常聪明的人决定取消这个选项,而且没有替代的select。
到目前为止,SMB兼容性,因为这确实是默认的赢得行为。
除非用户精通linux命令行,并且如何终止打开的文件/进程,否则必须重新启动SMBD或服务器本身来清除它。
很棒,Samba.org。