Samba 共享上的某些文件显示为文件夹

Samba 共享上的某些文件显示为文件夹

Ubuntu 20.04.1,Samba pkg 2:4.11.6+dfsg-0ubuntu1.2

最近在我的 Ubuntu 机器上设置了一个 Samba 共享;没什么特别的,只有一个名为“媒体”的共享,其中有三个子目录 - 电影、电视和照片。

一个多星期以来,这种情况一直没有问题,但从昨天开始,Photos 目录下的所有文件都显示为目录。从 MacOS (smb://myserver/media) 访问 Samba 共享时,所有文件都显示为“文件夹”图标,当您cd通过终端进入文件夹时,所有文件都列为d运行时为 rwx ls -al。文件处于此状态时无法正常使用。即使我将该文件复制到 MacOS 机器,它仍保留为目录。在 Ubuntu 机器本身(即本地)访问文件显示文件完好无损,一切正常。

我尝试解决该问题的方法如下:

  • 重新启动 Ubuntu 计算机。
  • 重新启动 smbd 服务。
  • min protocol = SMB2和添加client min protocol = SMB2到 /etc/samba/smb.conf
  • 重新启动 MacOS 机器。
  • 将受影响的文件复制到共享上的其他目录。
  • 确保我的 Samba 包是最新的。

这很奇怪,因为共享上其他目录中的文件行为正常,而照片目录中的文件在突然发生这种情况之前也行为正常超过一周。

有趣的是,这与一个老漏洞,但我正在使用修复了此问题的 Samba 版本。

任何帮助都将不胜感激;因为我没有做任何导致此行为的更改,所以我不确定擦除并重新加载是否能(永久)修复它。我希望将此盒子用作 NAS,但无法访问文件是一个主要问题。

终端

文件图形用户界面

*** 编辑:Windows 上的行为类似

答案1

我遇到了同样的问题,对我来说有效的解决方案是这样的:

所有受影响的文件/文件夹都有扩展属性user.DOSATTRIB。执行getfattr #filename“坏”文件的结果将如下所示:

getfattr Borat\ \(2006\).mp4
# file: Borat (2006).mp4
user.DOSATTRIB

为了解决这个问题,我使用命令删除了扩展属性setfattr -x user.DOSATTRIB #filename。因此对于上面的例子,执行以下操作:

setfattr -x user.DOSATTRIB Borat\ \(2006\).mp4
getfattr Borat\ \(2006\).mp4

没有返回任何扩展属性,并且我的网络共享文件能够再次被访问。

我目前正在研究如何setfattr -x user.DOSATTRIB递归运行我的文件夹。当我弄清楚后,我会编辑此回复。

更新:好吧,我做了一种草率的解决方案。

  1. 首先,我getfattr -R Movies > DOS-Movies.txt在电影文件夹上方的目录中使用了该命令。上述命令getfattr在电影文件夹上递归运行,并返回所有具有扩展属性的文件和文件夹,然后将它们保存在文本文件中。
  2. 我使用 Notepad++ 打开了该文本文件以便稍微清理一下,因为其中存在其他我不想删除的属性,例如“user.encryptable”。
  3. 我使用正则表达式(?-is)^.+\Ruser.encryptable\R删除了包含该属性和上一行(文件名)的行。我还删除了所有空白行,因此最终只剩下# file: Movies/Dune (1984)/Dune (1984).mp4具有 DOSATTRIB 扩展属性的文件,每行一个项目。我还使用“查找/替换”进行查找\r\n和替换,以"\r\n在每行末尾添加一个“字符”。
  4. 删除属性的命令是setfattr -x user.DOSATTRIB,所以我做了一个基本的查找/替换,每行最后看起来像这样:setfattr -x user.DOSATTRIB "Movies/Dune (1984)/Dune (1984).mp4"
  5. 然后,我只需粘贴删除所有文件和文件夹上的 DOSATTRIB 的命令,使它们再次可在 Windows 上读取。

希望这可以帮助!

答案2

作为删除属性的替代方法,这对当前共享的文件有效,但不一定对将来添加的新文件有效,您还可以禁用该选项,该选项自 samba 4.9.0 起默认启用,并导致此问题。(至少这是我的经验)

使用您喜欢的文件编辑器编辑 /etc/samba/smb.conf 并禁用存储 dos 属性的选项。

[global]
...

# Make sure files are not shown as folders!
store dos attributes = no

之后通过 重新启动 SMB sudo systemctl restart smbd

显然它已启用“[...] 在默认安装中允许更好的 Windows 文件服务器兼容性。”

答案3

这是一个错误,但有一个解决方案: https://bugs.launchpad.net/ubuntu/+source/samba/+bug/1872476

相关内容