질문 ;
'du'라는 명령어로 /var를 살펴봤더니, du로 표시되는 /var 파티션의 사용량이
df로 표시되는 /var 파티션의 사용량과
차이를 나타낸다는 말이었습니다.
실제, /var 파티션을 살펴봤지만, du로 표시되는 /var 파티션의 사용량이
맞다는걸 알수 있었습니다.
혹, 다른 문제가 있지 않나 싶어서 'du /usr', 'df /usr' 해서 /usr 파티션의
경우를 살펴보았지만,
/usr파티션은 du로 표시되는 사용량과 df로 표시되는 사용량이 서로 비슷하게
나타났습니다.(앞선 메일을 보시면 아시겠죠)
다시 질문의도로 돌아가서,
이렇게 du라는 명령어로는 약 3MByte 밖에 안되는 사용량을 나타내는데 비해,
df로는 2GByte를 다 사용하고 있다고 나오는
차이점이 뭘까요?
그리고, 그로 인해 /var 파티션이 넘친결과를 보여 메일을 받아올수 없습니다.
이럴때 해결은 어떻게 해야할까요?
앞선메일에서 푸념식으로 말씀드렸듯이, rebooting후에는 모두 정상적으로
나타났습니다. du, df 모두 3MByte 정도로..
------------------------------------------------------------------------
답변;
1. 유닉스에서 open된 파일이 지워지는 경우 해당 어플리케이션에게는 아직
억세스 가능한 상태로 남아있게 됩니다. 이 파일은 해당 어플리케이션이
파일을 close 해야 남은 용량이 반환됩니다. 가령 여러 서버의 로그가
그러한 경우에 해당됩니다. apache log파일같은 경우겠죠. 로그가
크다고 apache process를 죽이지 않고 그냥 지운다고 용량이 회복되지
않습니다.
2. df와 du는 크기를 재는 방식이 달라서, df는 파일시스템 정보 기준으로
하지만 du는 실제 크기를 재는 것으로 알고 있고, df에서는 sparse
file같은 경우 디스크상에서 차지하는 용량만 나오지 실제 용량이
나오지 않습니다. du로 보시면 그런 용량도 보일 겁니다. 그리고 1)의
경우에서 지워진 파일의 경우 df에는 나타나지 않지만 du에는 나타날 수
있습니다. 지워지고 반환되지 않은 파일 용량이 더 많으면 df가 크고,
sparse file이 큰게 많으면 du가 더 많이 나오겠죠.
3. FreeBSD 4.x의 경우 지워진 파일의 용량을 되돌리는 것은 시스템에 떠
있는 vnlru system daemon에 의해 이루어집니다(맞나…). 따라서
지워진 파일 용량 반환은 조금 있다 이루어지게 되고요.
4. 이래저래 용량 반환이 안되면 umount하고 다시 mount 하는 것이
최선입니다. 가장 쉬운 방법은 reboot이겠죠.