재시작하지 않고 NFS 클라이언트를 다시 초기화하십시오. 수출 디렉토리를

NFS를 사용하여 하나의 디렉토리를 내보내는 서버에서 작업하고 있습니다. 물론 일주일 정도 동안 서버를 재부팅하면 umount워크 스테이션의 내보내기 파일 시스템 ( /etc/fstab부팅시 마운트 됨)을 여러 번 잊어 버렸습니다 . 그 사이에 나는 umount사실을 알고 다시 마운트 할 수있었습니다 (나는 사용 하지 않고있다autofs ).

umount -fl /data0
mount /data0

그러나 이것은 더 이상 작동하지 않습니다.

내가 할 수없는 다른 디렉토리 (일시 중단 마운트)에 서버에서 내 보낸 디렉토리를 마운트,하지만 난 할 수 NFS는 내 워크 스테이션에서 실행되는 가상 머신에 그 수출 디렉토리를 마운트합니다.

내가하려고하는 것은 (제거하다 rmmod)를 nfs하고 nfsv3모듈 (이없는 것 일을 : Resource temporarily unavailable). lsof교수형. mount를 통해 마운트 된 것은 표시되지 않습니다 nfs. 이것은 아마도 ‘umount -l’을 여러 번 사용한 결과 일 수 있지만 처음 두 번은 문제없이 작동했습니다.

아무런 차이없이 마운트 할 수없는 상태에서 서버를 다시 시작했습니다. 나는 또한 사용했다 service nfs-kernel-server restart. 클라이언트 워크 스테이션을 다시 시작하면 모든 것이 정상으로 돌아올 것입니다.

이것을 복구하고 재부팅하지 않고 내 워크 스테이션에서 nfs 클라이언트 쪽을 다시 초기화하는 방법이 있습니까?
재부팅하지 않고이 문제를 해결할 수 없으면 사용을 시작해도 다시 발생하지 autofs않습니까?

lsof -b 마지막 줄로 달려 있습니다.

lsof: avoiding readlink(/run/user/1001/gvfs): -b was specified.
lsof: avoiding stat(/run/user/1001/gvfs): -b was specified.
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1001/gvfs
      Output information may be incomplete.

앞에 나오는 줄에는 없습니다 /data0.

의 항목 /etc/fstab:

192.168.0.2:/data0 /data0  nfs  defaults,auto,nolock,user 0 2


답변

주석에서 @PaperMonkey가 제안한 것처럼 영원히 다시 시도하는 것을 포함하여 기본 마운트 옵션을 사용했기 때문에 문제가 발생할 수 있습니다.

intr예전에는 고장난 NFS 마운트에 대한 I / O에 붙어있는 것들을 더 쉽게 중단시킬 수있는 방법 이었지만 이제는 아무런 문제가 없습니다. SIGKILL적어도 nfs(5)주장에 따르면 여전히 NFS에 붙어있는 프로세스를 중단시킬 수 있습니다 . 마운트 옵션에 대해서는 해당 매뉴얼 페이지를 참조하십시오.

NFS를 다시 시도하지 않으려면 soft기본값 대신 사용하십시오 hard.

또한 자동 마운터를 사용하는 것이 좋습니다. 원하는 경우 / net / host / foo / bar에 심볼릭 링크를 만드십시오.

종종 그냥 재부팅에 쉽게,하지만 이론적으로 당신이 할 수 있어야한다고 생각합니다 kill -9(예 : kill -KILLNFS에 붙어있는) 모든 프로세스. 그런 다음 umount -f가 작동 할 수 있습니다. 탭 완성이 더 많은 프로세스를 NFS 마운트에 고정시키지 않도록주의하십시오.


답변

아래는 RPM 기반 배포판에서이 문제를 해결하기 위해 실행할 명령 목록입니다.

service rpcbind stop
service nfslock stop
rm -rf /var/lib/nfs/statd/sm/*
rm -rf /var/lib/nfs/statd/sm.bak/*

그 후 :

umount -f /share

답변

를 사용 autofs하면 향후이 문제를 피할 수 있습니다. 가장 큰 이점 autofs은 디렉토리를 사용하려고 할 때까지 디렉토리를 마운트하려고 시도하지 않는다는 것입니다. 즉, 마운트 지점이 손상되지 않고 무한정 마운트를 시도하지 않으므로 마운트 해제에 대한 제한 시간을 설정할 수 있습니다 (일반적으로 짧은). 이 사전 제한 기간 동안 자동 마운트가 다시 시도되는지 확실하지 않지만 일반적으로 자동 마운트 제한 시간을 몇 초로 설정합니다.

당신이 다시 시작하지 않고 문제를 해결하려면 에 의해 얻을 수 umount -a(마운트 해제 모두의 / etc / fstab 파일에 언급 된) mount -a당신이 잃어버린 디렉토리가 홈 디렉토리를 ‘포함하지 않는 (에서의 / etc / fstab에있는 모든 마운트)하지만 난했습니다 다른 곳에 작업을 저장하고 재부팅하는 것이 가장 좋습니다.


답변

lsof 명령의 결과를 사용하여 오래된 파일 시스템에 대한 참조를 보유한 클라이언트에서 프로세스를 찾고 해당 프로세스를 종료하십시오.

umount -f / data0

서버를 핑 (ping) 한 다음 드라이브를 다시 마운트 할 수 있는지 확인하십시오. 원하는 프로세스를 다시 시작하십시오.

클러스터

클러스터 서버 설정을 실행하면 서버가 페일 오버 될 때마다 오래된 nfs 파일 핸들이 나타납니다. fsid 옵션을 사용하여 파일 시스템을 내 보내야합니다. fsid의 수는 두 서버의 각 파일 시스템마다 동일해야합니다. 파일 복제가 발생했는지 확인하는 것은 사용자의 책임입니다. 아래 맨 페이지에서 스 니펫을 참조하십시오.

fsid = num | root | uuid
NFS가 내보내는 각 파일 시스템을 식별 할 수 있어야합니다. 일반적으로 파일 시스템 (파일 시스템에 그러한 것이있는 경우) 또는 파일 시스템을 보유하는 장치의 파일 번호 (파일 시스템이 장치에 저장된 경우)에 UUID를 사용합니다. 모든 파일 시스템이 장치에 저장되는 것은 아니며 모든 파일 시스템에 UUID가있는 것은 아니기 때문에 파일 시스템을 식별하는 방법을 NFS에 명시 적으로 알려야 할 때가 있습니다. 이것은 fsid = 옵션으로 수행됩니다.

NFSv4의 경우, 내 보낸 모든 파일 시스템의 루트 인 구별 파일 시스템이 있습니다. 이것은 fsid = root 또는 fsid = 0으로 지정되며 둘 다 정확히 같은 것을 의미합니다.

다른 파일 시스템은 작은 정수 또는 32 개의 16 진수와 임의의 구두점을 포함해야하는 UUID로 식별 할 수 있습니다.

Linux 커널 버전 2.6.20 이하는 UUID 설정을 이해하지 못하므로 그러한 커널에 fsid 옵션을 설정해야하는 경우 작은 정수를 사용해야합니다. 적은 수와 UUID 설정이 지원되므로 기존 커널과 새 커널에서 모두 동일한 구성을 수행 할 수 있습니다.