/home
저는 다른 호스트에서 NFS를 통해 마운트된 공유 컴파일 서버의 루트가 아닌 사용자입니다 . ~/a/b
많은 하위 디렉토리가 있는 디렉토리 가 있습니다 c1,c2,...
. 나는 ~/a/b
대부분의 cN
디렉토리를 성공적으로 완전히 삭제하고 싶었습니다. 그러나 일부(예: c1
)에는 완전히 액세스할 수 없습니다. 실행(예: cd
입력)할 수 있지만 목록( ls
)은 물론 삭제도 할 수 없습니다. 라고 말하면 rm -rf ~/a/b/c1
프로세스가 일시 중지 D
상태가 됩니다.
이 문제를 제거하려면 루트가 아닌 사용자로서 무엇을 할 수 있습니까 ~/a/b
?
업데이트: NFS를 제외하기 위해 파일 서버에 SSH로 연결했는데 거기서도 작업을 수행할 수 없으므로 NFS 문제는 전혀 아닌 것 같습니다. 그런데 왜 커널은 디렉토리 삭제를 거부합니까?
답변1
파일이나 디렉터리를 삭제하는 것은 원자성 작업이며 시스템 호출이 필요하므로 rm
명령이 중단되면 커널이 중단되었기 때문입니다. NFS 파일 시스템에서는 (일반적으로) 서버가 응답하지 않아 발생할 수 있습니다. 로컬 파일 시스템에서 이는 하드웨어 오류로 인해 발생할 수 있으며 일반적으로 그렇습니다. 디스크에 결함이 있을 수 있습니다. 커널 로그에서 이를 확인할 수 있습니다.
답변2
찾기 및 삭제 작업 중에 중단되면 다음과 같이 프로세스에 대한 시간 초과를 설정할 수 있습니다(여기에서는 bash
Windows에서 cygwin을 사용하여 호출합니다).
bash -c "find . -regex ".+fileDirToDelete" -exec rm -Rf {} \; & pid=$!; sleep 100; kill $pid"
답변3
프로세스가 백그라운드에서 파일에 액세스하고 있는지 확인하세요(예: 현재 작업 디렉터리). 나는 lsof
같은 도구를 사용하여 fuser -v
디렉토리를 엉망으로 만드는 프로세스가 있는지 확인하고 먼저 제거합니다. 필요한 경우 nfs 클라이언트 서비스를 다시 시작하고 디렉토리가 존재하는지 확인하고 동일한 쉘의 현재 작업 디렉토리인 경우 디렉토리를 삭제하지 마십시오.