При переходе разработчиков 1С на операционные системы семейства Linux, в частности Ubuntu, одной из самых острых проблем становится организация коллективной разработки. Часто основное хранилище конфигурации (файловое) остается на Windows-сервере или сетевом ресурсе (NAS), и попытки подключиться к нему "напрямую" через стандартный проводник или обычное сетевое окружение заканчиваются ошибками доступа к базе данных 1cv8ddb.1CD.
В данной статье мы подробно разберем, почему возникают ошибки совместного доступа, как правильно настроить монтирование сетевых ресурсов и какой способ подключения является наиболее надежным с точки зрения целостности данных 1С.
Многие пользователи Ubuntu пытаются подключиться к хранилищу, используя встроенные средства файлового менеджера (Nautilus). В этом случае путь к хранилищу выглядит примерно так: /run/user/1000/gvfs/smb-share:server=server,share=folder. Мы должны понимать, что GVFS (GNOME Virtual File System) — это виртуальная прослойка, которая отлично подходит для копирования фотографий или просмотра документов, но абсолютно непригодна для работы с базами данных.
Файл хранилища 1С (.1CD) требует низкоуровневых операций блокировки (locking), которые GVFS не может корректно транслировать в протокол SMB. В результате 1С выдает ошибку: "Ошибка открытия файла базы данных" или "Ошибка разделения доступа". Для стабильной работы нам необходимо монтировать сетевой ресурс на уровне ядра системы.
Этот метод позволяет "обмануть" систему, заставив ее думать, что удаленная папка является локальной директорией. Рассмотрим пошагово процесс настройки.
Для начала нам необходимо установить пакет, позволяющий работать с протоколом SMB/CIFS, и подготовить точку монтирования. Выполним следующие команды в терминале:
sudo apt update
sudo apt install cifs-utils
sudo mkdir /media/winshare
Теперь проанализируем ситуацию с правами доступа. Нам нужно, чтобы текущий пользователь Ubuntu имел полные права на чтение и запись в эту папку. Для этого выясним свой ID, выполнив команду id в терминале. Обычно это 1000.
После подготовки выполним монтирование. Разберем детально команду, которая решает проблему большинства пользователей:
sudo mount -t cifs //192.168.0.2/v8$/ /media/winshare -o username=windows_user,password=12345,uid=1000,iocharset=utf8,file_mode=0777,dir_mode=0777,nobrl
Разберем параметры этой команды подробнее:
.1clck.Если при работе с хранилищем вы продолжаете наблюдать странные "вылеты" конфигуратора или сообщения о повреждении файла, проанализируем настройки кэширования. Протокол SMB по умолчанию пытается кэшировать данные для ускорения работы, что может быть губительно для базы данных .1CD.
В таких случаях рекомендуется добавить параметр cache=none в команду монтирования. Это немного снизит скорость работы, но гарантирует, что 1С всегда видит актуальное состояние файла. Итоговая команда будет выглядеть так:
sudo mount -t cifs //server/share /media/winshare -o username=user,password=pass,uid=1000,nobrl,cache=none,vers=3.0
Здесь мы также добавили vers=3.0, чтобы явно указать современную версию протокола SMB, что повышает стабильность соединения в современных сетях.
Если вы хотите навсегда забыть о проблемах с правами доступа, монтированием и блокировками, мы рекомендуем рассмотреть переход на использование Сервера хранилища конфигурации (crserver). Это штатная утилита от фирмы "1С", которая поставляется вместе с платформой.
Выясним преимущества этого метода:
tcp://server_name/repo_name.Для реализации этого метода запустите на Windows-сервере файл crserver.exe (его можно установить как службу Windows). После этого в Ubuntu при подключении к хранилищу просто укажите строку соединения через протокол tcp.
Проанализируем еще несколько моментов, которые могут помешать успешному подключению:
1. Права на стороне Windows. Убедитесь, что пользователь, под которым вы подключаетесь к шаре, имеет права не только на "Чтение", но и на "Изменение" на уровне файловой системы NTFS и на уровне общего доступа (Sharing tab).
2. Оппортунистические блокировки (Oplocks). На стороне Windows-сервера иногда требуется отключить Oplocks для папки с хранилищем. Это предотвращает ситуацию, когда Windows "придерживает" файл в своем кэше, не давая Linux-клиенту вовремя внести изменения.
3. Временные файлы. 1С активно создает временные файлы в папке хранилища. Если вы используете uid=nobody или gid=nogroup (как предлагалось в некоторых сообщениях на форумах), конфигуратор может не иметь прав на удаление этих файлов, что со временем приведет к блокировке всего хранилища.
Резюме: Для быстрой настройки используйте монтирование через mount -t cifs с обязательным параметром nobrl. Для серьезной командной разработки в среде Linux единственным верным решением будет поднятие crserver.