MyTetra Share
Делитесь знаниями!
Samba, 1C, блокировки, файловая база данных
Время создания: 04.02.2012 15:59
Текстовые метки: 1C, 1С
Раздел: Компьютер - Linux - Samba
Запись: xintrea/mytetra_syncro/master/base/1328360384n358oksn0o/text.html на raw.github.com

Samba 1с7.7 и блокировки

Уже где-то на протяжении недели танцую самбу с бубном в руках. Целью сих увлекательных манипуляций,среди всего прочего, является наличие в месте, где я осуществляю свою проф-ую деят-ть работающего(это важно)) файлового сервера Samba с базами 1с на борту (дистрибутив - ubuntu 9.10 Desktop, в начале эпопеи стоял Debian Lenny, но он не выдержал моих издевательств)). В Дебиане использовалась самба 3.25, в бубунте - 3.4.0.

То, что проделывают самба на пару с 1ской после того, как к расшаренным базам подключаются хотя бы 2 пользователя, совместной работой назвать трудно.

Тормоза неприемлемые однозначно и дело тут совершенно точно не в пропускной способности сети, производительности файловой системы и жёстких дисков и т.д. и иже с ними. В инете по форумам народ носится с блокировками и экспериментами в smb.conf(комбинируют аттрибуты конфигурационного файла различными способами с целью, видимо посчитать максимально-возможное число комбинаций)). Потому как ни у кого не работает, окромя тех, у кого работает с самого начала с коробки без лишних манипуляций или тех, кто является или являлся счастливым обладателем самбы под версиями в районе 2.0.7-2.0.10.(ну плюс-минус чуть-чуть, не помню, может и 2.2 у кого-то работала).

На более менее адекватное, на мой взгляд, объяснение этой оказии я наткнулся на opennet.ru (http://opennet.ru/base/net/1csamba.txt.html). ЦИТИРУЮ самое главное:

Для того, чтобы никому больше не пришлось с этим возиться, сообщаю, что виндовозная 1С-бухгалтерия не просто использует блокировки несуществующих байтов за концом файлов (прием вобщем-то известный), а использует ну очень большие смещения этих байтов, и на таких гигантских числах Самба начинает спотыкаться. Чтобы она вела себя культурно - надо залезть в исходники Самбы, в файл util.c, найти там функцию fcntl_lock, и обнаружить, что авторы предлагают там два варианта куска кода, выделенные директивами условной компиляции. Так вот тот вариант, что выбран по умолчанию - не работает нормально. адо выбрать второй - и все проблемы исчезают.

Искреннее спасибо автору за зацепку, но блин не знаю я C. И хрен его знает как работают эти директивы и как выбрать второй вариант, тем более что в самбе поздних версий файлик util.c имеет несколько другой вид и функция fcntl_lock отсутствует, есть только похожая и кусок кода, напоминающий таковой в более ранних исходниках. Самбу версий 2.0.7 и 2.0.10 пытался компилить на Дебиане после сноса 3.25 через aptitude, но фокус не удался то ли из-за разницы в годах выхода моего Дебиана и самбы(то ли структура каталогов в корневой фс настолько изменилась, то ли хрен его знает), а может просто руки кривые пока что(опыта не так много). Всё компилилось как положено, но не сказать чтобы так же и работало).

Вижу для себя три выхода:

1)Найдутся умные дяди-линуксоиды (может и тёти-линуксюхи, кто знает) с добрыми красными глазами и безвозмездно помогут;

2) Выход(самый простой))): Я по-бырому выучу язык С, по-бырому разберусь с исходниками, подправлю чего где надо и буду потом своим детям рассказывать страшную историю о том, как я стал программером;

3) Откопаю на каком-нибудь сайте пыльный, засалившийся образ какого-нибудь престарелого дистриба, чтоб нормально скомпилить самбу версии 2.0.10 на нём (надеясь, что wine, по-любому необходимая мне для запуска специфической проги, не откажется, в свою очередь, ставится на старый дистриб). Приветствуются как квалифицированные советы, так и вообще любая новая информация, можно тоже в виде поэмы, как и всё вышеизложенное). Наверняка тема всё ещё животрепещущая.

Ответы

1.

