// codeart.ru / Теория программирования / VirtualBox не любит sendfile Форум

VirtualBox не любит sendfile rss подписка

Автор: Evgeniy Sergeev

Наткнулся на один забавный баг в работе VirtualBox. Для разработки я использую Ubuntu 10.04, которая развернута под VirtualBox-ом. Это позволяет мне содержать систему для разработки в условиях, максимально приближенных к боевым, не засоряя операционку на хосте. При этом все текущие проекты хранятся в файловой системе на хосте, а в виртуальную машину подключаются через возможность VirtaulBox-а — shared folder support. На самом деле получается очень удобно, я могу без заморочек отдать образ девелоперской системы другим разработчикам или свободно перенести на ноутбук, который работает под Windows. Фактически это очень сильно развязывает руки.

Но оказалось, что не все так гладко в этой связке. А именно при работе с shared folder у VirtualBox некорректно отрабатывает sendfile, в результате у Nginx сносит крышу и при обновлении статичный файлов (например, js-скриптов) вместо обновленного файла выдается старый файл с куском нечитаемого мусора в конце. Долгое время я грешил на сам Nginx. Пытался отключить кэширование, пересобирал с кучей разных опций, но никакого эффекта это не дало. Чтобы избежать глюков я даже нашел промежуточное обходное решение, которое позволяло мне хоть как-то работать на виртуальной машине. Решение заключалось в том, что я тупо удалял старый файл и повторно сохранял его, не очень удобно, но действенно. В итоге, намучившись с удалением файлов, я плотно занялся поиском проблемы. Видимо, на этот раз удача сопутствовала мне, потому что я почти сразу наткнулся на тему, в которой обсуждались аналогичные проблемы.

После того как стало ясно, что проблемы в sendfile решение было очевидным. На девелоперской системе в конфигурации Nginx необходимо добавить строку:

sendfile off;

После чего виртуальная машина начинает работать как часы.

  1. VirtualBox Shared Folders и ChicagoBoss
  1. Лож, пи**ж, и провокация.
    При чем тут виртуал бокс?

    Это особенности работы сендфайла с примантированными удаленными файловыми система (типа nfs, cif (smb))
    Даже в доки по апучу этот момент упоминается.
    http://httpd.apache.org/docs/2.0/mod/core.html#enablesendfile

  2. Vovochka, VirtualBox при том, что для подключения shared folders используется файловая система «vboxsf», данный тип файловой системы становится доступен только после установки guest additions.
    По проблеме sendfile-а открыт тикет для VirtualBox — https://www.virtualbox.org/ticket/819

  3. Не думаю что принцип ее работы сильно отличается от cifs (для простоты реализации расшареных папок в винде). Посему и наследует болезни сетевых файловых систем.

  4. Vovochka, подозреваю, что реализация все же отличается. Будет время покопаюсь с этим вопросом

Leave a Reply

« »