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
递归运行我的文件夹。当我弄清楚后,我会编辑此回复。
更新:好吧,我做了一种草率的解决方案。
- 首先,我
getfattr -R Movies > DOS-Movies.txt
在电影文件夹上方的目录中使用了该命令。上述命令getfattr
在电影文件夹上递归运行,并返回所有具有扩展属性的文件和文件夹,然后将它们保存在文本文件中。 - 我使用 Notepad++ 打开了该文本文件以便稍微清理一下,因为其中存在其他我不想删除的属性,例如“user.encryptable”。
- 我使用正则表达式
(?-is)^.+\Ruser.encryptable\R
删除了包含该属性和上一行(文件名)的行。我还删除了所有空白行,因此最终只剩下# file: Movies/Dune (1984)/Dune (1984).mp4
具有 DOSATTRIB 扩展属性的文件,每行一个项目。我还使用“查找/替换”进行查找\r\n
和替换,以"\r\n
在每行末尾添加一个“字符”。 - 删除属性的命令是
setfattr -x user.DOSATTRIB
,所以我做了一个基本的查找/替换,每行最后看起来像这样:setfattr -x user.DOSATTRIB "Movies/Dune (1984)/Dune (1984).mp4"
- 然后,我只需粘贴删除所有文件和文件夹上的 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
。
答案3
这是一个错误,但有一个解决方案: https://bugs.launchpad.net/ubuntu/+source/samba/+bug/1872476