파일 읽기 간격이 <= 10초인 경우 Windows 클라이언트는 Linux Samba 파일을 로컬로 새로 고치지 않습니다.

파일 읽기 간격이 <= 10초인 경우 Windows 클라이언트는 Linux Samba 파일을 로컬로 새로 고치지 않습니다.

Windows 클라이언트가 Linux smb 공유의 파일을 <= 10초 간격으로 읽도록 하면 Windows 클라이언트가 해당 파일에 대해 잘못된(캐시?) 정보를 표시합니다.

나는 이것을 여러 시스템에서 재현했습니다.

재현 단계의 예:

1) Linux Samba 공유를 설정합니다. 이 예에서는 Debian을 사용하고 Samba를 설치합니다. 예:

sudo mkdir /test
sudo chmod 777 /test

smb.conf가 추가되었습니다:

[test]    
read only = no    
locking = no    
path = /test/    
guest ok = yes

2) 이 디렉터리를 Windows 클라이언트의 드라이브로 매핑합니다(이 테스트에서는 L:을 사용합니다).

3) 삼바 서버에 일부 텍스트가 포함된 파일을 만듭니다.

nano /test/test.txt
ORIGINAL

4) 5초마다 파일을 보려면 Windows 시스템에서 간단한 배치 파일을 만듭니다.

copy con test.bat
@echo off
cls
:1
type L:\test.txt
timeout 5
goto 1

5) 배치 파일을 실행하면 5초마다 ORIGINAL이 표시되어야 합니다.

6) Linux 서버에서 파일 내용을 변경하십시오.

nano /test/test.txt
CHANGED

7) Windows에서 실행 중인 배치 파일을 보면 실제 파일처럼 "CHANGED" 대신 "ORIGINAL"이 5초마다 표시됩니다.

8) 배치 파일을 종료하고 15초 정도 기다리거나 시간 초과를 10초 이상으로 변경하면 올바르게 업데이트됩니다.

이를 적절하게 테스트하는 방법을 설명하고 설명했기를 바랍니다.

누구든지 이 동작을 재현하거나 이 문제를 해결하는 방법을 제안할 수 있습니까?

.

.

.

노트:

Linux 클라이언트 > Linux SMB 호스트가 올바른 파일 내용을 표시합니다.

Windows 클라이언트 > Windows SMB 호스트가 올바른 파일 내용을 표시합니다.

특히 Windows 클라이언트 > Linux SMB 호스트는 새로 고침 간격 <= 10초인 경우 올바른 파일 콘텐츠를 표시하지 못합니다.

제가 테스트한 모든 Windows 버전(Win7, Win10, Server2016)은 동일한 동작을 나타냅니다.

또한 삼바 공유 "NT1, SMB2, SMB3"에서 다양한 프로토콜을 테스트했는데 동작이 변경되지 않았습니다.

참고: 나는 이것이 Windows 문제일 가능성이 가장 높다고 생각했지만 일주일 동안 technet이나 superuser에 대한 답변을 받지 못했습니다. 이는 테스트하기 쉬워야 합니다. 누구든지 이 동작을 확인하거나 설명할 수 있습니까?

답변1

관련 설정의 기본값은 다음과 같습니다.

  • oplocks = yes
  • kernel oplocks = no

(삼바 참조smb 구성 파일문서)


다른 방법을 따라 기회 잠금을 비활성화할 수 있습니다.답변.

또는 최신 커널(2.4 이상)이 포함된 Linux 운영 체제를 실행하는 경우 그대로 oplocks = yes두고대신에smb.conf커널 oplock을 활성화 하는 행을 추가하십시오 . ~에 따르면커널 기회적 잠금(S)문서의 섹션:

커널 oplock 지원을 사용하면 로컬 UNIX 프로세스 또는 NFS 작업이 smbd(8)에 의해 잠긴 파일에 액세스할 때 Samba oplock이 깨질 수 있습니다. 이를 통해 SMB/CIFS, NFS 및 로컬 파일 액세스 간의 완전한 데이터 일관성이 가능해집니다.

oplocks과 를 모두 kernel oplocks활성화 하면 (캐시에서) 좋은 성능을 얻을 수 있으며 파일이 업데이트될 때 캐시가 무효화됩니다.

커널 oplock을 활성화하려면 Samba 구성 파일에 다음 줄을 추가하세요.

kernel oplocks = yes

답변2

나는 배치하여이 문제를 해결했습니다.

oplocks = False

내 공유 설정 아래 smb.conf에 있습니다.

https://www.samba.org/samba/docs/old/Samba3-HOWTO/locking.html#id2615926

관련 정보