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