Development note/Linux

[Linux] 용량 체크 (df , du, lsof)와 그리고 df의 버그와 해결법

v명월v 2019. 7. 7. 22:17

안녕하세요. 명월입니다.


이 글은 Linux환경에서 디스크 용량 체크와 버그, 해결법에 대한 설명입니다.


로컬에서 윈도우를 사용하다 보면 OS 하드디스크가 부족하면 부족하다고 알림 메시지가 뜨거나 내 컴퓨터로 보면 쉽게 알 수 있는데, 리눅스는 메시지가 따로 뜨는 것도 없고 보통 터미널로 콘솔 운영이다보니 쉽게 알기가 힘듭니다.


저같은 경우는 몇 일전에 갑자기 서버에 있는 모든 프로그램들의 업로드 기능이 멈춰서 무슨 문제인가 봤더니 하드디스크가 꽉 찼더라고요.. 서버 pc다 보니 여러 어플리케이션을 기동시켜서 로그가 이래저래 많이 쌓이네요.. 자주 확인해야 하겠습니다.


그 때 제가 확인한 방법이 「df -h」 명령어였습니다. 루트에서 「du -hs *」로 확인하는 방법도 있습니다.

뭐 아주 간단합니다. 그런데 실제로 서버 환경에서 실행해 보시면 알겠지만 「df -h」가 처리 속도가 매우 빠릅니다.


근데 이게 버그 「df -h」의 경우는 버그가 있습니다.

위 이미지는 제 톰켓서버에 로그가 어마어마 쌓여있습니다. 거의 36기가 파일 두개가 떡하니 있네요.. 로그로...ㅎㅎㅎ

사실 이게 제가 톰켓을 설정을 잘못해서 생긴 현상인데 어쨋든 이유를 확인했으니 로그를 지웠습니다.

그리고 다시 「df -h」와 「du -hs *」를 확인하니....「du -hs *」로 볼 때는 확실하게 60기가 정도가 줄었습니다. 그런데 「df -h」는 그대로네요..

분명히 제가 삭제를 했으니 「du -hs *」가 맞을 것입니다. 그럼 「df -h」 문제라는 건데...


링크 - http://www.freethink.co.kr/?p=278

링크 - https://greenfinger.tistory.com/180


위 두 링크를 참조해 보니 아마 IO 라이브러리와 관계가 있는 것같습니다. 커넥션에 따라 문제가 생긴다는 것인데.. 요번에는 제가 100%까지 안가서 스샷을 남길 수는 없지만, 이전에 이 로그문제 때문에 하드 용량 사용률이 100%까지 간적이 있습니다. 역시 그때도 로그를 다 지웠습니다. 문제는 실제로 파일이 지워졌는데도 디스크가 꽉찼다고 에러가 났습니다.

이게 아마 「df -h」와 관계가 있는 듯 싶습니다. 제 결론은 「du」 명령어는 확실히 물리적으로 데이터를 확인하기 때문에 정확하나 실제 IO의 write, read 함수는 「df」명령어와 관계가 있다.

즉, 실제는 데이터가 비워져도 「df -h」상으로 데이터가 꽉 차있으면 더이상 파일 쓰기가 되지 않는다는 것입니다.


그래서 lsof로 정리할 수 있다고 해서 설치했습니다.

그리고 lsof 명령어를 치니 아래와 같은 결과가 나왔습니다.

확실히 5388이라는 프로그램에서 deleted파일을 잡고 있는 모습이 보입니다. 위 링크를 보면 프로세스를 「kill -9」로 죽이라고 하는데 이건 의미가 없습니다.

저는 이 5388이라는 프로그램이 무엇인지 확실하게 아니 재 기동을 시켰습니다.(tomcat입니다.)

이번에는 「df -h」 명령어로도 용량이 되돌아 왔습니다.


아마 용량으로 디스크에 쓰기가 막히신 분들은 아마도 「df -h」 명령어로 봤을때 용량이 다시 돌아오면 이 문제도 해결될 것입니다.


여기까지 Linux환경에서 디스크 용량 체크와 버그, 해결법에 대해 설명이었습니다.


궁금한 점이나 잘못된 점이 있으면 댓글 부탁드립니다.