Общая папка в VirtualBox для Apache
Мой хост-компьютер - это ArchLinux, и я запускаю Apache в гостевой системе CentOS. У меня есть конфигурация vhost и весь код сайта в общей папке. Чтобы установить конфигурацию vhost в общую папку, я установил общую папку как apache: apache.
shared /mnt/shared vboxsf defaults,uid=48,gid=48 0 0
Когда я редактирую файлы на хосте, Apache последовательно запускает отправку старых версий файла с завершающими символами. В vim они отображаются как ^ @, поэтому я думаю, что они имеют нулевые символы. Число нулевых символов связано с количеством изменений, которые я делаю, даже если я редактирую первую строку, нулевые символы отображаются в конце. Если бы я размышлял, это выглядело как плохой diff.
Если я остановлю httpd
, umount
, перемонтирую и запустив httpd
, файл выглядит нормально. Просто перезагрузка httpd не помогает.
Как я могу отладить консоль? Ничего не выскочил на меня в /var/log
.
Ответы
Ответ 1
Я был неправ; это происходило в другом месте, но я заметил, что это было только с файлами .css и .js. Поиск привел меня к этому сообщению, в котором говорится о проблеме с vboxsf и небольшими файлами.
Решение состоит в том, чтобы установить в Apache
EnableSendfile off
Ответ 2
В lighttpd
решение состоит в том, чтобы добавить нижнюю строку к lighttpd.conf
server.network-backend = "writev"
Смотрите: Lighttpd сломанный при работе в общей папке Virtualbox
Ответ 3
Чтобы ответить на конкретный вопрос "как я могу начать отладку mount":
(приведенное ниже перефразирование, основанное на исследовании, которое я только что сделал с проблемой, вызванной тем же ошибкой в Virtualbox, но с другим веб-сервером)
После диагностики проблемы происходит где-то в том, как Apache считывает файлы внутри виртуального хоста, я бы использовал "strace -p" внутри виртуального хоста для регистрации системных вызовов Apache.
В то время как stracing, запросите только один усеченный/поврежденный файл.
Тщательный диагноз покажет, что он правильно статирует файл, чтобы получить его длину. И затем он обслуживает его, используя syscall sendfile. В основном подтверждение файла отправки неверно, что означает, что это ошибка на виртуальной машине.
Поиск "sendfile virtualbox" приведет вас к этим ошибкам.
https://www.virtualbox.org/ticket/9069
https://www.virtualbox.org/ticket/12597