본문 바로가기

OS/Linux

Linux - 용량 확인 명령어 (du, df)

728x90

업무를 하다 보면 OS 디스크 사용량이 90% 초과하고 있다는 알림 또는 전화를 받습니다. // 보통 Log파일 용량이 매우 큼

리눅스에서 현재 서버의 용량을 알아보는 명령어로는 du와 df 가 있습니다.

참고) 로그 파일을 주기적으로 삭제하고 싶다면?  로그 파일의 용량을 줄이고 싶다면? 


1. 디렉토리 용량 확인(du 명령어)

특정 디렉토리의 사용량을 확인하고 싶을 때는 du 명령어를 이용하면 됩니다.
du [옵션] [디렉토리경로]
옵션
 -a : 디렉토리 내 파일의 모든 정보 포함하여 출력
 -m : 결과를 MB 단위로 출력
 -h : 사용자가 이해하기 쉬운 용량의 단위로 표시 (KB, MB, GB 등)  // 가장 많이 사용
 -l : 하드 링크의 용량도 포함하여 출력
 -s : 사용량 총합계만 출력 // 가장 많이 사용

※ 특정 디렉토리에서 용량이 큰 파일 10개 추출

ex) # du -h /var | sort -n | tail -10   or      # du -h /var | sort -nr | head -10


2. 디스크 용량 확인(df 명령어)

모든 디스크의 용량, 사용량 등을 확인할 때는 df 명령어를 이용하면 됩니다.
df [옵션] [디렉토리경로]
옵션
 -m : 결과 값을 MB 단위로 출력
 -h : 사용자가 이해하기 쉬운 용량의 단위로 표시 (KB, MB, GB 등)  // 가장 많이 사용
 -l : 하드 링크의 용량도 포함하여 출력
 -T : 마운트 된 볼륨의 포맷 타입을 출력

 

 

반응형

 

 

3. du, df 명령어의 용량이 서로 다르다면?

df 명령어로 확인했을 때는 용량이 컸는데 du 명령어로 확인하니까 용량이 작았다면,
특정 파일이 삭제됐는데 df에 반영되지 않은 상태로 볼 수 있습니다.

예를 들어 /var에 패키지 설치 중 용량을 확인해 봤을 때 df 명령어에선 사용 중인 공간이 27G,
du 명령어에선 사용 중인 공간이 12G로 차이가 날 수 있습니다.

※ 보통 시스템을 오래 켜 두면 발생한다고 한다.
그 이유는 특정 프로세스가 file descriptor를 연 후에 file descriptor가 가리키는 파일을 지웠는데
그 프로세스가 여전히 파일을 읽고 쓰는 상태입니다.

명령어 설명
du commit 된 size를 계산하여 출력
df 프로세스가 사용중인 size도 포함하여 출력

lsof 명령어를 통해 문제가 있는 프로세스를 찾을 수 있습니다.

# lsof | grep deleted
lsof 명령어를 통해 확인해 보면 NAME 마지막에 (deleted)라고 되어있는 프로세스가 있습니다.
이 경우는 파일이 지워졌지만 프로세스가 용량을 차지하고 있는 상태입니다.

# kill -9 [PID]
프로세스를 죽이고 df를 확인해보면 용량이 변하는 것을 확인 할 수 있습니다.

※ 위의 내용이 어렵다면 OS 재부팅을 하시면 됩니다.

 

[요약]

du는 파일시스템을 읽어서 계산하기 때문에 정확하지만 읽어야 할 정보가 많을 경우 응답이 느림
df는 응답이 빠르지만, 특정 상황에서 실제 용량을 반영해 주지 못하는 경우가 발생할 수 있음

728x90
반응형