我使用 将 Windows (NAS) 文件夹安装到 Turnkey-Linux 服务器上cifs-utils
。在 Linux 端查看某些图像时,它们会在视觉上显示失真/损坏,但在 Windows 端则正常。
示例 1(左:Linux,右:Windows)
示例 2(左:Linux,右:Windows)
在某些情况下,使用 Firefox (69.0) 时,图像根本不会显示,只显示一个空白边框,左上角显示文件位置。在 Chrome (76.0.3809.132) 中,它将显示极其腐败的形象。
我已经尝试过一些故障排除:
- 在相同和不同位置重新安装该文件夹。相同的图像总是扭曲/损坏。
- 使用不同的(备份)Windows NAS。
有人经历过这种情况并知道是什么原因造成的吗?
答案1
有一个已知错误我使用的 Apache2 版本(2.4.25 Debian)以一种奇怪的方式提供 CIFS 文件,导致文件损坏。对于使用 Apache2 的用户,您可能会处理文件夹httpd.conf
中的文件。在我的 Turnkey Django 发行版中,它是文件夹内的sites-enabled
文件,但它本质上与 相同。django.conf
sites-enabled
httpd.conf
默认情况下,Apache2 使用 MMAP,但使用 CIFS 时,此功能会失效。从文件系统上的文件获取 md5sum 时,您会不断获得不同的哈希值。这就是问题的原因。
要亲自查看这一点,只需使用以下命令获取 md5sum:
wget http://localhost/file -O -|md5sum
多次运行此行,您将看到每次的 md5sum 都不同。
要在 Apache2 配置文件中关闭 MMAP:
cd
到../apache2/sites-enabled/
nano django.conf
或者httpd.conf
- 下面
ServerName localhost
添加EnableMMAP Off
- 然后在文件底部
.conf
添加<directory>
指向 CIFS 文件夹的标签。我的标签如下:<Directory "/etc/www/djsys/static/bom/images/part-img/"> </Directory>
- 保存
.conf
文件然后重新启动 Apache2service apache2 restart
。
MMAP 现在应该已关闭,并且 CIFS 上的文件也不再被损坏。
答案2
由于我在诊断 CIFS Windows 共享上损坏文件的稍微不同*(但可能相关?)的问题时发现了这个问题,所以我将添加我发现的内容。
就我而言,我将大文件从 Ubuntu 20.04 VM(使用cifs-utils
)写入 Windows 网络共享(位于同一台机器上,由主机操作系统共享),尽管文件大小匹配,但许多文件在 Windows 端的 md5sum 检查均失败。
对我来说似乎有效的是cache=none
在我的 CIFS 配置中进行设置。更改后,相关行如下所示:
[...],cache=none,credentials=/etc/winsharecreds,file_mode=0640,[...]
如果有人想了解更多信息,我在这里找到了这个解决方案(以及问题的详细描述): https://forums.sonarr.tv/t/strange-failures-on-cifs-mounts-solution/16741
更改后,我的文件传输似乎慢了一点(传闻),但到目前为止,没有一个文件未能通过自动 md5sum 检查。我还没有尝试更改rsize
,wsize
如帖子中所述,但这可能会解决传输速度问题。
*:与我的情况不同的是,这个问题描述了一个问题阅读来自 Windows 共享,而我的问题是写作到已挂载的共享。在读取操作期间,我可能也遇到了一些损坏的文件,但我不知道,因为在大多数检索过程中我都没有执行 md5 检查,而且媒体内容似乎显示没有问题。
当 PHP 7.4.16 写入由 systemd 自动挂载的目录(使用 cifs-utils 6.9-1ubuntu0.1)时,我的文件被损坏了。