NFS에서 파일 잠금?


18

내 서버는 NFS (Network File System)를 사용하는데 PHP의 flock () 기능을 사용할 수 없습니다. NFS에서 파일을 잠그는 방법이 있습니까? 아니면 그렇게해야합니까?

답변:


11

매뉴얼 페이지 flock(2)가 오래되어 오래되었지만 다음과 같이 업데이트되었습니다 (강조 표시).

Linux 2.6.12부터 NFS 클라이언트는 flock () 잠금을 전체 파일에서 바이트 범위 잠금으로 에뮬레이트하여 flock () 잠금을 지원합니다. 이는 fcntl (2) 및 flock () 잠금이 NFS를 통해 서로 상호 작용 함을 의미합니다. Linux 2.6.37부터 커널은 flock () 잠금 (및 fcntl (2) 바이트 영역 잠금)을 로컬로 처리 할 수있는 호환성 모드를 지원합니다. nfs (5)의 local_lock 옵션에 대한 설명을 참조하십시오.

그것은 공식 맨 페이지 웹 사이트 http://man7.org/linux/man-pages/man2/flock.2.html에 있습니다. 맨 페이지 4.00의 새 버전을 보여줍니다

Linux 2.6.12는 2005 년에 릴리스되었습니다.

이것은 원래 janneb의 답변에 대한 의견이 되었으나 당시에는 명성이 없었습니다. 2014 년에 문서 업데이트가 발생했습니다 : http://git.kernel.org/cgit/docs/man-pages/man-pages.git/commit/man2/flock.2?id=e449654fdb3f19aafc569df47d12bffdf6276236


11

PHP flock()함수가 어떻게 구현 되는지 모르지만 flock()syscall에 대한 인터페이스라고 가정하면 NFS를 통해 전혀 작동하지 않습니다. 로부터 flock()맨 :

flock (2)는 NFS를 통해 파일을 잠그지 않습니다. fcntl (2)을 대신 사용하십시오. 충분히 최신 버전의 Linux와 잠금을 지원하는 서버가 주어지면 NFS에서 작동합니다.

물론 매뉴얼 페이지의 내용이 아무리 오래 되어도 궁극적 인 진실입니다.


+1, 풍자! NFS FAQ의 항목 D10이 자세히 설명되어 있습니다.
themel

8

flock()PHP를 포함하여 Linux NFS에서 잘 작동합니다. 우리는 광범위하게 사용하며 원하는대로 작동하는지 철저히 테스트했습니다. 클라이언트와 서버 모두에서 필요한 서비스를 모두 실행하고 있는지 확인하십시오. "portmapper"및 "rpc.statd"를 찾으십시오. 그들이 실행 중이 아니면 배포판에서 어떤 init 스크립트가 시작되는지 알아 내야합니다. 데비안 기반 배포판에서는 " /etc/init.d/portmap"와 " /etc/init.d/nfs-common"입니다.

클라이언트에서 " rpcinfo -u $NFSSERVER status"를 실행 하고 응답이 있는지 확인하십시오. 설정에서 "프로그램 100024 버전 1 준비 및 대기"가 결과로 나타납니다.

또한 클라이언트와 서버에 서로 신뢰할 수있는 호스트 이름 항목이없는 경우 NFS와 statd가 상황에 따라 화를 낼 수도 있습니다. 두 /etc/hosts기계를 다시 확인하십시오 .


1
서버 세부 정보를 변경할 위치가 아닙니다. flock () 함수는 php.ini에서도 비활성화되어 있습니다. 적어도 작동하지 않을 것입니다. 적어도 그것이 내가 들었던 것입니다.
rFactor

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.