어느 날 서버를 점검하던 중 특정 로그 파일이 디스크를 꽤 잡아먹고 있는 것을 발견하고 용량 확보를 위해 rm
명령어로 파일을 삭제했다. 파일 삭제 후 df -h
명령어로 확인해보았는데 파일 크기만큼 용량이 늘어나지 않았고, 삭제 전과 동일한 용량을 나타내고 있었다.
파일이 제대로 삭제되지 않은 것인가 해서 루트 디렉토리로 이동한 뒤 sudo du -sh *
를 실행해보니 정상적으로 삭제된 것처럼 보였다. 구글링을 좀 해보니 실행 중인 프로세스에서 해당 파일을 열어놓은 상태에서 삭제하게 되면 파일은 삭제된 것 처럼 보이지만 해당 프로세스와의 연결 남아 있는 상태가 된다고 한다.
아직 완전히 삭제되지 않은 파일을 확인하기 위해 lsof
1 명령어를 사용한다. 만약 lsof
가 없다면 설치하도록 하자.
sudo lsof | grep deleted
또는
sudo lsof +L1
출력된 결과에서 아까 삭제했던 파일을 찾아서 어떤 프로세스에서 아직 파일을 사용 중인지 확인할 수 있다. PID를 확인한 뒤 어떤 프로세스인지 확인해보자.
ps aux | grep PID
해당 프로세스가 삭제한 파일을 아직 잡아놓고 있으므로 프로세스를 종료/재시작하는 등의 처리를 해주면 더 이상 파일에 대한 참조가 남아있지 않게 되면서 정상적으로 삭제가 완료되어 디스크 용량이 늘어나게 된다.
참고 링크: https://unix.stackexchange.com/questions/34140/tell-fs-to-free-space-from-deleted-files-now
lsof : list open files ↩