Apache 在 CIFS 网络驱动器上有 2GB 的文件限制吗?

Apache 在 CIFS 网络驱动器上有 2GB 的文件限制吗?

设置:

  1. Windows 和 Ubuntu 服务器托管在 VMware ESXi 中
  2. 我在 Windows 共享上有一个 6GB 的文件
  3. Windows 共享在 Ubuntu 上安装smbmount
  4. 在目录中创建指向 6GB 文件的符号链接public_html,Apache 可以读取该文件

问题:

  1. wget下载 2130706432 字节后出现错误Connection closed at byte 2130706432. Retrying.(正好是 2032 MiB,并且每次都一样)
  2. Apache 返回,206 Partial Content但未在日志中显示任何错误
  3. 即使我从以下位置下载,也会出现同样的错误localhost
  4. 使用 Firefox 代替时出现类似错误wget
  5. 如果我md5sumcpUbuntu 上的文件没有错误,则表明smbmountWindows Server 可以处理 6GB 文件。
  6. 如果 Apache 从本地磁盘提供 6GB 文件,则不会出现任何错误,这表明 Apache 处理 6GB 文件没有问题。

你知道为什么 Apache/symlink/smbmount/Windows 一起使用时会导致错误吗?我该如何解决这个问题?

所用软件:

  • VMware ESXi 4 更新 1
  • Windows Server 2008 R2
  • Ubuntu 8.04 服务器,vmxnet3
  • Apache 2.2.8
  • mount.cifs 1.10-3.0.28a(由 返回smbmount -V

编辑:如果我使用 CentOS 4.8 x64 而不是 Ubuntu 8.04,Apache 将在字节 2147483647(2GiB - 1 字节)而不是 2130706432(2GiB - 16MiB)处断开连接。

答案1

我工作的地方也遇到过类似的问题,查看此错误报告。问题似乎出在 EnableSendfile 上,因此请将其放入虚拟主机或全局配置的 Apache 配置中:

EnableSendfile 关闭

答案2

我非常确定这实际上是您的 Windows 共享的问题,您需要将块大小设置为 4k,并允许它以客户端可以正确解释的方式共享它。不幸的是,这可能需要重新格式化卷,抱歉。

答案3

为什么不使用其他方法来分发文件?6GiB 很大,如果没有 MD5sum 校验,则可能容易出错。在这种情况下,可以通过分布式系统进行交付吗?

答案4

您提到 smbmount 是如何挂载 cifs 共享的。smbmount 和 mount.cifs 是两种不同的方式。smbmount文件大小限制为 2GB但是 smbmount 是一种老方法,已被 mount.cifs 取代。

相关内容