어제 우리 시스템의 사용자가 파일 시스템 중 하나의 모든 공간을 차지하는 잘못된 스크립트를 사용했습니다. 수많은 시행착오를 통해 사용자를 식별하고 문제를 일으키는 프로세스를 종료할 수 있었습니다.
앞으로 이러한 프로세스를 쉽게 식별할 수 있는 방법이 있습니까?
이 명령의 출력에는 lsof /file-system
사용자, PID 및 파일 크기와 함께 열려 있는 각 파일이 표시될 것이라고 생각합니다. 출력을 구문 분석하는 프로그램을 작성할 수 있을 것 같지만 이를 수행하는 다른 명령이 있는지 궁금합니다. 이 문제가 다시 발생할 경우 집중하는 데 도움이 되도록 사용자를 위한 전체 파일 크기 보고서가 정말 필요합니다.
저는 Solaris 10을 사용하고 있습니다(해당하는 경우). 저는 시스템 관리자가 아닙니다. 아마도 우리 부서의 최종 사용자를 위해 업무를 조정하는 "고급 사용자"일 것입니다.
답변1
lsof
현재 프로세스에서 열려 있는 파일만 보고할 수 있습니다. 데이터가 이미 디스크에 기록되었거나 IO를 추적하는 데 사용된 경우에는 도움이 되지 않습니다.
살펴볼 때 많은 IO가 발생하는 경우 다음을 사용하여 문제가 되는 프로세스를 캡처할 수 있습니다.iotop
~에서DTrace 툴킷
파일 시스템을 스캔하는 데 시간이 걸리기 때문에 디스크 크기에 대한 임시 보고는 약간 어렵습니다. 기본 파일 시스템 추적 이상의 작업은 약간의 시간이 소요되며, 특히 정기적으로 보고해야 하는 경우 더욱 그렇습니다. 신고해도 문제가 해결되지 않으므로 사용하는 것이 좋습니다.파일 시스템그리고사용자 할당량어디에 쓸 수 있는 데이터의 양을 제한합니다. 사용자 할당량을 설정하면 기본 제공 보고서를 사용하여 특정 사용자 사용량을 보다 쉽게 보고할 수 있습니다.
일회성 보고서(할당량 없음)로서 유사한 작업을 실행하여 각 사용자가 사용하는 공간을 MB 단위로 추정할 수 있습니다.
sudo find /path -type f -ls | perl -lane ' $total{ $F[4] } += $F[6];
END { map { printf "%-8s %d\n", $_, $total{$_}/2**20; } keys %total; }'
공간이 실제로 블록에 할당되고 하드 링크가 값을 잘못 부풀리기 때문에 약간 편향될 수 있지만 조회가 완료될 때까지 기다릴 수 있다면 이상값을 잡기에 충분합니다. :) 죄송해요. 좀 그렇네요.