У меня есть веб-сервер lighttpd, настроенный на гостевой системе Debian 6 в Virtualbox 4. У меня есть каталог www в общей папке виртуального бокса, так что я могу разработать веб-сайт в Хост Windows.
Моя проблема в том, что два идентичных файла, созданные разными текстовыми редакторами, по-разному обслуживаются lighttpd.Vim работает так, как должен, но создание файлов с помощью echo (или любого другого редактора) создает файлы, которые хорошо выглядят на диске, но становятся поврежденными, как только lighttpd их обслуживает. Эта проблема присутствует только тогда, когда корень документа находится в общей папке виртуального бокса. Возможно, проще показать эту проблему, чем объяснить ее, поэтому я выполнил тестовый пример ниже.
РЕДАКТИРОВАТЬ: Это своего рода проблема с кешированием: запускается 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??
Хорошо, зафиксированный это. По-видимому, это потому что sendfile()
от virtualbox совместно используемых папок повреждается. Можно заставить lighttpd использовать запись syscall для отправки файлов вместо этого, путем добавления директивы server.network-backend = "writev"
. Так как это только для разработки, не грандиозного предприятия.
Источник:
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. В моем случае я редактирую файлы на хост-машине, но изменения не отражаются в VM.
Для работы вокруг этого я имею к umount
и mount
совместно используемая папка в VM, чтобы заставить это видеть новые файлы. Возможно, что-то подобное происходит здесь, и Вы, возможно, должны были бы также sync
это или сила сброс umount
и mount
совместно используемая папка также.
Если это работает, возможно, существует опция сделать это автоматически.