
내 이해는 NFSv4 클라이언트가 rpcbind portmapper 및 mountd 서비스 상호 작용을 완전히 건너뛰고 서버의 NFSv4 서비스에 즉시 연결해야 한다는 것입니다. 하지만 RHEL6 클라이언트는 항상 먼저 rpcbind 서비스에 연결하여 mountd 포트를 가져오고 목록을 가져오는 것을 봅니다. mountd 형식으로 내보낸 다음 마지막으로 NFSv4 서비스에 연결합니다. tcpdump를 사용하여 관찰했습니다.
모든 표시(마운트 명령 출력 및 TCP 검사)에 따라 마운트 작업이 완료되면 클라이언트와 서버는 NFSv4를 사용합니다.
클라이언트에 NFSv4만 강제 적용하려고 시도할 때에도 이런 현상이 발생합니다. 예:
- /etc/nfsmount.conf에서 Nfsvers=4 설정
- vers=4 옵션을 사용하여 명시적으로 마운트
- NFS 포트를 명시적으로 설정합니다. (mount 명령을 통해 nfsmount.conf에서)
내가 완전히 벗어난 걸까요, 아니면 뭔가 잘못된 걸까요? 이는 NFSv4 내보내기를 마운트하기 전에 NFS 클라이언트가 UDP를 통해 서버의 rpcbind에 연결할 수 있어야 한다고 주장하고 알 수 없는 UDP 패킷 손실이 발생하기 때문에 이것이 나에게 문제가 됩니다(예, 네트워크 담당자와 작업 중입니다). 이 전면) 이로 인해 때때로 마운트가 완전히 실패하거나 완료하는 데 오랜 시간이 걸립니다.
나는 libtirpc 소스를 살펴보고 항상 UDP를 사용하여 RPC portmapper에 연결한다는 점을 확인했습니다. 그러나 portmapper 및 mountd 서비스를 방정식에서 완전히 제외하고 싶습니다.
"rpcinfo -d"를 사용하여 NFS 서버에서 UDP portmapper 서비스 등록을 취소하려고 시도했지만 그 결과 해당 서버를 대상으로 하는 모든 NFS 마운트가 실패했습니다(다시 클라이언트는 UDP 포트 111에서 수신 대기하는 rpcbind가 있는 서버를 요구합니다). 나는 또한 행운없이 /etc/netconfig를 망쳐 보았습니다.
누구든지 이 동작을 보거나 NFSv4에 대해 충분히 알고 있어 제가 비현실적인 기대를 갖고 있다고 말할 수 있습니까?
답변1
나는 이것을 autofs로 다시 추적했습니다. showmount 명령을 사용하여 내보내기 목록을 가져오려면 /etc/auto.net을 사용하도록 설정되었습니다. showmount 명령은 NFS 마운트가 발생하기 전에 rpcbind 및 mountd에 대한 액세스를 담당하므로 마운트 옵션을 변경하려는 시도는 아무런 효과가 없습니다.
/etc/auto.net을 수정했는데 문제가 해결되었습니다.
참고 사항: 여러 곳에서 본 것처럼 auto.master에서 "-hosts" 옵션을 사용하면 rpcbind 및 mountd 액세스가 발생했습니다. 결국 auto.net에서 모든 NFSv4 서버의 루트를 마운트하게 되었는데, 모든 호스트가 NFSv4라고 가정하면 괜찮습니다.