Проблемы чтения общих папок в Virtualbox от Apache
У меня проблема с файлами на смонтированном общем ресурсе внутри машины Virtualbox.
Проблема в том, что, хотя я могу видеть содержимое файлов достаточно хорошо из оболочки, эти же файлы получаются слегка поврежденными, усеченными или в старых версиях, иногда при подаче через http через веб-сервер Apache.
Кажется, проблема возникает только после того, как файл достигает определенной длины (100-200 символов). Иногда в конце добавляются нечитаемые символы, в результате чего в браузере появляются маленькие вопросительные знаки. Другим распространенным симптомом является то, что когда файл изменяется с хоста, нет способа заставить Apache обслуживать новую версию. (Проблема не связана с ETag, и у Apache есть прекрасные права на чтение для всех файлов. Я сомневаюсь, что это связано исключительно с кодировками.)
Это действительно похоже на проблему на уровне файловой системы, которая проявляется только в Apache.
Некоторые факты:
Ведущий: MacBook Pro/Snow Leopard
Гость: Fedora 16
Apache: 2.2.22
VirtualBox: 4.1.8
Я пробовал монтировать в fstab, но также вручную, меняя идентификатор пользователя на apache.
Я прошу прощения за неопределенное (неисследованное?) Описание проблемы, но я действительно не знаю, с чего начать, и я надеюсь получить некоторые подсказки в правильном направлении. Это настоящая проблема - Mac, Virtualbox, Fedora или Apache?
ОБНОВЛЕНИЕ: я понимаю, что есть нечто большее, чем Apache httpd, неправильно обслуживающий файлы - иногда, когда я создаю новую папку на хосте, запись отображается в виде группы вопросительных знаков при составлении списка каталогов в оболочке гость. Само собой разумеется, что я не могу перейти в эту новую папку, пока я не перезагрузил гостя.
2 ответа
Взгляните на тикет на https://www.virtualbox.org/ticket/819, там они предлагают то, что вы уже нашли, это директива Apache EnableSendfile. Отключение этой директивы, похоже, решает проблему на наших серверах.
Некоторые поиски "apache mmap" показывают, что Apache будет использовать mmap(2) для доступа к файлам, когда файлы превышают определенный размер (который по умолчанию составляет 1 байт в системах, отличных от SunOS). Эта проблема может быть вызвана ошибкой в поддержке VirtualBox для доступа mmap к общим папкам.