VirtualBox for Apache中的共享文件夹

时间:2011-06-09 20:37:32

标签: apache virtualbox mount shared-directory

我的主机是ArchLinux,我在CentOS客户端运行Apache。我有共享文件夹中的vhost配置和所有站点代码。为了能够将vhost配置放在共享文件夹中,我将共享文件夹挂载为apache:apache。

shared    /mnt/shared    vboxsf    defaults,uid=48,gid=48  0 0

当我在主机中编辑文件时,Apache会一直开始发送带有尾随字符的旧版本文件。在vim中,它们显示为^ @,所以我猜它们是空字符。即使我编辑第一行,空字符的数量也与我所做的更改数量有关,最后显示空字符。如果我推测,它看起来像是一个糟糕的差异。

如果我停止httpdumount,重新安装,并启动httpd,该文件就可以了。只是重新启动httpd无济于事。

我如何调试挂载?在/var/log中没有任何事情发生在我身上。

3 个答案:

答案 0 :(得分:53)

我错了;它发生在其他地方,但我注意到它只有.css和.js文件。搜索引导我this post,它讨论了vboxsf和小文件的问题。

解决方案是在Apache中设置

    EnableSendfile off

答案 1 :(得分:2)

lighttpd上解决方法是将以下行添加到lighttpd.conf

server.network-backend = "writev"

请参阅:Lighttpd broken when serving from Virtualbox shared folder

答案 2 :(得分:1)

要回答具体问题"我该如何调试mount":

(以下是释义,基于我刚刚对Virtualbox中的相同错误导致的问题进行的调查,但使用不同的Web服务器)

在诊断出问题发生在Apache如何读取虚拟主机内的文件之后,我会使用" strace -p"在虚拟主机内部,用于记录Apache的系统调用。

在stracing时,只请求一个截断/损坏的文件。

仔细诊断会发现它正确统计文件以获取其长度。然后它使用sendfile系统调用来提供它。基本上确认sendfile是行为不端的,这意味着它必须是虚拟机中的错误。

搜索" sendfile virtualbox"带你到这些错误。

https://www.virtualbox.org/ticket/9069 https://www.virtualbox.org/ticket/12597