Samba,CIFS和删除文件

时间:2009-08-21 22:13:48

标签: linux samba cifs

所以我在服务器A上有一个Samba共享。我将该共享安装到另外两个服务器,B和C.想法是B和C需要将临时文件写入单个位置以便多个背景处理作业(也在B和C上运行)可以访问同一个文件池。

当后台进程完成后,他们会删除他们正在处理的文件。删除文件后,当我执行共享的目录列表时,原始文件名称现在沿着cifs79cifs78等行。它们占用与原始文件相同的空间量所以我假设他们原件,只是重命名。

问题是这些文件不会消失,除非我重新启动samba(我不打算做)。我错过了一个简单的配置参数,它会立即删除文件吗?

我使用此命令创建了我的共享:

mount -t cifs //10.251.251.251/uploads ./uploads -o username=samba_user,noexec

文件以-rw-------的形式进入共享,并在更改名称后保持这种状态。

以下是完整的smb.conf文件:http://gist.github.com/172474以及投放smbstatus的结果:http://gist.github.com/172478


更多信息:

如果我从已安装共享的框中手动创建文件,我可以创建,编辑,删除没有问题。如果我启动一个IRB(交互式ruby)会话,我可以使用Ruby创建/删除文件没问题。它似乎是应用程序本身创建具有奇怪权限的文件。虽然应用程序和我的IRB会话作为同一个用户运行,但是他们应该具有相同的权限来执行任何操作。

感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

您是否可以访问samba服务器的完整配置?我知道一个常见的习惯用法是将samba配置为执行除了从服务器上删除命令以删除文件之外的其他内容,以便在整个网络中实现“垃圾/回收站”样式功能。重命名原始目录中的文件有点不寻常,但仍有可能。

答案 1 :(得分:0)

  

R / W列确实说RDONLY但在我的配置中我只读了= no

这并不意味着客户端不允许fopen(文件,“r”),即打开文件只读,即使他们被允许写入它们。

看起来Samba必须保留B删除的文件,因为A仍然有一个oplock。 oplock应该在不太长时间后到期,之后samba可能会删除重命名的文件。

这与NFS实现语义的方式非常相似 fd =打开/创建临时文件 删除文件 使用临时文件(因为你还没有关闭它) 关闭fd

你的目录中有.nfs ...文件。

答案 2 :(得分:0)

Basicaly我认为这是一个权限问题,配置文件似乎很好。 您是否尝试过查看/ var / log / samba / * logs?

关于你的smb.conf文件:

[global]
force create mode = 0644
force directory mode = 0744 

0744不是“强制目录模式”的常用模式,可能是一个拼写错误,通常如果您对要为执行位标记的文件夹赋予读取权限,请使用755或750或700。所有文件夹至少设置了这些位。 “强制创造模式”很好。

[uploads]
create mask = 0655
directory mask = 755

由于你用noexec挂载它,我猜你的“创建掩码”的正确值是666或644,而“目录掩码”的值是755。

我会ssh到服务器并运行这样的东西:

find /tmp/uploads -type f -print0 | xargs -0 chmod 644
find /tmp/uploads -type d -print0 | xargs -0 chmod 755
chown "$SMBUSER:$SMBUSER_GROUP" -r /tmp/uploads/