我的主机是ArchLinux,我在CentOS客户端运行Apache . 我有共享文件夹中的vhost配置和所有站点代码 . 为了能够将vhost配置放在共享文件夹中,我将共享文件夹挂载为apache:apache .
shared /mnt/shared vboxsf defaults,uid=48,gid=48 0 0
当我在主机中编辑文件时,Apache将始终开始发送带有尾随字符的旧版本文件 . 在vim中,它们显示为^ @,所以我猜它们是空字符 . 即使我编辑第一行,空字符的数量也与我所做的更改数量有关,最后显示空字符 . 如果我推测,它看起来像一个糟糕的差异 .
如果我停止 httpd
, umount
,重新安装,并启动 httpd
,该文件看起来很好 . 只是重新启动httpd没有帮助 .
我该如何调试mount?在 /var/log
没有什么东西跳出来 .
3 回答
在
lighttpd
解决方案是将以下行添加到lighttpd.conf
见:Lighttpd broken when serving from Virtualbox shared folder
我错了;它发生在其他地方,但我注意到它只有.css和.js文件 . 搜索引导我this post讨论了vboxsf和小文件的问题 .
解决方案是在Apache中设置
要回答具体问题“如何调试mount”:
(以下是释义,基于我刚刚对Virtualbox中的相同错误导致的问题进行的调查,但使用不同的Web服务器)
在诊断问题发生在Apache如何读取虚拟主机内的文件之后,我会在虚拟主机内使用“strace -p”来记录Apache的系统调用 .
在stracing时,只请求一个截断/损坏的文件 .
仔细的诊断将揭示它正确地统计文件以获得其长度 . 然后它使用sendfile系统调用来提供它 . 基本上确认sendfile是行为不端,这意味着它必须是虚拟机中的错误 .
搜索“sendfile virtualbox”会将您带到这些错误中 .
https://www.virtualbox.org/ticket/9069 https://www.virtualbox.org/ticket/12597