Как в Debian/Ubuntu GNU/Linux примонтировать папку с компа под Windows через SMB ?

Зачем оно нужно?

Вот такая вот задача давеча передо мною встала. Вас может удивить, зачем мне мог понадобиться такой изврат? Ну, тогда вот вам присказка: понадобилось мне вести разработку сайта на Magento. В-общем-то, у меня есть сервак под Ubuntu, на котором хостятся все мои личные сайты, в том числе и тот, что вы в данный момент читаете. И разработку я тоже веду на нём. Сервак находится у меня дома под стулом в той же локальной сети, что и комп, за которым я "живу". Папки с файлами сайтов расшарены по SMB (при помощи Samba), то есть виндовые компы их видят у себя в разделе "Локальная сеть" как расшаренные папки, так что я могу менять их напрямую без необходимости заливать их на сервак при помощи каких-нибудь там FTP, благодаря чему я не трачу на это время, и в целом процесс разработки идёт куда быстрее. В то же время мне не надо держать Apache на своём рабочем компе и держать его включенным всегда, чтобы на сайты можно было зайти. Короче, когда речь идёт о единственном разработчике, то благодать да и только.

Но вот мне понадобилось разрабатывать сайт на Magento. Ранее я уже, конечно, имел большой опыт в работе с этим замечательным движком, но тогда у меня не было необходимости иметь дома работающей копии сайта. А тут вот понадобилось. И всё бы хорошо, только, мало того, что Magento состоит из тьмы мелких файлов, с которыми обычный жёсткий диск работает жутко медленно по определению, так ещё на своей машине я их открываю по SMB, это вообще такие тормоза получаются, что словами не передать. NetBeans открывал проект минут по 20 (как назло, в нём отключить сканирование файлов проекта нельзя), а когда открыл — страшно было закрывать. Перезагрузка компа, соответственно — катастрофа. Надо было с этим что-то делать. Поменять IDE не предлагайте, из перепробованных мною NetBeans самый лучший, и я осознанно остановился на нём. Поднимать на своём рабочем компе Apache мне очень не хотелось, тем более, что уже порты проброшены к серваку и всё такое прочее. Нет, конечно, можно было бы какой-нибудь 81-й порт пробросить, или на серваке запилить реверс-проксирование через какой-нибудь там nginx (который ещё надо поставить и сконфигурировать). Иметь копию у себя и заливать по сейву на сервак? Тоже жопашно. Короче, нужно решение попроще.

А решение пришло мне в голову такое: хранить файлы проекта у себя на компе, на SSD-накопителе, который все эти мелкие файлы Magento и Zend'а переваривает в момент и не давится. Задача, собственно, поставлена. Это была присказка, а сказка-то ещё впереди.

Монтируем папку на компе с Debian/Ubuntu GNU/Linux

Итак, как же нам примонтировать раздел по SMB под Ubuntu/Debian? Да, в-общем-то, довольно просто:

sudo mount -t cifs //IP_виндового_компа/путь_к_папке_на_SMB /куда_монтировать_в_linux -o username=логин_по_SMB,password=пароль_по_SMB,rw,uid=юзер_linux,gid=юзерская_группа_linux

Думаю, тут всё и без комментариев понятно. Естественно, вам понадобятся рутовые права, чтобы это провернуть. Например:

sudo mount -t cifs //192.168.0.104/shared-ssd /shared-ssd -o username=ABTOMAT,password=нискажу,rw,uid=abtomat,gid=abtomat

 

192.168.0.104 — это айпишник моего компа в локальной сети, в нём расшарена папка "shared-ssd". Я её смонтировал в /shared-ssd. Соответственно, если я на серваке зайду в /shared-ssd. то я увижу там файлы с моего компа и смогу их менять. Далее мой логин и пароль в SMB, права чтения и записи для соответствующего юзера и группы, от имени которого там будут выполняться действия. Думаю, всё понятно.

require_once: cannot allocate memory

Итак, я залил туда файлы сайта, проверил, что сайт работает, а файлы с SSD открываются быстро и стал уже радоваться. Но не тут-то было. В скором времени выяснилось, что иногда, то тут, то там, сайт при заходе на различные страницы выдаёт ошибки типа "require_once: cannot allocate memory". Видимо, винда всё-таки не отдаёт по SMB файлы в каких-то случаях. Насколько мне удалось выяснить, Windows не готова выдавать большие количества файлов с высокой скоростью. Не знаю, по каким причинам так сделано, может, чтобы ходильцы по локальным сетям не "вешали" комп, за которым люди сидят, но в моём случае от передачи большого количества файлов было никуда не деться.

В реестре есть ключи для настройки этого дела. Решение проблемы — создать эти ключи (при их отсутствии) и выставить им соответствующие значения:

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\LargeSystemCache поставить 1

HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\Size выставить 3

После этого перезагрузите виндовую машину, и всё заработает. По крайней мере, с тех пор, как я так сделал, эта проблема полностью исчезла. NetBeans открывает проекты в момент, извне разрабатываемый проект доступен, в-общем, не нарадуюсь! Из минусов такого подхода заметил пока что таким образом сайты работают значительно медленнее, видимо, каждый раз по SMB файлы читать это очень небыстро. С другой стороны, я так держу только разрабатываемые версии сайтов, где мне важно, чтобы файлы открывались быстро на моём компе. А после релиза можно разместить проекты обычным путём или залить на хостинг.

Warning: imagettftext(): Could not read font in... при чтении tff из раздела, примонтированного при помощи cifs

Спустя некоторое время у меня возникла новая проблема! Дело в том, что мне понадобилось использовать библиотеку для работы с изображениями gd для кое-каких задач. Вдруг выяснилось, что gd упорно не хочет читать ttf-файл, расположенный на разделе, примонтированный при помощи cifs вышеописанным способом. Причём путь к файлу был правильный, потому что если нарочно подсунуть туда путь к несуществующему файлу, то ошибка там будет уже другая. Перепроверил всё! И возможность читать файл средствами php, и даже chmod 777 на всякий случай в отношении этого файла провернул. Ну не хочет его gd открывать! php его спокойно читает, а gd — нет. В итоге нашлось решение вот у этих парней. Оказалось, достаточно добавить опцию noserverinfo при вызове cifs, и всё заработает. Если интересно, там же приводится ссылка на подробности. Таким образом, наша команда уже будет выглядеть следующим образом:

sudo mount -t cifs //192.168.0.104/shared-ssd /shared-ssd -o username=ABTOMAT,password=нискажу,rw,noserverinfo,uid=abtomat,gid=abtomat

Когда я примонтировал раздел вот таким образом, то проблемы с gd исчезли, и всё заработало. Чего и вам желаю!

Если у вас есть какие-то уточнения или комментарии, не забудьте оставить их ниже.


You can leave a comment with "Facebook":
Не забывайте оставлять комментарии при помощи "ВКонтакте":
Яндекс.Метрика