파일을 삭제해도 용량이 변하지 않을 때

개요

나도 모르는 파일이 생겨 삭제했는데 디스크 용량이 줄어들지 않았다.


원인

파일을 rm으로 삭제하게 되면 해당 경로에서 파일이 삭제되지만 kernel이 /proc/[PID]/fd/[FD] 에서 해당 파일을 아직 점유 중이어서 디스크 용량이 줄어들지 않았다.

아래와 같이 lsof명령어로 확인 가능. 아래는 예시

lsof : list open files(열려있는 파일 나열), 열려있는 모든 파일과 그 파일들을 열고 있는 프로세스들의 목록 출력

$ lsof | egrep "deleted|COMMAND"
COMMAND       PID    TID TASKCMD     USER   FD  TYPE  DEVICE    SIZE/OFF      NODE NAME
ora         25575   8194 oracle    oracle   33   REG   65,65  4294983680  31014933 /oradata/DATAPRE/file.dbf (deleted)


해결책

가장 정상적인 해결 방법은 해당 파일에 해당하는 프로세스를 restart 하는 방법이다.

하지만 내 경우, Nifi 프로세스가 해당 파일을 점유하고 있었고, Nifi 서비스를 restart 시킬수 없는 상황이었다.

그래서 /proc/[PID]/fd/[FD] 경로의 파일을 제거하고 싶었지만, 해당 fd를 삭제하면 root 계정이어도 명령을 허용하지 않음이라는 에러가 뜬다.

그래서 적용한 해결책은 아래와 같다.

$ > /proc/[PID]/fd/[FD]

lsof로 확인한 파일의 FD의 용량을 0byte로 바꿔주었다.

물론 lsof명령어로 다시 확인하면 0byte로 해당 파일에 대한 목록은 나온다. 해당 목록과 같이 (deleted)로 삭제되지 않은 파일들의 목록을 안전하게 아예 지워주고 싶으면 서비스 restart가 좋은 방법이다.

Leave a comment