Cannot write: No space left on device
Error
Staging 서버를 구축하고 서버에서 테스트를 진행하면서 열심히 개발을 하던 중이었습니다. 로컬에서 먼저 테스트를 하면서 ‘이제 됐다!’ 하고 깃허브에 신나게 커밋을 날리고! 이제 Staging 서버에서 테스트를 해보기위해서 capistrano를 이용해 배포를 진행할 때!
라는 에러를 만났습니다… 처음에는 Staging 서버의 EC2서버 EBS의 용량이 부족한 줄 알고 AWS에서 확인했는데 20G 였습니다. 이정도면 충분한 용량인데 어디서 이 용량을 다 사용했는지 알아보기로 했습니다.
df & du
리눅스에서 파티션별 저장공간의 사용량을 알고 싶다면 df 명령어를 사용합니다.
위와 같이 -h를 함께 사용하면 사람이 읽을 수 있는 형태의 크기로 출력(예:1K, 512M, 4G)해줍니다!
옵션으로는 여러가지가 있으니 본인이 편한 옵션을 사용하시면 되겠습니다.
제 파티션의 용량을 확인해보고 표시한 부분과 같이 서버의 사용량이 100%가 된 것을 볼 수 있습니다. staging 서버이고 최근에 생성했기 때문에 정상적인 현상이 아닙니다. 어느 디렉토리에서 어떤 일이 일어났는지 알아봐야합니다.
du 명령어는 disk usage의 약자로 디렉토리(폴더)와 파일의 용량을 출력해주는 명령어입니다. du 명령어에도 많은 옵션이 있습니다. 필요한 옵션을 찾아서 사용해주시면 됩니다. 저는 현재경로에서부터 가장 용량을 많이 사용하는 디렉토리 10개를 뽑아봤습니다.
경로를 살펴본 결과 cron.log에 오류 log들이 쌓여있었습니다. rails whenever의 작업 중에 서버에 모이는 메시지들을 모았다가 1분에 한번씩 뿌려주는 작업이 있는데 staging서버를 구축하면서 해당 기능을 잊고있었습니다.
cron.log의 log들을 모두 삭제해주고
이와 같은 코드를 이용해 환경을 분리해주어 staging 서버에서는 해당 작업을 실행시키지 않도록 했습니다. :) 이런 일이 서비스 서버에서는 발생하지 않도록 서버의 용량을 잘 확인해야할 것 같습니다…ㅠㅠ