хай!никак не могу разобраться с блокировками на файлы на самбовой шаре при передаче файла большого размера.
есть 3 компа, все linux (centos6) - samba-server, client1, client2
на samba-server поднята samba (samba-3.6.23 из centos репа). вот конфиг:
[global]
workgroup = MYGROUP
server string = Samba Server Version %v
netbios name = SAMBA
log level = 0 locking:6
log file = /var/log/samba/log.%m
max log size = 50
security = user
passdb backend = tdbsam
;kernel oplocks = No[public]
comment = Public Stuff
path = /public
public = yes
writable = yes
printable = no
write list = user1;oplocks = No
;posix locking = No
;level2 oplocks = No
;veto oplock files = /*.dat/
на обоих клиентах шара смонтирована вот так: mount.cifs //samba/public /samba -o username=user1затем на client1 я даю команду: cp bigfile.dat /samba
файл начинает копироваться на шару и в процессе копирования на client2 я даю команду:
mv /samba/bigfile.dat /homeи происходит следующее:
на client2) файл перемещается в /home, при этом он "битый", поскольку client1 ещё не успел докопировать его.
на client1) ещё какое то время тупит, "копируя" файл, хотя на шаре файла уже нет.
я как только не игрался опциями lock - никак не получается добиться блокировки файла на время копирования.поэтому вопрос, можно ли на самбе реализовать следующее поведение: клиент1 начинает копировать файл, клиент2 даёт команду на перемещение файла, но эта команда задерживается на выполнение пока не докопируется файл клиентом1.
> хай!oplocks = No
Должен работать.Может еще
locking = yesХотя, странно.
> хай!unix extensions = No
>> хай!
> unix extensions = No[global]
workgroup = MYGROUP
server string = Samba Server Version %v
netbios name = SAMBA4
log level = 0 locking:6
log file = /var/log/samba/log.%m
max log size = 50
security = user
passdb backend = tdbsamunix extensions = No
[public]
comment = Public Stuff
path = /public
public = yes
writable = yes
printable = no
write list = user1oplocks = No
level2 oplocks = No
не помогает, файл не блокируется :(
?
Попробуйте так:
flock -e /samba/xlock cp bigfile.dat /samba
flock -e /samba/xlock mv /samba/bigfile.dat /homeЕсли поможет, тогда хорошо.
И так:
mount.cifs //samba/public /samba -o username=user1,cache=strict,nobrl
> ?
> Попробуйте так:
> flock -e /samba/xlock cp bigfile.dat /samba
> flock -e /samba/xlock mv /samba/bigfile.dat /home
> Если поможет, тогда хорошо.
> И так:
> mount.cifs //samba/public /samba -o username=user1,cache=strict,nobrlвообще всё странно.
я попробовал пока убрать самбу и заменил её на windows 2008 r2 сервер. Хотелось посмотреть как поведёт себя в такой ситуации виндовс сервер.
Результат:
Я монтировал на линукс клиентах способами:
1) mount.cifs //win2008/public /win/ -o username=user1
2) mount.cifs //win2008/public /win -o username=user1,cache=strict,nobrl
как показала практика разницы - никакой.
предложенные вами команды
flock -e /win/xlock cp bigfile.dat /samba
flock -e /win/xlock mv /win/bigfile.dat /home
я проверил раз 8.в половине случаев я получал на клиенте2 (там где идёт операция mv) ошибку:
mv: невозможно удалить «bigfile.dat»: Текстовый файл занят
в другой половине поведение было как и прежде - файл перемещался в /home и был битым :((