AWS에서 CI / CD 처리 중 no space left on device 에러를 만났다..
해당 에러는 서버 디스크 용량이 없을 때 발생하는 에러로 어떤 해결 방법들이 있는지 알아보자 🤔
1. Docker를 사용하는 경우
생각보다 사용하지 않는 도커 이미지, 컨테이너, 볼륨등으로 인해 낭비되는 용량이 많다.
가장 먼저 확인해 볼 수 있는 부분은 사용하지 않는 docker image들이 확보하고 있는 용량이다. 비단 이미지뿐 아니라 사용하지 않는 컨테이너, 사용하지 않는 볼륨을 확인하고 삭제함으로써 용량을 확보해 보자.
사용하지 않는 컨테이너 삭제
docker container prune [OPTIONS]
사용하지 않는 이미지 삭제
docker image prune [OPTIONS]
사용하지 않는 네트워크 삭제
docker network prune [OPTIONS]
사용하지 않는 볼륨 삭제
docker volume prune [OPTIONS]
사용하지 않는 리소스 전부 정리
docker system prune [OPTIONS]
옵션들은 공식 문서에 잘 나와있으니 참고 😄
만약 도커로 인해 낭비되고 있는 용량들이 많다면 위의 행위들로 인해 어느 정도 용량 확보가 가능하다.
2. AWS 사용 시 할당된 디스크가 적은 경우
낭비되는 용량이 없을 경우 애초에 할당된 디스크 용량이 적진 않은지 확인해 보자.
클라우드 사용 시에는 추가적으로 볼륨을 할당해 줄 수 있다. 현재는 EBS 용량이 다 찼기 때문에 발생한 에러이므로 용량을 늘려줘야 한다.
현재 8GIB으로 아주 적은 양의 볼륨만 할당되어 있는 상태다.
추가로 볼륨을 생성해서 마운트 해줌으로써 디스크 용량을 확장해 보자.
1. 디바이스 정보 확인
lsblk 명령어를 통해 리눅스에서 디바이스 정보를 확인해 보자.
현재는 8G로 되어있는 걸 확인할 수 있다.
256G로 확장해 보자.
2. EBS 용량 확장
인스턴스에 연결된 볼륨을 우클릭 후 볼륨 수정에 들어가 원하는 크기로 변경해 준다. 256GB으로 변경해 보자.
그럼 볼륨 상태 변경이 일어나게 되는데 기다리면 된다. optimizing(0%) ~
3. EBS 용량 확장이 적용되었는지 확인
8G -> 256G로 확장되어 있는 걸 확인할 수 있다. 하지만 확장된 사이즈가 마운트 되지 않아 실제로 할당되진 않은 모습이다.
4. 파티션 용량 할당
growpart 명령어를 통해 nvm0n1 첫 번째 파티션의 용량을 할당해 준다.
sudo growpart /dev/nvm0n1 1
하지만 아직까진 df 명령어를 통해 현재 사용 중인 파일시스템의 용량을 살펴봐도 반영이 안 되어있다.
5. 파일시스템 마운트
sudo resize2fs /dev/{파티션명}
용량이 확장된 파티션을 리사이즈한다.
ex4 파일시스템일 경우 resize2fs 명령어를 사용
xfs 파일시스템일 경우 xfs_growfs 명령어를 사용
6. 할당된 용량 확인
df 명령어를 통해 다시 한번 파일시스템 용량 확인
디스크가 원하는 용량으로 확장된 걸 확인할 수 있다. 👍
서버 운영 중 디스크가 부족해서 문제가 발생한다면 위와 같은 맥락으로 해결해 보도록 하자.
댓글