큰 로그 파일을 삭제했는데도 디스크 사용률이 그대로라면, 같은 경로에서 파일을 다시 찾는 것만으로는 원인을 확인하기 어렵습니다. 파일명은 사라졌지만 프로세스가 파일을 계속 열고 있을 수 있기 때문입니다. 이때는 삭제 명령의 성공 여부와 저장 공간이 회수되는 조건을 나누어 살펴봐야 합니다.

파일명 삭제와 공간 회수의 타임스탬프 차이
Linux에서 파일을 삭제하는 동작은 디렉터리에 있는 이름과 파일의 연결을 제거하는 것입니다. 파일을 가리키는 마지막 하드 링크가 없어져도 프로세스가 해당 파일을 열고 있다면, 마지막 파일 디스크립터가 닫힐 때까지 파일이 유지됩니다. 파일 디스크립터는 프로세스가 열린 파일을 다루는 데 사용하는 참조 번호입니다. Linux unlink 매뉴얼이 이 조건을 설명합니다.
회사에서 시스템 관리할때 스토리지 사용량때문에 장애가 난 케이스가 있었는데, 불필요 로그나 데이터 파일들을 지워도 파일시스템의 사용량은 그대로였습니다. 서비스 프로세스를 재기동 후 df -h로 봤을때 딱 물고있던 데이터만큼 줄어든 경험이 있었습니다.
예를 들어 실행 중인 프로그램이 로그를 열어 둔 상태에서 운영자가 경로를 삭제했다고 가정하겠습니다. 디렉터리 목록에는 로그가 보이지 않아도 프로그램은 기존 열린 파일에 계속 기록할 수 있습니다. 같은 이름으로 새 파일을 만들어도 기존 프로세스의 참조가 자동으로 새 파일로 바뀌지는 않습니다.

df와 du를 같은 범위에서 비교
먼저 사용량이 높은 파일시스템과 삭제한 파일이 있던 위치를 맞춥니다. 아래 명령의 /var/log는 예시이며 실제 확인 경로로 바꿔야 합니다. 삭제한 파일 자체 대신 남아 있는 상위 디렉터리를 지정합니다.
df -h /var/log
sudo du -xsh /var/log
df는 해당 경로가 속한 파일시스템의 공간을 보고하고, du는 지정한 디렉터리 아래에서 찾을 수 있는 파일의 사용량을 합산합니다. 따라서 파일시스템 전체를 보여 주는 df와 그중 일부인 /var/log의 du 값은 원래 같지 않을 수 있습니다. 전체를 비교하려면 df에서 확인한 마운트 지점을 대상으로 du를 실행하고, 접근 오류도 확인합니다.
삭제 후 해당 디렉터리의 du 값은 줄었는데 같은 파일시스템의 df 사용량이 유지된다면, 열린 삭제 파일을 확인할 이유가 있습니다. 다만 이 차이만으로 원인을 확정하지는 않습니다. 다른 경로의 파일 증가나 조회 범위 차이도 함께 검토해야 합니다. du의 -x는 다른 파일시스템으로 내려가지 않게 하지만, 대규모 디렉터리 조회에는 시간이 걸릴 수 있습니다.
lsof로 삭제된 파일을 잡고 있는 프로세스 확인
다음 명령은 이름 연결이 사라진 열린 파일을 조회합니다. lsof가 설치되어 있고 필요한 프로세스 정보를 조회할 권한이 있어야 합니다.
sudo lsof -nP +L1
lsof 매뉴얼에서 +L1은 링크 수가 1보다 작은 열린 파일을 선택하는 조건입니다. 출력에서는 COMMAND와 PID로 프로그램을 찾고, FD와 NAME으로 열린 참조 및 기존 경로를 살펴봅니다. 일반 파일을 나타내는 REG, 링크 수를 나타내는 NLINK, 삭제 표시인 (deleted)도 확인합니다.
파일 크기만 보고 행을 모두 더하지는 않습니다. 같은 파일을 여러 프로세스나 여러 디스크립터가 열면 중복 행이 생길 수 있고, SIZE/OFF는 파일 유형에 따라 크기 또는 오프셋을 나타냅니다. 장치와 inode 식별값인 DEVICE·NODE도 함께 비교하며, 논리적 파일 크기를 실제 회수할 블록 용량과 동일시하지 않습니다.
특정 PID로 좁힐 때는 아래 예시의 1234를 실제 확인한 값으로 바꿉니다. -a는 PID 조건과 삭제 파일 조건을 동시에 적용합니다. 결과가 없더라도 권한 부족이나 컨테이너의 조회 범위 제한이 없는지 확인해야 합니다.
sudo lsof -nP -a -p 1234 +L1

참조를 닫는 조치 후 같은 위치에서 검증
대상 프로세스를 찾았다면 해당 서비스가 제공하는 로그 재열기나 정상 종료 절차부터 확인합니다. 단순 설정 reload가 열린 로그까지 교체하는지는 서비스마다 다르므로 문서를 확인해야 합니다. 필요한 경우 영향 범위를 검토한 뒤 정상 재시작을 선택합니다.
임의의 프로세스를 강제 종료하거나 /proc 아래의 파일 디스크립터 경로를 곧바로 비우는 방식은 일반 해결 절차로 삼지 않습니다. 아직 처리 중인 작업이나 파일 내용에 영향을 줄 수 있습니다. 여러 프로세스가 같은 파일을 사용한다면 하나만 재시작해도 참조가 남을 수 있습니다.
조치 뒤에는 lsof 조회를 반복해 대상 참조가 사라졌는지 확인하고, 같은 경로의 df로 사용량을 다시 봅니다. 동시에 새 로그가 정상 경로에 기록되는지도 확인합니다. 참조가 사라졌는데 사용량이 기대만큼 줄지 않았다면 다른 파일 증가와 파일시스템 특성 등 별도 원인을 조사합니다.
결론
Linux에서 파일을 삭제해도 사용량이 줄지 않을 때는 삭제를 반복하기보다, 파일명과 열린 참조를 구분하는 것이 출발점입니다. df로 대상 파일시스템을 확인하고 du로 보이는 파일의 범위를 맞춘 다음, lsof +L1으로 삭제된 열린 파일과 소유 프로세스를 연결해 살펴봅니다.
그다음 서비스가 지원하는 방식으로 참조를 닫고 같은 파일시스템에서 결과를 검증합니다. 로그 운영 절차에도 삭제만으로 끝내지 않고 재열기와 기록 확인을 포함하면, 파일은 사라졌지만 공간은 남아 있는 상황을 판단하는 데 도움이 됩니다.