EC2 디스크 용량 부족 해결

정혜인·2024년 12월 30일
0

이번에 디자이너, 기획자와 함께 사이드 프로젝트를 진행하면서 프론트엔드부터 백엔드, 클라우드까지 모두 혼자 맡아 개발하는 경험을 하고 있습니다.
서비스화하는 과정에서 예상치 못한 문제들이 많았는데, 그 중 하나가 바로 디스크 용량 부족 문제였습니다.


🚧 문제가 된 부분

실사용자가 있는 서비스이기에 용량을 어떻게 잡아야 할지 도저히 감이 잡히지 않아서 초기 디스크 용량을 8GB로 설정했습니다.

클라우드에 배포할 때도 딱히 디스크 용량을 크게 잡을 필요가 없다고 생각했습니다. 그러나 도커 컨테이너를 빌드하고 애플리케이션을 실행하는 과정에서 아래와 같은 문제가 발생했습니다.

write /root/.npm/_cacache/content-v2/sha512/e1/f0/a4efdc2c84c773329dab1f4eaa5ab244e22a25a8b842507f8e8ae22053ef91074fbde0d9432fcd5ab4eec65f9e6e50ab9ea34b711cdb6f13223a0fb59d33: no space left on device
ERROR: Service 'backend' failed to build : Build failed

이 오류 메시지는 디스크 공간 부족을 의미합니다.
너무 처음 본 오류 메시지라, 처음에는 용량이 부족해서 발생하는 문제인 것인지도 알지 못했습니다...
프로젝트 규모가 커질수록 예상보다 많은 디스크 용량을 차지하게 된다는 것 자체를 생각해내지 못했습니다..........


🔍 문제 해결을 위한 첫 시도

문제를 해결하기 위해 여러 가지 방법을 시도했습니다. 먼저, 도커와 NPM 캐시를 제거해 보았지만, 여전히 문제가 해결되지 않았습니다. 캐시 정리 명령어는 다음과 같이 입력했습니다:

docker system prune -a --force
npm cache clean --force

하지만 이 방법으로도 디스크 용량은 충분히 확보되지 않았고, 빌드는 여전히 실패했습니다. 그때부터는 디스크 용량을 확장해야 한다는 사실을 깨닫고, AWS EC2 인스턴스의 디스크 크기를 확장하기로 했습니다.


🔧 디스크 크기 확장

1. EC2에서 디스크 크기 확장

먼저, AWS 관리 콘솔에 접속하여 EC2 인스턴스에 연결된 EBS 볼륨의 크기를 8GB에서 20GB로 확장했습니다. 이 작업은 AWS 콘솔에서 EBS 볼륨을 선택한 후, Modify Volume 옵션을 사용하여 용량을 변경할 수 있습니다.

이후 디스크 크기 확장을 완료하고, 서버에서 resize2fs 명령어를 통해 파일 시스템을 확장하려 했습니다. 하지만 여기서 "xvda" 디스크를 찾을 수 없다는 오류가 발생했습니다.

2. 문제의 원인 분석

처음에는 /dev/xvda 디스크를 확장하려고 했지만, lsblk 명령어로 디스크 목록을 확인한 결과, 실제로 EC2에서 사용 중인 디스크는 xvda가 아니라는 사실을 알게 되었습니다.

lsblk

출력 결과:

NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
xvdf    202:0    0  20G  0 disk
└─xvdf1 202:1    0  20G  0 part /

이제 xvdf1이라는 디스크 파티션이 실제로 사용 중인 디스크임을 확인할 수 있었습니다.


🔧 디스크 확장 후 파일 시스템 크기 조정

3. 올바른 디스크 확장

정확한 디스크 파티션을 확인한 후, resize2fs 명령어를 /dev/xvdf1 디스크에 대해 실행했습니다.

sudo growpart /dev/xvdf 1
sudo resize2fs /dev/xvdf1

이 명령어를 통해 디스크 파티션을 확장하고, 파일 시스템의 크기를 변경했습니다. 이후, df -h 명령어로 디스크 용량을 확인해 보니, 정상적으로 용량이 20GB로 확장되었습니다.

df -h

출력 결과:

Filesystem      Size  Used Avail Use% Mounted on
/dev/xvdf1      20G   5.6G  14G  30% /

💡 디스크 용량 확인 및 도커 빌드 재시도

디스크 용량이 20GB로 확장된 것을 확인한 후, 도커 빌드를 다시 시도했습니다. 이제는 용량이 충분히 확보되어, 도커 빌드가 문제 없이 완료되었습니다.


🔑 느낀 점

  1. 서비스 규모를 고려한 디스크 용량 설정: 프로젝트 초기에는 디스크 용량을 최소한으로 설정했지만, 실제로 서비스를 운영하게 되면 예상보다 많은 용량이 필요하다는 점을 깨달았습니다. 디스크 용량을 충분히 확보하고 시작하는 것이 더 효율적일 수도 있겠다는 생각이 들었습니다.
    물론 전 경험이 없었기 때문에...... 경험을 통해 적절한 용량을 예측해내는 것도 중요하겠다는 생각을 하게 되었습니다.

  2. 디스크 확장 방법: lsblk 명령어를 사용하여 실제로 사용 중인 디스크를 확인하고, 그에 맞게 파일 시스템을 확장하는 방법을 배우게 되었습니다.

  3. 캐시 관리: 도커 및 NPM 캐시를 주기적으로 정리해주면서 저장 공간을 확보해야겠다는 생각을 하게 되었습니다.

0개의 댓글