у нас есть несколько приложений DOS (Clipper), которые совместно используют файлы базы данных на файловом сервере. Приложения работают под XP. Это работало около двух десятилетий с Netware и в течение многих лет с Samba (рядовой сервер) без проблем.
Несколько недель назад я обновил openSUSE с 11.4 (samba-3.6.3) до 12.2 (samba-3.6.7) и поменял оборудование (на AMD E-450 с 6 ГиБ RAM). Что еще хуже (с точки зрения отладки), примерно в то же время коммутатор был изменен (с 100 Мбит на коммутатор с 48 портами Гб).
С тех пор (неясно, какие именно изменения, потому что пользователи не сообщают нам сразу ...) некоторые пользователи сталкиваются с серьезными проблемами с некоторыми из этих приложений DOS, которые не могут быть точно воспроизводимы. Похоже, это касается прав доступа или (что более вероятно) блокировки файлов. Насколько нам известно, эти приложения блокируют байтовый диапазон файлов. Я не знаю, могу ли (и как) получить такую отладочную информацию от самбы. Нет никаких общих проблем с доступом к этим файлам. Блокировки включены (отключение недопустимо и тоже не решает проблему).
Затем я изменил структуру сервера: раньше Samba работала на реальном оборудовании. Я сделал хост-ОС простой установкой, служащей хостом для виртуальных машин) и поместил Samba в виртуальную машину, используя установку openSUSE 11.4, которая раньше работала без проблем. С тех пор проблемы не исчезли. Обновление Samba VM (до 12.2), похоже, только ухудшило ситуацию. Похоже, что ни одна из этих конфигураций не повлияла на обычный доступ к общему ресурсу Windows. ifconfig показывает, что примерно один из каждых 4000 пакетов RX отбрасывается на интерфейсе, что мне кажется нормальным.
Есть идеи, касающиеся реальной проблемы или точной отладки / трассировки Samba, которые показывают мне, в чем именно проблема при связи между Samba и клиентами XP?
Без лучших идей я, вероятно, сначала попробую другой сетевой адаптер. Много лет назад это решило для меня (общую, не связанную с DOS) проблему Samba.
Убедитесь, что ошибка изолирована с точки зрения клиента. Вы должны понимать, что пытается сделать клиент, прежде чем выполнять отладку на стороне сервера.
Обратите внимание, что DOS ничего не знает о Oplocks - поэтому я действительно не понимаю, как они влияют на вас в этой конкретной проблеме. Когда клиент блокирует файл с помощью стандартного системного вызова DOS, он блокируется как единое целое. Затем второй клиент столкнется с описанной «ошибкой 5».
Поскольку это работало ранее, предполагается, что приложение не использует стандартный механизм блокировки, а вместо этого использует его собственный - чем бы он ни был. Это будет означать, что какой-то другой процесс блокирует файл. Вы можете искать открытые файлы (замки) с помощью lsof
.