Samba 共享 (cifs utils) 和 Libreoffice:文件在特定情况下被删除

Samba 共享 (cifs utils) 和 Libreoffice:文件在特定情况下被删除

我们公司在处理 Libreoffice 和 samba 共享文档时遇到了一个可怕的错误,并且每次都能重现它。

我们所拥有的:

Windows PC 上的 Samba 共享(我们尝试使用 Linux Samba 共享,结果是一样的)。只需一个帐户即可访问,因此所有 PC 都使用相同的登录名和密码来访问共享,但这并不重要,因为即使使用不同的 Samba 帐户,也会出现错误。

多台 Ubuntu 20.04 PC 和多台 Windows 10 PC。

Ubuntu 20.04 PC 可以通过 cifs utils (fstab) 访问共享://srv-dc-02/uc /mnt/EDU2022 cifs credentials=/etc/win-credentials-1,uid=1000,gid=1000,dir_mode=0777,file_mode=0777,iocharset=utf8,nobrl,_netdev 0 0

Libreoffice 的版本无关紧要。我们尝试了默认的 Ubuntu 20.04 LO 版本和最新版本。

重现此错误的步骤:

Ubuntu User1 打开一个文档并开始处理它。

Ubuntu User2 以“只读”或“复制”模式打开同一个文档。

Ubuntu User1 尝试保存文件并立即收到“文件丢失”错误。

此时该文件已从 samba 共享中删除。

如果 Ubuntu User2 关闭了文件的只读版本,那么 Ubuntu User1 实际上可以保存该文件并将其恢复在 samba 共享上。如果 Ubuntu User1 关闭打开的文件,它将永久地从共享中消失。

此错误仅在 Ubuntu+Ubuntu PC 与共享交互时才会出现。如果是 Ubuntu+Windows,则不会发生此错误。

有没有办法来解决这个问题?

答案1

您似乎没有使用 Samba。您正在使用 cifs-utils 从 Windows 机器安装某些东西,这与 Samba 无关。

您需要了解 Windows 如何执行“oplocks”,这些操作允许发起者控制文件并“阻止”其他人执行除读取之外的操作。您还需要了解 Windows 等如何在 Libreoffice 等程序中打开文件,这些程序通常如下:打开文件、创建临时文件、删除原始文件、处理文件、关闭时写入新文件并删除临时文件。

最后,我再说一遍,这些都与 Samba 无关,或者您的意思是 SMB?

答案2

我目前正在解决这个问题,因为我仍然不确定到底发生了什么。

解决方法如下:

  • 在 smb.conf 中,启用 full_audit 和 recycle:vfs objects = fruit streams_xattr full_audit recycle。还有recycle:repository = /home/.recycle/%U
  • 现在,如果文件被删除,它并没有消失;它将被保存到回收目录中您可以在 SMB 审计日志中跟踪其删除情况。

在 LibreOffice 中保存文件通常是这样的:创建一个临时文件:

smbd_audit: user1|create_file|ok|file|create|server/~gvfRs5N.tmp
smbd_audit: user1|pwrite_send|ok|server/~gvfRs5N.tmp
smbd_audit: user1|close|ok|server/~gvfRs5N.tmp

然后重命名:

renameat|ok|server/~gvfRs5N.tmp|server/document.odt

由于某种原因,我总是找不到重命名;然后,由于某种原因,有时我会找到一条unlinkat日志消息user2。那就是文件消失的时刻。

现在的解决方案仍然是手动操作:即找到/home/.recycle/user1/~gvfRs5N.tmp并将其移动到最初保存 document.odt 的位置。

这比不得不说“抱歉,您的文件丢失了,但我有昨天的版本”要好得多。我认为这仍然不可接受。不幸的是,我无法重现导致文件丢失的确切操作数。审计日志有帮助,但作用有限。

相关内容