Ubuntu – Apache has a 2GB file limit on a CIFS network drive

apache-2.2cifshttpUbuntuwindows-server-2008

Setup:

  1. A Windows and a Ubuntu Server are hosted in VMware ESXi
  2. I have a a 6GB file on a Windows share
  3. The Windows share is mount on Ubuntu with smbmount
  4. A symlink pointing to the 6GB file is created in a public_html directory, which is readable by Apache

The problem:

  1. wget gets an error Connection closed at byte 2130706432. Retrying. after downloading 2130706432 bytes (exactly 2032 MiB, and is the same every time)
  2. Apache returns 206 Partial Content without showing any errors in the log
  3. Same error even if I download from localhost
  4. Similar error when Firefox is used instead of wget
  5. No error if I md5sum or cp the file on Ubuntu, suggesting that smbmount and the Windows Server are OK with 6GB files.
  6. No error if Apache serve a 6GB file from the local disk, suggesting that Apache has no problems handling 6GB files.

Any ideas why Apache/symlink/smbmount/Windows would cause an error when used together? How can I fix the problem?

Software used:

  • VMware ESXi 4 Update 1
  • Windows Server 2008 R2
  • Ubuntu 8.04 Server, vmxnet3
  • Apache 2.2.8
  • mount.cifs 1.10-3.0.28a (as returned by smbmount -V)

Edit: If I use CentOS 4.8 x64 instead of Ubuntu 8.04, Apache will disconnect at byte 2147483647 (2GiB – 1byte) instead of 2130706432 (2GiB – 16MiB).

Best Answer

I had a similar problem where I worked, check out this bug report. The issue seems to be with EnableSendfile, so put this in your Apache config for the virtual host or global config:

EnableSendfile Off