df, du 명령어 차이점

df와 du

df 명령어는 리눅스 시스템 전체의 디스크 사용량을 확인할 수 있는 도구

du 명령어는 특정 디렉터리를 기준으로 디스크 사용량을 확인하는 도구

df와 du의 차이점

디스크에 대한 계산을 다르게 하기 때문에 결과가 다를 수 있다.

df : 파일 시스템의 디스크 블록을 조회하여 총 값과 자유 블록의 수를 계산한다.

du : 파일 트리를 따라 이동하면서 stat()라는 시스템 호출을 이용하여 각각의 디렉터리 및 심볼릭 링크 및 파일에 할당된 블록의 수를 더하여 계산한다.

df와 du의 차이가 발생할 때 해결방법

  • 파일 디스크립터가 열린 상태에서 파일이 삭제된 경우, 해당 프로세스를 재시작하거나 시스템을 재부팅하여 문제를 해결 할 수 있다.

  • df는 dirty buffer에 있는 용량을 계산에 포함하지만 du는 계산하지 않는다. 이 경우 sync 명령어를 이용하여 dirty buffer를 비워 해결 할 수 있다.

삭제 되지 않고 반환되지 않은 파일이 많다면 df가 더 큰 값을 보여주게 되고, sparse 파일이 많다면 du가 더 큰 값을 보여주게 된다.

lsof -n | grep -i deleted 명령어를 이용하면, 디렉터리 상에서 삭제되었지만 프로세스에서 참조 카운트가 존재하는 파일을 찾을 수 있다. 해당 프로세스를 재시작하면 문제를 해결할 수 있다.

[ec2-user@TEST ~]$ sudo lsof | grep -i deleted
dbus-brok   1937                             dbus   12u      REG                0,1   2097152          4 /memfd:dbus-broker-log (deleted)

일부 파일이 삭제 되었지만 여전히 프로세스에 의해 열린 상태로 유지되고 있기 때문에 이럴 가능성이 크다.

du의 경우 파일이 더 이상 디렉터리에 연결되어 있지 않으므로 계산하지 않지만

df는 여전히 디스크 공간을 차지하는 것으로 계산한다.

Last updated