Я экспериментировал со сценарием обмена файлами по сети через SMB/samba. Блокировка записи, примененная к удаленному файлу, остается в силе даже после 1 часа отключения от сети. Следующий тестовый пример описывает набор действий, выполняемых в хронологическом порядке:
-> Процесс (P1) на клиенте Windows (C1) и другой процесс (P2) на клиенте Linux (C2) подключены к
общий сервер Linux и доступ к тому же удаленному файлу.
-> И P1, и P2 открывают удаленный файл и получают дескриптор каждого.
-> P1 берет эксклюзивную блокировку по смещению 0.
-> P2 пытается получить эксклюзивную блокировку по смещению 0 в цикле, но не получает, так как P1 удерживает эксклюзивную блокировку
замок на том же смещении.
-> Теперь P1 отключен от удаленного файла (C1 отключен от сервера).
Результат: P2 не получает блокировки, мгновенно возвращает «EACCES», пытался около часа.
Результаты были неожиданными, так как в среде Wi-Fi, где системы постоянно входят и выходят, это потенциально может привести к остановке системы.
Спецификации ОС C1 — Windows 10 Корпоративная (версия: 20H2, сборка: 19042.1237)
Спецификации ОС C2 — Ubuntu 20.04.3 LTS (GNU/Linux 5.13.0-1021-azure x86_64)
Спецификации ОС Linux Server — Ubuntu 20.04.1 LTS (GNU/Linux 5.13.0-37-универсальный x86_64)
Версия Samba на C2 — 4.13.17 — Используемая команда Ubuntu — smbststus
Версия Samba на сервере Linux — 4.13.17 — Используемая команда Ubuntu — smbstatus
Версия SMB на C1 — Используемая команда SMBv2/v3 — sc.exe qc lanmanworkstation
Версия протокола — 3.1.1 (одинаковая для обоих подключений) Используемая команда — smbstatus
Возможно ли иметь практический тайм-аут на сервере, чтобы другим клиентам не приходилось долго ждать, чтобы получить эксклюзивные блокировки? Любые входы помогут.
Это содержимое конфигурационного файла smb на сервере Linux (используемое имя общего ресурса — sambashare):
[Глобальный]
рабочая группа = РАБОЧАЯ ГРУППА
строка сервера = сервер %h (Samba, Ubuntu)
файл журнала = /var/log/samba/log.%m
максимальный размер журнала = 1000
регистрация = файл
действие паники = /usr/share/samba/действие паники %d
роль сервера = автономный сервер
подчиняться ограничениям pam = да
синхронизация паролей unix = да
программа passwd = /usr/bin/passwd %u
пароль чата = *Enter\snew\s*\spassword:* %n\n
*Повторно введите\snew\s*\spassword:* %n\n *password\updated\ssuccessfully* .
изменение пароля pam = да
сопоставление с гостем = плохой пользователь
usershare разрешить гостям = да
[принтеры]
комментарий = Все принтеры
просмотр = нет
путь = /var/спул/самба
для печати = да
создать маску = 0700
[печать$]
комментарий = Драйверы принтера
путь = /var/lib/samba/printers
[самбашаре]
комментарий = Самба в Ubuntu
путь = /home/ubuntu/smb
только чтение = нет