- df명령어
리눅스 시스템 전체의(마운트된) 디스크 사용량 확인 가능
- du명령어
df명령어가 시스템 전체의 디스크 공간을 확인하는 명령어라면, du명령어는 특정 디렉토리를 기준으로 디스크 사용량을 확인 가능
df와 du 명령어의 용량이 차이가 나는것은 df와 du가 디스크에 대한 계산을 다르게 하기 때문입니다.
df의 경우 파일시스템의 디스크 블럭들을 조회하여 총값 및 자유블럭의 수를 산출하는 반면 du(du -s)의 경우 파일트리를 따라 이동하면서 stat()라는 시스템 호출을 이용하여 얻은 각각의 디렉토리, 심링크 및 파일에 할당된 블럭의 수를 더하여 계산을 합니다.
하지만 두 명령어의 용량 차이가 터무니없이 크게 차이가 날 경우 몇 가지 의심해볼 사항이 있습니다.
첫번째, file discription이 open된 상태에서 file이 삭제 되었을 경우 관련 데몬을 리스타트 하거나 장비를 재부팅 하는 것으로 해결 할 수 있습니다.
두번째, dirty buffer에 있는 용량을 df는 계산하지만 du는 계산하지 않는 경우가 있다. 이때에는 sync 명령어로 해결이 가능합니다.
지워지고 반환되지 않은 파일 더 많다면 df가, sparse file이 더 많다면 du가 더 큰 용량을 표시하게 됩니다.
저의 경우에는 df의 용량이 더 크게 표시됩니다. 이것은 첫번째 경우에 해당됩니다.
lsof -n | grep deleted 명령어를 이용하여 디렉토리 상에선 지워졌지만 프로세스상에서 레퍼런스 카운트가 존재하는 파일을 검색하여 해당 프로세스를 리스타트 하는것으로 해결 가능합니다.
문제가 있는 데몬을 죽이거나 리부팅을 하는것이 가장 손쉬운 방법이겠지만 이런 방법으로도 두 명령어의 표시되는 용량이 차이가 줄어들지 않는 경우도 있습니다. 이경우 du와 df의 계산방법의 차이로 표시되는 크기가 다른 것으로 생각됩니다.