mount.nfs: 오래된 파일 핸들 오류 - 마운트할 수 없습니다.

mount.nfs: 오래된 파일 핸들 오류 - 마운트할 수 없습니다.

NFS 공유를 마운트하려고 할 때마다 다음 메시지가 나타납니다.

>> mount -t nfs gitlab-replica-storage.blah.com:/export/registry-gitlab-prod-data-vol /mnt/test
mount.nfs: Stale file handle

문제는 다음과 같이 제거할 수 없다는 것입니다.

>> umount -f -l /mnt/test
umount: /mnt/test: not mounted

마운트 지점을 사용하는 프로세스가 있는지 확인하려고 시도했지만 그렇지 않았습니다.

이 문제를 해결하기 위한 다른 대안이 있습니까?

설명하자면:

  • 다른 컴퓨터에 설치할 수 있습니다.
  • 영향을 받은 시스템의 다른 마운트 지점에 설치할 수 없습니다.

답변1

서버에 해당 클라이언트에 대한 오래된 내보내기 항목이 있는 경우 A mount -t nfs는 실패합니다 .Stale file handle

예제 시나리오: 클라이언트가 먼저 nfs 볼륨을 마운트 해제하지 않고 서버를 다시 시작하면 이런 일이 발생할 수 있습니다. 서버가 반환되고 클라이언트가 마운트 해제되어 nfs 볼륨 마운트를 시도하면 서버는 다음과 같이 응답할 수 있습니다.

mount.nfs: Stale file handle

/proc/fs/nfs/exports이는 또는 를 보면 확인할 수 있습니다 /proc/fs/nfsd/exports. 클라이언트 항목이 있는 경우 오래된 항목일 수 있습니다.

서버에서 내보내기를 명시적으로 취소하고 관련 내보내기를 다시 내보내면 이 문제를 해결할 수 있습니다. 예를 들어 모든 내보내기에 대해 이 작업을 수행하려면 다음을 수행하세요.

# exportfs -ua
# cat /proc/fs/nfs/exports
# exportfs -a

그 후에는 클라이언트가 mount -t nfs ...성공해야 합니다.

마운트 생성 ESTALE및 기타 시스템 호출(예: open/readdir/unlink/chdir...)은 ESTALE오래된 내보내기 및 파일 핸들을 반환합니다. NFS는 오래된 파일 핸들이 발생하기 쉽습니다(예: 클라이언트에 파일 핸들이 있지만 파일이 서버에서 삭제됨).

답변2

ESTALE 버그는 원래 파일 핸들(서버의 파일을 고유하게 식별하기 위해 NFS에서 사용)이 더 이상 서버의 유효한 파일을 참조하지 않는 상황을 처리하기 위해 도입되었습니다. 이는 서버의 응용 프로그램, 서버에 액세스하는 다른 클라이언트 또는 때로는 동일한 클라이언트에 마운트된 다른 파일 시스템을 통해 서버에서 파일이 삭제될 때 발생할 수 있습니다. NFS 서버는 더 이상 내보내지 않는 파일 시스템에 파일이 있는 경우에도 이 오류를 반환합니다. 또한 일부 NFS 서버에서는 파일 이름을 바꿀 때 파일 핸들도 변경하지만 이 방법은 권장되지 않습니다.

이 오류는 클라이언트가 모르는 사이에 동일한 이름의 파일이나 디렉터리가 서버에 다시 생성되는 경우에도 발생합니다. 파일 핸들은 파일의 특정 인스턴스를 참조하며, 파일을 삭제한 다음 다시 생성하면 파일의 새 인스턴스가 생성됩니다.

ESTALE 오류는 캐시된 디렉터리 정보를 사용하여 경로 이름을 dentry/inode 쌍으로 변환할 때 자주 발생합니다. 후속 작업이 NFS 서버로 전송되었을 때 해당 정보가 오래되었거나 오래된 것으로 밝혀졌습니다. 이는 경로 이름을 dentry/inode 쌍으로 변환하기 위해 캐시된 정보를 사용할 때 stat(2)와 같은 시스템 호출에서 쉽게 발생할 수 있지만 서버에 대한 GETATTR 호출은 파일 핸들이 더 이상 유효하지 않음을 발견합니다.

이 오류는 조회가 찾고 있는 경로 이름의 여러 부분 사이에서 또는 성공적인 조회와 후속 작업 사이에 서버가 변경된 경우에도 발생할 수 있습니다.

ESTALE에 대한 원본 링크:에스탈LWN.

NFS 서버의 파일과 디렉터리를 확인하거나 NFS 서버 관리자에게 이를 수행하도록 지시하는 것이 좋습니다.

NFS 서버에 일부 오래된 페이지 캐시, inode, dentry 캐시 항목이 있을 수 있습니다. 그것을 청소하십시오:

# To free pagecache
echo 1 > /proc/sys/vm/drop_caches

# To free dentries and inodes
echo 2 > /proc/sys/vm/drop_caches

# To free pagecache, dentries and inodes
echo 3 > /proc/sys/vm/drop_caches

답변3

제 경우에는 새 볼륨을 마운트할 때 "mount.nfs: 오래된 파일 핸들" 오류도 발생했습니다. 이는 마운트된 이전 볼륨이 삭제되었기 때문에 발생합니다. 마운트 해제 후 볼륨을 사용하고,

umount /mnt

다시 설치하니 문제가 해결되었습니다.

답변4

내보내기가 실제로 마운트되었는지 확인하십시오.

# cat /proc/mounts | grep nfs

오래된 파일 핸들 오류는 NFS 서버의 내보내기 경로에 이전 버전의 파일이 있음을 의미합니다. NFS 서버를 다시 시작하면 도움이 되는 경우가 있습니다. 그러나 이전 운영 체제(RHEL/CentOS 6.9)의 경우 NFS4 대신 NFS3으로 되돌리는 것이 더 나은 경우도 있습니다. 내 경험에 따르면 이전 NFS4 클라이언트는 최신 NFS4.1 서버를 사용하는 데 어려움을 겪는 경우가 있습니다. 이는 파일 잠금의 경우 특히 그렇습니다.

관련 정보