본문 바로가기

내용 복습/devOps

Error response from daemon: mkdir /var/lib/docker/overlay2/...-init: no space left on device

ec2 인스턴스에 오랜만에 ssh로 접속하여 서버를 띄우려 했더니 위의 에러가 발생했다. 분명 보름전에 띄웠을 땐 접속이 잘 되었는데, 어디가 문제인지 몰라서 구글링해보니 ec2 용량이 없다는 것이다.

 

보는 강의나 책마다 이미지와 컨테이너 관리를 왜 그렇게 신경쓰나 했더니 이렇게 금방 용량이 다 차는 모양이다. 프리티어로 t2.micro이니 그럴만도 한데, 해결을 하려니 막막했다. 하긴 ec2에 프로메테우스와 jenkins, grafana까지 모두 띄워놨으니 로그만해도 엄청날 것이라 생각이 들었다. 

 

1. sudo apt-get autoremove

일단 구글링으로 찾은 이 명령어는 apt-get한 패키지를 삭제하는 것인데, nginx를 띄우기 위해 무분별하게 설치했던 것이 떠올라 실행해봤다. 하지만 아래의 에러코드를 받을 수 있었다.

Reading package lists... Error! E: Write error - write (28: No space left on device) E: IO Error saving source cache E: The package lists or status file could not be parsed or opened.

이것은 저 명령어도 실행할 수 없을만큼 용량이 차있다는 뜻이었다.

filesystem을 확인해보니 100%로 찍혀있고 7.9G를 사용중이었다. 이미지 크기는 719M밖에 안되는데....

 

2. 로그, 임시파일 제거

그래서 일단 위의 명령어를 실행하기 위해 임시파일과 캐시, 로그를 삭제해봤다.

- 임시 파일 삭제
sudo rm -rf /tmp/*
sudo rm -rf /var/tmp/*

- APT 캐시 강제 삭제
sudo rm -rf /var/cache/apt/*
sudo rm -rf /var/lib/apt/lists/*

- Docker 로그 및 임시 데이터 삭제
sudo rm -rf /var/lib/docker/containers/*/*-json.log
sudo rm -rf /var/lib/docker/tmp/*

 

세가지 방식의 명령어를 입력하고 나서야 위의 apt-get 패키지를 삭제하고 정상적으로 애플리케이션을 띄울 수 있었다.

/usr 의 크기가 너무 비대해진게 원인인 것 같은데, 일단 nginx를 띄우기 위해 불필요한 volume을 사용하기도 했고, 이미 띄웠는데, cert-bot 이미지가 계속 필요한지도 알아봐야겠다.