일부 파일과 폴더를 삭제하려고 했지만 시스템이 계속해서 다시 생성했기 때문에 삭제할 수 없었습니다.
이러한 모든 파일의 이름은 임의의 4자리 16진수 숫자인 으로 .nfsXXXX
지정 됩니다. XXXX
파일 중 하나를 삭제할 때마다 이름은 다르지만 내용은 동일한 다른 파일이 생성됩니다.
이는 관련되지 않은 여러 디렉토리에서 발생합니다. 원인은 무엇일까요? 어떻게 해결할 수 있나요?
답변1
에서 문자 그대로 인용함https://uisapp2.iu.edu/confluence-prd/pages/viewpage.action?pageId=123962105:
Linux/unix에서는 현재 실행 중인 프로세스에서 아직 열려 있는 파일을 삭제해도 해당 파일이 실제로 삭제되지 않습니다. 프로세스가 파일을 닫으면 운영 체제는 파일 핸들을 삭제하고 디스크 블록을 해제합니다. 열고 삭제되는 파일이 NFS 마운트 파일 시스템에 있는 경우 이 프로세스는 약간 더 복잡합니다. 파일을 여는 프로세스가 한 컴퓨터(예: 사무실이나 연구실의 워크스테이션)에서 실행되고 파일이 파일 서버에 있으므로 두 컴퓨터에는 파일에 대한 정보를 전달할 수 있는 방법이 있어야 합니다. NFS가 이를 수행하는 방법은 .nfsNNNN 파일을 사용하는 것입니다. 파일 중 하나를 삭제하려고 하는데 파일이 아직 열려 있으면 다른 번호로 다시 나타납니다. 따라서 파일을 완전히 삭제하려면 해당 파일을 연 프로세스를 종료해야 합니다.
파일이 열려 있는 프로세스를 알고 싶다면 "lsof .nfs1234"를 사용할 수 있습니다. 그러나 이는 파일을 연 프로세스를 실행하는 컴퓨터에서만 작동합니다. 따라서 프로세스가 하나의 머신(예: bobac)에서 실행되고 다른 Burrow 머신(예: silo 또는 프레리독)에서 lsof를 실행하는 경우 아무 것도 볼 수 없습니다.
답변2
이러한 .nfsXXXX 파일은 NFS 작업의 일반적인 부분입니다. @Keith Thompson이 쓴 내용을 반복하지는 않겠지만, 한 가지 해야 할 일은 해당 항목을 즉시 삭제하지 말고, 한동안 액세스하지 않은 경우 삭제하도록 cron 작업을 설정하는 것입니다.
find dir .name .nfs\* -atime +3 -delete
답변3
이전 답변으로는 충분하지 않습니다. AIX의 문제는 더 이상 라이브러리를 사용하는 프로세스가 없더라도 여전히 메모리에 로드될 수 있다는 것입니다. 이 경우 nfs 파일 시스템에서 라이브러리 파일을 삭제할 때 동일한 문제가 발생합니다.
지금까지 내가 찾은 유일한 방법은 루트 사용자로 "slibclean" 명령을 실행하여 현재 사용되지 않지만 로드된 라이브러리를 메모리에서 언로드하고 라이브러리 파일을 삭제할 수 있는 것입니다.
답변4
.nfsXXXX
또 다른 옵션은 서버 측에서 파일을 삭제하는 것입니다.