NFS를 사용하여 서버의 파일을 편집합니다. 파일이 셔뱅 라인이 포함된 스크립트인 경우 이를 실행할 때마다 저장 후 약 5초 동안 "텍스트 파일 사용 중" 오류가 발생합니다.
다음과 같이 파일을 vi(4.19 커널)에서 열면 동일한 문제가 재현될 수 있습니다.
:>test.sh
chmod +x test.sh
vi test.sh
# Ctrl-Z to suspend vi
./test.sh
# text file busy: ./test.sh
5.7 커널에서 위의 vi 예제는 오류를 생성하지 않지만 5.7에서 5.7 시스템으로의 NFS 쓰기는 각 저장 후 5초 동안 여전히 "텍스트 파일 사용 중" 오류를 생성합니다.
모든https://stackoverflow.com/questions/16764946/what-generates-the-text-file-busy-message-in-unix스크립트를 실행하는 바이너리를 명시적으로 호출하여 오류를 해결할 수 있습니다.
bash test.sh
나는 이것을 호출하는 스크립트를 작성할 수 있다고 믿으며 e
인수에 의해 제공된 경로를 열고 파일이 shebang으로 시작하는지 확인하고 그렇다면 shebang 줄을 구문 분석하고 shebang에서 바이너리를 수동으로 호출합니다.
e ./test.sh
그러나 이로 인해 질문이 생깁니다. 운영 체제에 대해 얼마를 지불하고 있습니까?
쓰기 위해 열린 파일을 실행하도록 Linux를 어떻게 구성합니까?
5.7 커널 소스를 grep'd했지만 ETXTBUSY
결과가 나오지 않았습니다.
또는 덜 일반적인 해결 방법으로NFS에 쓰기 작업을 약 5초 동안 열어두는 대신 쓰기 중인 파일을 즉시 닫도록 하려면 어떻게 해야 합니까?
편집하다:
의견에 따르면 vi(더 정확하게는 nvi)의 문제는 다음과 같습니다.이것Debian의 1.81.6-16에서 수정되었습니다(내 4.19 시스템에는 1.81.6-15가 있고 내 5.7 시스템에는 1.81.6-16이 있습니다). 텍스트 파일 사용 중 오류를 생성하지 않고 NFS 저장을 만드는 방법을 찾으려고 계속 노력 중입니다.
두 번째 편집:
/etc/exports
서버에서:
/home/w 10.0.9.0/24(rw,insecure)
다음과 함께 설치됨 -o soft,intr
:
serene:/home/w on /mnt/speed type nfs4 (rw,relatime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,soft,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.0.9.153,local_lock=none,addr=10.0.2.2)
서버 패키지(Devuan 테스트):
serene% dpkg -l|grep nfs
ii libnfsidmap2:amd64 0.25-5.1 amd64 NFS idmapping library
ii nfs-common 1:1.3.4-4 amd64 NFS support files common to client and server
ii nfs-kernel-server 1:1.3.4-4 amd64 support for NFS kernel server
현재 문제를 재현할 수 없는 작업 클라이언트의 클라이언트 패키지(Devuan 테스트):
averagest% dpkg -l|grep nfs
ii libnfsidmap2:amd64 0.25-5.1 amd64 NFS idmapping library
ii nfs-common 1:1.3.4-4 amd64 NFS support files common to client and server
답변1
아직 논평할 수는 없지만 귀하의 환경에 대한 보다 구체적인 정보를 제공해 주실 수 있습니까?
나는 당신이 보고 있는 동작을 재현할 수 없습니다. 예를 들어, /test에 NFS 파일 시스템이 마운트되어 있습니다. 다음 명령을 실행하면 5초 지연 없이 즉시 반환됩니다.
$ cd /test
$ vi xx; chmod 755 xx; ./xx
Tue Sep 8 17:45:17 EDT 2020
내가 xx에 넣은 것은 다음과 같습니다.
#!/bin/sh
date
또한 "vi xx" 및 CTRL-Z를 눌러 일시 중지하면 지연이나 오류가 없습니다.
$ vi xx
(CTRL-Z)
[1] + Stopped vi xx
$ ./xx
Tue Sep 8 17:51:01 EDT 2020
테스트 중입니다: CentOS Linux 버전 7.7.1908. NFS가 Linux 간에 다르게 동작할 것이라고는 기대하지 않지만 확실히 알 수는 없습니다.
nvi 대신 vim을 사용하면 동작이 바뀌나요?
"그렙 마운트"는 무엇을 의미합니까?nfs 마운트 지점" 전시하다?