设置:
- Windows 和 Ubuntu 服务器托管在 VMware ESXi 中
- 我在 Windows 共享上有一个 6GB 的文件
- Windows 共享在 Ubuntu 上安装
smbmount
- 在目录中创建指向 6GB 文件的符号链接
public_html
,Apache 可以读取该文件
问题:
wget
下载 2130706432 字节后出现错误Connection closed at byte 2130706432. Retrying.
(正好是 2032 MiB,并且每次都一样)- Apache 返回,
206 Partial Content
但未在日志中显示任何错误 - 即使我从以下位置下载,也会出现同样的错误
localhost
- 使用 Firefox 代替时出现类似错误
wget
- 如果我
md5sum
或cp
Ubuntu 上的文件没有错误,则表明smbmount
Windows Server 可以处理 6GB 文件。 - 如果 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 取代。