30

我的主机是 ArchLinux,我在 CentOS 来宾中运行 Apache。我在一个共享文件夹中有虚拟主机配置和所有站点代码。为了能够将虚拟主机配置放在共享文件夹中,我将共享文件夹安装为 apache:apache。

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

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

如果我 stop httpd, umount, remount, and starthttpd文件看起来很好。只是重新启动 httpd 并没有帮助。

我将如何调试挂载?什么都没有在我身上跳出来/var/log

4

3 回答 3

53

我错了; 它发生在其他地方,但我注意到它仅适用于 .css 和 .js 文件。搜索使我找到了这篇文章,其中讨论了 vboxsf 和小文件的问题。

解决方案是在 Apache 中设置

    EnableSendfile off
于 2011-06-28T18:37:47.430 回答
2

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

server.network-backend = "writev"

请参阅:从 Virtualbox 共享文件夹提供服务时 Lighttpd 损坏

于 2012-12-27T14:03:31.740 回答
1

要回答具体问题“我该如何调试挂载”:

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

在诊断出问题发生在 Apache 如何读取虚拟主机内的文件后,我将在虚拟主机内使用“strace -p”来记录 Apache 的系统调用。

跟踪时,只请求一个被截断/损坏的文件。

仔细诊断将显示它正确地说明了文件以获取其长度。然后它使用 sendfile 系统调用为它提供服务。基本上确认 sendfile 行为不端,这意味着它必须是虚拟机中的错误。

搜索“sendfile virtualbox”会将您带到这些错误。

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

于 2014-11-05T15:32:14.003 回答