NFS 마운트는 커널에 의해 마운트 해제될 수 있습니다.

NFS 마운트는 커널에 의해 마운트 해제될 수 있습니다.

최근 몇몇 시스템에서 마운트 지점이 사라지기 시작했고(서버당 하나의 마운트 지점, 임의 간격 및 임의 시스템) 로그에서 아무 것도 찾을 수 없습니다. 5개의 마운트 지점이 있는데 그 중 하나가 무작위로 사라집니다. 이러한 사라짐은 마운트 지점 프로토콜과 아무 관련이 없습니다(TCP 및 UDP 마운트가 모두 사라집니다).

나는 아무것도 시도하지 않았습니다
tcp dump를 지속적으로 실행합니다(이 문제는 2~3일마다 발생하기 때문에 하기가 꺼려집니다...)

기계에 관한 정보:
NFS 부팅, 부팅 서버는 FreeBSD 11.0입니다. (BTW, 로그에는 아무것도 없습니다.) rootfs 옵션은 다음과 같습니다.
(rw,noatime,vers=3,rsize=131072,wsize=131072,namlen=255,hard,nolock,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=ADDRESS,mountvers=3,mountport=677,mountproto=udp,local_lock=all,addr=ADDRESS)
OS는 CentOs7이며 4.11.0-1 ML 커널을 실행합니다. 설치 옵션의 예:
rw,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=ADDRESS,mountvers=3,mountport=4002,mountproto=udp,local_lock=none,addr=ADDRESS) (rw,relatime,vers=3,rsize=32768,wsize=32768,namlen=255,hard,proto=udp,timeo=11,retrans=3,sec=sys,mountaddr=ADDRESS,mountvers=3,mountport=4002,mountproto=udp,local_lock=none,addr=ADDRESS,_netdev)
NFS 공유 및 서버에 대한 정보
총 5개의 NFS 서버가 있고 로드 밸런싱은 DNS를 통해 수행되며 모두 동일한 마운트 지점(일부 공유 UDP, 일부 공유 TCP)을 내보냅니다. NFS 서버를 실행하는 서버는 RHEL 6.7(Santiago), 커널 버전은 2.6.32-573.el6, snfs-common/server/client는 4.7.3입니다. 추측할 수 없듯이 서버 로그에는 이 문제와 관련된 내용이 없습니다. 내보내기 옵션의 예:
(rw,async,root_squash,no_wdelay,no_subtree_check,fsid=ID)
지금까지 시도한 것:
첫 번째 가정은 임의의 NFS 공유에서 이상한 이유로 umount 또는 umount2를 호출하는 프로세스가 있었고 sysdig를 사용하여 unlinkat, 연결 해제, 마운트 해제 및 제거 시스템 호출을 추적한 후에 systemd-logind가 unmount2를 수행하는 것을 볼 수만 있다는 것이었습니다. 사용자 세션이 삭제되었지만 마운트 지점에서는 삭제되지 않은 경우. 제가 chisel에서 사용하고 있는 sysdig 필터는 아래에 게시되어 있습니다:
function on_init() local filename = path for i in string.gmatch(path, "[^/]+") do filename = i end print("PID\tPROC_NAME\tPROC_EXEC\tPROC_SID\tPROC_PNAME\tPROC_PPID\tPROC_EXELINE\tPROC_PCMDLINE") chisel.set_event_formatter("%proc.pid\t%proc.name\t%proc.exec\t%proc.sid\t%proc.pname\t%proc.ppid\t%proc.exeline\t%proc.pcmdline ") chisel.set_filter( "(evt.type=unlinkat and evt.arg.name=" .. path .. ") or \ (evt.type=unlink and evt.arg.path=" .. path .. ") or \ (evt.type=umount) or \ (evt.type=remove and evt.arg.path=" .. path .. ")") return true end
제거가 무작위로 다시 발생하지만 필터는 이를 볼 수 없습니다. 필터에 결함이 있다고 생각합니다. 공유를 사용하고 마운트 해제하는 프로그램을 만들었고 umount( umount2게으른 플래그와 강제 마운트 해제 플래그를 시도함) 필터가 이를 올바르게 감지하므로 커널이 마운트를 해제하고 있다고 믿게 됩니다.
내 로그에는 아무것도 없습니다. 문제가 발생할 때 공유되는 일반적인 "nfs 응답 없음" 메시지도 없습니다.
컴퓨터에 로그인하고 다시 설치하면 문제 없이 다시 설치됩니다.
동일한 설정에서 많은 클라이언트를 실행하고 있는데 이런 일이 발생하지 않습니다. 이 머신 그룹의 유일한 공통점은 네트워크 세그먼트와 NFS 부트 서버입니다. 그런데 왜 서버와 클라이언트 사이의 통신이 중단되면 아무 것도 보고되지 않는지 이해할 수 없습니다.

답변1

누군가 관심을 갖고 있다면 이것은 커널의 NFS 버그입니다. 제출하여 수정해야 함cc89684c9a265828ce061037f1f79f4a68ccd3f7.

NFS: 명백히 유효하지 않은 dentry만 무효화합니다.

v3.18에서 커밋 bafc9b754f75("vfs: d_invalidate에서 더 정확한 테스트") 이후 ->d_revalidate()에서 "0"을 반환하면 파일 시스템이 마운트되어 있어도 dentry가 유효하지 않게 됩니다. 자손. 마운트된 파일 시스템이 마운트 해제되었습니다.

...

관련 정보