운영체제/Linux

[Linux] df - 디스크 사용량 모니터링 하기

민돌v 2023. 8. 28. 20:33
해당 포스팅은 인프런 "리눅스 성능 분석 시작하기" 를 수강하고 정리한 글입니다 :)
  • 리눅스 기반 os 에서 돌아가는 서버 시스템의 성능 측정 및 장애 대응에 대한 학습 내용 정리 글 입니다.

 

💡 리눅스 성능 분석의 기본 명령어

명령어 역할
uptime 시스템 가동 시간, Load Average 확인
dmesg 커널 메세지 확인 (OOME 발생 여부, SYN Flooding 여부)
free 메모리 사용 현황 확인
df 디스크 여유 공간 및 inode 공간 확인
top 프로세스들의 상태, CPU 사용률, 메모리 사용률 확인
netstat 네트워크 연결 정보 확인
tcpdump 네트워크 트러블 슈팅 분석을 위한 패킷 수집 명령어

 

 

 

 


✅ df  명령어

  • df는 리눅스 환경에서, 디스크의 여유 공간과  inode 의 공간을 확인할 수 있는 명령어 입니다.
  • "df -h" 명령어로, 파티션들을 볼 수 있습니다. ( -h : human readable 사람이 해석하기 좋은 출력결과로 해주는 옵션)
    • 파티션 별로 사용중인 used 영역, 전체 크기, 더 사용할 수 있는 크기, 사용중인 %, 각각의 파티션들의 어디에 마운트 되어있는지 확인할 수 있다.

 

 

 

✔️ 디스크 사용량 모니터링이 중요한 이유

파일 시스템이 100%가 된다면?
  • 사진처럼 root 파티션이 꽉차게 되면 "No space left on device" 라는 에러를 띄우면서 디스크가 full이 되었음을 알려줍니다.
  • 이렇게 되면 어떤 명령어도 제대로 동작하지 않고, 최악의 경우 ssh 접속도 불가능해지는 경우도 생길 수 있습니다.

그렇기 때문에 디스크 사용량 모니터링은 꼭 해야함..!

 


✔️ 디렉터리 별 사용량 측정

du -sh ./*
  • root(/) 디렉터리 하위 디렉토리 중 어떤 마운트 포인트가 디스크를 과하게 사용하고 있는지 확인하는 방법
  • 루트 디렉토리에서 해당 명령어를 사용하면, 루트 하단의 모든 디렉토리를 방문하면서 사용량을 보여 줍니다.

 

 

 

❗️ 만약, 아래 사진과 같이파일을 지웠는데 용량이 안늘어난다면 파일 핸들을 확인해 보아야 합니다.

  • 파일을 삭제해도 df 로 확인하면 파일 용량을 그대로 잡고있음을 확인할 수 있음
  • 막상 해당 디렉토리를 확인하면 파일은 없음

 


✔️ 파일 핸들

  • 파일 핸들(Handle)이란, A 라는 프로세스가 어떤 파일을 읽을 때, 이 파일을 누군가가 참조하고 있음을 기록하는 것입니다.
  • 핸들은 운영체제 내부에 있는 어떤 리소스의 주소를 정수로 치환한 값입니다.
  • 그리고 리소스의 주소와 이 핸들 값을 한 쌍으로 묶어서 관리하는데 이것을 '핸들 테이블'이라고 합니다.
  • 📌 결론적으로 이 파일 핸들이 지워지지 않으면, 파일도 용량이 확보되지 않습니다.

 

파일 핸들 삭제 방법

  • lsof : 파일 핸들을 확인하는 명령어
  • lsof 를 이용해 grep 으로 삭제할 파일을 찾은 후 어떤 프로세스가 삭제할 파일을 참조하고 있느지 (열고 있는지) 확인할 수 있음
  • → 이렇게 프로세스를 종료하면 파일 핸들이 반환되고 실제로 파일이 지워집니다.

 

 

 

 


inode 사용률 확인하기

df 명령어는 디스크 여유 공간 및 inode 공간을 확인할 수 있습니다. 이제 inode 에 대해서 알아보고자 합니다

 

✔️ inode란

  • 파일 또는 디렉터리에 대한 메타데이터를 저장하는 구조체 = 파일과 디렉터리의 개수
  • 즉, 파일과 디렉터리가 얼마나 많은가를 표현하는 컬럼입니다.

 

df -i
  • df -h 는 용량을, df -i는 개수를 표현
  • 아래 그림에서 IUsed가 각 파티션에서 사용하고 있는 파일과 디렉터리의 존재 개수를 나타냅니다.

 

 


📌 정리

  • ✔️df 명령어를 이용해서 디스크 여유 공간 및 inode 공간을 확인할 수 있다.
  • ✔️ 간혹 파일 핸들이 남아서 파일을 지웠지만, 용량이 확보되지 않는경우가 있음 그때는 lsof 명령어로 해당 파일핸들(어떤 프로세스에서 파일을 참조하고있는지) 를 확인하자
  • ✔️ inode는 파일과 디렉터리의 개수로 생각하면 된다.
  • ✔️inode 에도 최대값이 있으며 그 이상 파일을 만들수 없다는 의미