끄적이는 보송

[Linux] df 명령어 du 명령어 차이 본문

STUDY/Linux

[Linux] df 명령어 du 명령어 차이

끄적이는 보송 2023. 2. 18. 14:13
반응형

EC2 Instance의 Volume을 조사하던 중, df 명령어와 du 명령어의 결과 값이 다르게 출력된 적이 있었다. 왜 이런 결과가 나온 것이며 어떻게 조치해야 하는지 관련해 포스팅을 남긴다.

 

df 및 du 값이 다른 값을 가질 수 있는 이유

두 명령어에 서로 다른 값을 반환하는 것은 명령어에 분명한 차이점이 있기 때문이다.

df  명령어: 파일시스템의 디스크 블록들을 조회하여 총 값(버퍼 및 캐시 등을 포함) 및 자유블록의 수를 산출하는 방식. 리눅스 시스템 전체의(마운트 된) 디스크 사용량 확인 가능.

du 명령어: 파일 트리를 따라 이동하면서 stat()라는 시스템 호출을 이용하여 얻은 각각의 디렉터리, 씸볼릭 링크 및 파일에 할당된 블록 수를 더해 계산하는 방식. 특정 디렉터리를 기준으로 디스크 사용량을 확인 가능.

 

그렇다면 실질적으로 EBS Volume에 사용되는 값은 어느 것인지?

df 명령어의 값은 파일시스템에서 사용하는 File Cache/Buffer 등의 결과 값이 반영이 되나, du 명령어의 값은 파일이 실제로 차지하는 공간(블록) 수를 반영한 값이 출력이 된다고 한다. 이러한 차이점으로 인하여, 디스크에서 실제 파일이 차지하는 공간을 파악하시는 용도로는 du 결과 값을 조회하시는 것이 추천된다.

반응형

 

조치사항

1. sync 명령어를 수 차례 수행 이후에, df 및 du를 결과 값을 조회해 본다. dirty buffer에 있는 용량을 df는 계산하지만 du는 계산하지 않는 경우가 있는데, 이럴 경우는 sync 명령어로 해결이 가능하다.
(참고로 sync 명령어를 한 번만 누르면 됐지 여러 번 누르는 이유는 원래는 1회에 명령어가 수행되었지만 과거에는 시스템에서 명령어가 한 번에 동작하지 않는 이슈가 있었다고 한다. 그런 이유에선지 여러 차례 누르는 것이 관행처럼 이어졌다는 TMI...)

2. 'lsof | grep deleted' 명령을 통해 ‘deleted’ 상태에 있는 파일을 확인하여, 해당 PID를 찾아 그 프로세스를 리셋 혹은 종료하는 방식으로 df에서 잠식당한 공간을 확보할 수 있다. 
(현재 실행 중인 프로세스가 오픈한 파일에 대해서 삭제처리를 한 후에 해당 프로세스(태스크)를 종료하지 않으면 그 파일은 deleted 상태로 남게 된다고 한다. 'deleted' 상태의 파일까지 df는 더해 산출하기 때문에 du 명령어와 결괏값에서 차이가 발생하는 것.)

3. sync로도 문제점이 해결되지 않는 다면, EC2 Instance(리눅스)를 재기동(reboot) 하여 df 및 du를 결과 값을 조회해 본다. file description이 open 된 상태에서 file이 삭제되었을 경우, 관련 데몬을 리스타트하거나 장비를 재부팅하는 것으로 해결이 가능하다고 한다.

실제로는 사용하지 않아서 그냥 내버려 둬도 되지 않느냐라고 볼 수 있지만... 파일시스템 상태정보와 관련이 있기 때문에 실제 사용량이 많지 않아도 df에서 100%로 보이면 여유공간이 없다고 파일 생성이 되지 않는다고 한다.

 

 

[+] https://support.bespinglobal.com/ko/support/solutions/articles/73000560685--linux-df-du-%EB%AA%85%EB%A0%B9%EC%96%B4-%EC%B0%A8%EC%9D%B4%EC%A0%90-%EC%B0%A8%EC%9D%B4%EB%82%A0-%EB%95%8C-%ED%95%B4%EA%B2%B0-%EB%B0%A9%EB%B2%95

반응형
Comments