所以我在服务器A上有一个Samba共享。我将该共享安装到另外两个服务器,B和C.想法是B和C需要将临时文件写入单个位置以便多个背景处理作业(也在B和C上运行)可以访问同一个文件池。
当后台进程完成后,他们会删除他们正在处理的文件。删除文件后,当我执行共享的目录列表时,原始文件名称现在沿着cifs79
,cifs78
等行。它们占用与原始文件相同的空间量所以我假设他们是原件,只是重命名。
问题是这些文件不会消失,除非我重新启动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会话作为同一个用户运行,但是他们应该具有相同的权限来执行任何操作。
感谢您的帮助!
答案 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/