veto oplock files = /*.mdb/*.MDB/*.dbf/*.DBF/

в конфиге самбы может помочь...

но на самом деле из-за этой проблемы в свое время перешли на sql...

2.

У меня базы 1С лежат на самбе с почти дефолтными настройками. Есдинственное, что добавил, это

csc policy = disable

для шары с базами. Блокировки и какие-либо другие специфические настройки не трогал.

Вот весь конфиг:

[global]

# Main settings

netbios name = Server

workgroup = CALOCAL

server string =

interfaces = lo, brlan

bind interfaces only = Yes

socket options = IPTOS_LOWDELAY TCP_NODELAY

wins support = Yes

dns proxy = No

time server = Yes

domain logons = Yes

preferred master = Yes

utmp = Yes

logon home =

logon path =

template homedir =

logon script = logon.bat

load printers = No

printing = bsd

printcap name = /dev/null

disable spoolss = yes

passdb backend = ldapsam:ldapi://%2fvar%2frun%2fopenldap%2fslapd.sock

ldap admin dn = cn=ldapadmin,dc=calocal

ldap suffix = dc=calocal

ldap user suffix = ou=Users

ldap group suffix = ou=Groups

ldap machine suffix = ou=Machines

ldap idmap suffix = ou=Idmaps

ldap passwd sync = Only

add machine script = /usr/sbin/ldapaddmachine '%u' smb-domain-computers

add user script = /usr/sbin/ldapadduser '%u' smb-domain-users

add group script = /usr/sbin/ldapaddgroup '%g'

add user to group script = /usr/sbin/ldapaddusertogroup '%u' '%g'

delete user script = /usr/sbin/ldapdeleteuser '%u'

delete group script = /usr/sbin/ldapdeletegroup '%g'

delete user from group script = /usr/sbin/ldapdeleteuserfromgroup '%u' '%g'

set primary group script = /usr/sbin/ldapsetprimarygroup '%u' '%g'

rename user script = /usr/sbin/ldaprenameuser '%uold' '%unew'

# Global share settings

admin users = @smb-domain-admins

write list = @smb-domain-admins @ftpadmins

browseable = Yes

# We use POSIX ACLs to control real permissions

writeable = Yes

inherit acls = Yes

inherit owner = Yes

[netlogon]

path = /home/ftp/netlogon

browseable = No

[pub]

path = /home/ftp/pub

[shared]

path = /home/ftp/shared

[private]

path = /home/ftp/private/%u

root preexec = /etc/samba/scripts/create-private-dir %u

[private-all]

path = /home/ftp/private

valid users = @ftpadmins

[1c-databases]

path = /home/ftp/1c-databases

valid users = @smb-1c-users

csc policy = disable

3.

Для ускорения работы можно вынести базы 1С на отдельный раздел с какой-нибудь быстрой ФС (типа ext4) и монтировать с опцией noatime. Ещё можно покрутить настройки TCP/IP-стека. У меня после добавления вот этого в sysctl.conf:

net.core.rmem_default = 1048576

net.core.rmem_max = 1048576

net.core.wmem_default = 1048576

net.core.wmem_max = 1048576

kernel.shmmax = 167772160

Скорость самбы увеличилась в среднем процентов на 10 (тестировал iozone'ом, запущенным с вендового клиента).

4.

Всё дело в оплоках. Кусок smb.conf для 1с-ной шары:

[1C-bases]

comment = Our 1C tank-a-drom

path = /home/1С

public = no

valid users = lu mari dina

writeable = yes

printable = no

create mask = 0770

browseable = yes

share modes = yes

>oplocks = no

>level2 oplocks = no

>blocking locks = no

>locking = yes

>strict locking = no

force create mode = 0770

force directory mode = 0770

Необходимые установки выделены '>'

Работает уже лет пять под любыми версиями самбы. Текущих версий две: 3.0.4 и 3.2.5. Дистриб: Слака.

Во многих рекомендациях по настройке 1с-ной шары рекомендуют эти опции не трогать из-за того, что скорость сетевых файловых операций снизится. Однако этого не произошло и быстродействие именно 1С:Бухгалтерии даже превышало виндовозные.

5.

>oplocks = no

>level2 oplocks = no

>blocking locks = no

>locking = yes

>strict locking = no

Как ни странно, но при таких настройках у меня юзвери 1с не получали сообщение о том, что кто-то уже юзает базу и в один и тот же документ писали разом несколько человек.

При нижеследующей настройке - 2й год полет отличный (3 тьфу!).

Сервер с базами 1с член домена DOM на Win 2003. Дистр - слака 12.0, самба 3.2.15. Вот конфиг:

[global]

interfaces = eth0 lo

hosts allow = 192.168.0. 127.

netbios name = dom-1c

workgroup = dom

password server = 192.168.0.1

server string = 1c bases

security = ADS

realm = DOM

#passdb backend = tdbsam

allow trusted domains = yes

socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192

os level = 1

preferred master = No

local master = No

domain master = No

dns proxy = No

ldap ssl = no

strict locking = No

time server = no

auth methods = winbind

encrypt passwords = yes

winbind use default domain = yes

idmap uid = 10000-20000

idmap gid = 10000-20000

winbind enum users = yes

winbind enum groups = yes

log file = /var/log/samba/log.%m

max log size = 1024

log level = 1

display charset = koi8-r

unix charset = koi8-r

dos charset = cp866

nt acl support = yes

printcap name = /etc/printcap

max xmit = 65535

dead time = 15

use sendfile = no

max open files = 65535

kernel oplocks = yes

[1c-buh]

comment = 1c for Buhgalteriya

path = /1c/buh

admin users = @"DOM\администраторы домена"

read only = no

create mask = 1775

directory mask = 1775

printable = no

available = yes

map acl inherit = yes

inherit owner = no

inherit acls = no

inherit permissions = no

acl check permissions = true

acl map full control = true

blocking locks = yes

level2 oplocks = yes

locking = yes

oplocks = yes

strict locking = no

posix locking = yes

browseable = yes

share modes = yes

Так же в этом разделе:
 
MyTetra Share v.0.65
Яндекс индекс цитирования