我在VirtualBox 4的Debian 6 guest上安装了一个lighttpd web服务器。我在virtualbox共享文件夹中有www目录,这样我就可以在Windows主机上开发一个网站了。
我的问题是由不同文本编辑器创build的另外两个相同的文件由lighttpd不同地服务。 Vim可以正常工作,但是使用echo(或其他编辑器)创build文件会生成在磁盘上看起来不错的文件,但是一旦lighttpd提供服务,文件就会被损坏。 只有当文档根目录位于共享的virtualbox文件夹上时,才会出现此问题。 显示这个问题比解释它更容易,所以我在下面做了一个testing用例。
编辑:这是某种caching问题,运行echo 3 > /proc/sys/vm/drop_caches
之前wget使下载的文件工作正常。 仍然没有解释为什么vim不受影响,但…
root@Apricots:/var/www/xxx.org/http# vim vim.txt (I type 'Line 1' into vim, on one line) root@Apricots:/var/www/xxx.org/http# echo 'Line 1' >> echo.txt root@Apricots:/var/www/xxx.org/http# md5sum vim.txt echo.txt 376cbf50d47a30459adca22b15964912 vim.txt 376cbf50d47a30459adca22b15964912 echo.txt root@Apricots:/var/www/xxxt.org/http# cd ~ root@Apricots:~# wget xxx.org/vim.txt xxx.org/echo.txt (The two files download OK) root@Apricots:~# md5sum vim.txt echo.txt 376cbf50d47a30459adca22b15964912 vim.txt 376cbf50d47a30459adca22b15964912 echo.txt root@Apricots:~# cat vim.txt Line 1 root@Apricots:~# cat echo.txt Line 1 root@Apricots:~# cd /var/www/xxx.org/http/ root@Apricots:/var/www/xxx.org/http# vim vim.txt (I type 'Line 2' in a second line in vim) root@Apricots:/var/www/xxx.org/http# echo 'Line 2' >> echo.txt root@Apricots:/var/www/xxx.org/http# md5sum vim.txt echo.txt ef3095884e8daf72dc4d2ea71306caa7 vim.txt ef3095884e8daf72dc4d2ea71306caa7 echo.txt root@Apricots:/var/www/xxx.org/http# cat vim.txt Line 1 Line 2 root@Apricots:/var/www/xxx.org/http# cat echo.txt Line 1 Line 2 root@Apricots:/var/www/xxx.org/http# cd ~ root@Apricots:~# rm vim.txt echo.txt root@Apricots:~# wget xxx.org/vim.txt xxx.org/echo.txt (They both download fine again) root@Apricots:~# md5sum vim.txt echo.txt ef3095884e8daf72dc4d2ea71306caa7 vim.txt 0b8835dcb6bb73c7a4eb25301101699a echo.txt root@Apricots:~# cat vim.txt Line 1 Line 2 root@Apricots:~# cat echo.txt Line 1 root@Apricots:~# hexdump vim.txt 0000000 694c 656e 3120 4c0a 6e69 2065 0a32 000000e root@Apricots:~# hexdump echo.txt 0000000 694c 656e 3120 000a 0000 0000 0000 000000e root@Apricots:~# echo "what the hell just happened there??" what the hell just happened there??
好的,修好它。 显然这是因为来自virtualbox共享文件夹的sendfile()
被破坏。 您可以通过添加指令server.network-backend = "writev"
来使lighttpd使用写入系统调用来发送文件。 既然这只是为了发展,不是什么大不了的事。
资源:
http://forums.virtualbox.org/viewtopic.php?f=6&t=38973
http://forums.virtualbox.org/viewtopic.php?f=8&t=24905&p=129089&hilit=vboxsf+web+server
我也有一些VBox共享文件夹中的文件的问题。 在我的情况下,我编辑主机上的文件,但是这些更改不会反映在虚拟机中。
为了解决这个问题,我必须umount
和mount
虚拟机内的共享文件夹,以便看到新的文件。 也许在这里发生类似的事情,你可能需要或者sync
它,或者通过umount
强制刷新,也可以mount
共享文件夹。
如果这样做,也许有一个选项自动执行。