在 Windows 上安装的 Linux 上的 CIFS 显示损坏/扭曲的图像

在 Windows 上安装的 Linux 上的 CIFS 显示损坏/扭曲的图像

我使用 将 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.confsites-enabledhttpd.conf

默认情况下,Apache2 使用 MMAP,但使用 CIFS 时,此功能会失效。从文件系统上的文件获取 md5sum 时,您会不断获得不同的哈希值。这就是问题的原因。

要亲自查看这一点,只需使用以下命令获取 md5sum: wget http://localhost/file -O -|md5sum 多次运行此行,您将看到每次的 md5sum 都不同。

要在 Apache2 配置文件中关闭 MMAP:

  1. cd../apache2/sites-enabled/
  2. nano django.conf或者httpd.conf
  3. 下面ServerName localhost添加EnableMMAP Off
  4. 然后在文件底部.conf添加<directory>指向 CIFS 文件夹的标签。我的标签如下: <Directory "/etc/www/djsys/static/bom/images/part-img/"> </Directory>
  5. 保存.conf文件然后重新启动 Apache2 service 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 检查。我还没有尝试更改rsizewsize如帖子中所述,但这可能会解决传输速度问题。


*:与我的情况不同的是,这个问题描述了一个问题阅读来自 Windows 共享,而我的问题是写作到已挂载的共享。在读取操作期间,我可能也遇到了一些损坏的文件,但我不知道,因为在大多数检索过程中我都没有执行 md5 检查,而且媒体内容似乎显示没有问题。

当 PHP 7.4.16 写入由 systemd 自动挂载的目录(使用 cifs-utils 6.9-1ubuntu0.1)时,我的文件被损坏了。

相关内容