Samba(samba 2:4.3.9+dfsg amd64)를 통해 일부 폴더를 공유하는 Ubuntu 14.04 LTS 개발 시스템이 있습니다. 다른 Ubuntu 시스템에 이러한 공유가 설치되어 있습니다( mount -t cifs -o uid=$UID,gid=$(id -g),domain=DEVHOST,username=guest //DEVHOST/share /mnt/share
). 대부분 모든 것이 괜찮습니다. 하지만 때로는 개발 시스템에서 (Vim을 통해) 파일을 편집할 때 변경 사항이 클라이언트에 반영되지 않습니다. 즉, 클라이언트가 꽤 오랫동안 이전 파일 내용을 보게 됩니다.
ll
표시된 파일 수정 날짜가 업데이트되지 않았습니다. 그러나 동일한 디렉터리에 새로 생성된 파일은 표시됩니다. 하지만 기존 파일의 파일 내용은 여전히 업데이트되지 않습니다. 그런데 less
편집 후 파일 크기가 증가함에 따라 파일 끝에 추가 null 바이트( )가 많이 표시됩니다 .^@
오래된 캐시가 있는 것 같습니다. 원격 Samba 서버에서 파일을 다시 로드하도록 클라이언트에 지시하려면 어떻게 해야 합니까? 데스크탑에서는 F5Nautilus를 통해 새로고침을 시도했지만 SSH를 통해 클라이언트에 로그인했습니다.
참고: 이는 영구적인 문제가 아닙니다. 클라이언트를 다시 시작한 후에는 모든 것이 다시 정상적으로 작동합니다(적어도 잠시 동안은). 강제로 제거/재설치하거나 클라이언트를 다시 시작하는 것보다 더 나은 해결 방법이 있는지 궁금합니다. 근본 원인이 될 수 있는 힌트를 환영합니다.
답변1
근본 원인이 될 수 있는 힌트를 환영합니다.
비슷한 문제가 발생했습니다. 호스트 중 하나가 정확한 시계를 가지고 있지 않은 것으로 나타났습니다. 모든 호스트에서 활성화하면 ntp
문제가 해결됩니다.
원격 Samba 서버에서 파일을 다시 로드하도록 클라이언트에 지시하려면 어떻게 해야 합니까?
을 실행하여 파일을 다시 로드하고 업데이트합니까 env stat $FILE
? 나는 그렇지 않다고 생각한다.
파일에 대한 oplock을 해제하여 클라이언트에서 파일이 업데이트됩니까?
에서 man mount.cifs
:
The CIFS protocol mandates (in effect) that the client should not
cache file data unless it holds an opportunistic lock (aka oplock)
or a lease. Both of these entities allow the client to guarantee
certain types of exclusive access to a file so that it can access its
contents without needing to continually interact with the server.
gvim 복사본을 종료할 때까지(버퍼만 닫고 파일 잠금을 해제하고 Google 드라이브를 업데이트하지 않음) Windows7 상자와 Google 드라이브 사이에 동기화 문제가 있음을 발견했습니다. DEVHOST에서 vim을 사용하여 파일을 편집한 다음 vim을 닫으면 클라이언트 측에 문제가 여전히 존재합니까?
@StephenHarris의 의견에서 언급했듯이 mount
위 명령을 편집하고 추가해 보세요.-o cache=none
에서 man mount.cifs
:
cache=
Cache mode. See the section below on CACHE COHERENCY for details.
Allowed values are:
· none: do not cache file data at all
· strict: follow the CIFS/SMB2 protocol strictly
· loose: allow loose caching semantics
The default in kernels prior to 3.7 was "loose".
As of kernel 3.7 the default is "strict".