파일 시스템에서 특정 사용자가 소유한 모든 파일 목록과 크기를 얻을 수 있는 방법이 있습니까? 내 말은, 또는 유사한 도구를 사용하여 디렉토리 트리를 탐색하는 것이 아니라는 뜻입니다 find
. 왜냐하면 제가 그렇게 했고 이러한 도구가 찾을 수 없는 숨겨진 파일이 있는 것 같기 때문입니다. 파일 시스템 inode를 직접 반복하는 도구가 필요합니다.
컨텍스트: CentOS 7.9 서버의 할당량에 문제가 있습니다. 특정 파일 시스템에 1100GB의 할당량이 지정되어 있고 /share/storage
서버에 로그인하지 않았고 소유한 프로세스가 없는데도 사용된 공간이 분당(대략) 100MB씩 영원히 늘어나고 있습니다. 이제 공간이 거의 부족해졌습니다. 그러나 을 실행하면 $ du /share/storage/user
556GB만 보고됩니다.
내가 소유한 파일이 있을 수 있지만 다른 디렉터리(예: /tmp
다른 사용자 계정의 다른 디렉터리)에 있을 수도 있다는 것을 알고 있습니다. 나는 그들 모두를 확인했지만 아무것도 발견하지 못했습니다.
작성 중인 열린 파일을 확인했지만 lsof
거기에서도 아무것도 찾지 못했습니다.
그래서 내 생각은 inode 목록과 이러한 파일의 크기를 가져온 다음 잠시 후 목록과 비교하는 것입니다.
참고: 저는 서버에 대한 루트 액세스 권한을 가지고 있습니다.
서버는 HPC 클러스터의 프런트 엔드이므로 컴퓨팅 노드는 NFS를 통해 파일 시스템에 쓸 수 있습니다. 그런데 현재 컴퓨팅 노드에 프로세스가 없는지 확인했습니다.
답변1
우리는 문제를 발견했습니다. 컴퓨팅 노드에서 실행되는 프로세스는 지속적으로 파일에 기록됩니다(파일 크기가 500GB를 초과함). 파일에 해당하는 디렉터리가 프런트 엔드에서 삭제되었으며 어떤 이유로 프로세스가 컴퓨팅 노드에서 파일에 계속 기록했습니다. 프로세스가 종료되면 파일 공간이 해제됩니다.
따라서 이 경우 컴퓨팅 노드에서 오래된 프로세스를 찾는 것이 좋습니다.
편집하다: 내가 게시한 질문( find
파일 시스템 자체를 순회하지 않고 모든 inode를 순회하는 것과 같은)에 대해서는 시도하지 않았지만 df를 사용하여 파일 시스템의 inode 수를 얻을 수 있는 것 같습니다.
[mstorti@seshat ~]$ df -i /share/storage/
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sdb1 45753856 26022211 19731645 57% /share/storage
그런 다음 가능한 모든 inode(1에서 45753856)를 반복한 다음 각 inode에 대해 각 inode가 할당되었는지(사용할 수 있는 쉘에서 debugfs
) 확인한 다음 모든 현재 inode와 크기를 해당 파일에 저장할 수 있다고 생각합니다. 그런 다음 나중에 동일한 작업을 수행하고 비교하면 운 좋게도 파일이 공간을 차지하는 것을 찾을 수 있습니다.
다만 앞서 말했듯이 를 사용하는 것이 더 낫다고 생각하는데 lsof
, 클러스터 내 모든 컴퓨팅 노드에서 이 작업을 수행해야 한다는 점을 기억하세요.