본문 바로가기
💻 개발/졸업과제

EC2의 EBS 볼륨 줄이기

by 컴쏘 2023. 8. 16.

Private Docker Registry의 EBS 볼륨을 줄여보자.

(15GiB → 8GiB)

 

참고 링크 

[Linux] EC2 EBS 부팅 볼륨 축소 (ext 4 / Amazon Linux 1)

 

[EC2 인스턴스 스냅샷 생성 & 스냅샷으로 EBS 볼륨 복제]

 

우선, 인스턴스가 실행 상태이어야 한다.

[스토리지] - [볼륨 ID] 클릭
[EBS] - [볼륨] - [해당 볼륨 선택] - [작업] - [스냅샷 생성]
스냅샷 생성하기
스냅샷 탭으로 들어가면, 대기 중이라고 뜬다.

시간이 조금 지나면 사용 가능으로 변경됨

완료됨으로 표시가 되면, [해당 스냅샷 선택] - [작업] - [스냅샷에서 볼륨 생성]

 

[주의!!]

볼륨 생성 시 주의해야 할 점은 가용 영역을 맞춰주는 것
생성 확인

 

 

[원본 EC2 인스턴스와 같은 OS로 EC2 신규 생성 & EBS 볼륨 떼기]

 

원본 EC2와 동일한 설정의 EC2를 생성

  • 스토리지는 전보다 작게 (가장 기본 8GB로 함)
  • 원본 EC2는 실행 중지 시키기

새로 만든 EC2 확인
새로 만든 EC2의 볼륨 분리하기
이제 3개의 볼륨이 보인다.
새로 생성한 EC2는 이제 필요 없음 (종료 시키기)

 

 

[Temp 인스턴스 생성 & EBS 모두 연결]

 

디스크 복제 작업을 진행할 임시 인스턴스 생성 및 EBS 연결 단계

 

EC2 생성하기
temp EC2에 available 상태의 EBS 볼륨 2개 연결하기
연결하기
연결하기

 

위와 같은 방식으로 2개 다 연결해준다.

 

이제 3개의 볼륨이 temp EC2에 생성이 되었다.

생성 확인

 

 

[Temp 인스턴스에 SSH 연결하고 디스크 복사] 

 

temp EC2에 ssh로 접속
lsblk 로 블록 디스크 확인하기

 

결과

root@ip-172-31-38-93:/home/ubuntu# lsblk
NAME     MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0      7:0    0  24.4M  1 loop /snap/amazon-ssm-agent/6312
loop1      7:1    0  55.6M  1 loop /snap/core18/2745
loop2      7:2    0  63.3M  1 loop /snap/core20/1879
loop3      7:3    0 111.9M  1 loop /snap/lxd/24322
loop4      7:4    0  53.2M  1 loop /snap/snapd/19122
xvda     202:0    0     8G  0 disk
├─xvda1  202:1    0   7.9G  0 part /
├─xvda14 202:14   0     4M  0 part
└─xvda15 202:15   0   106M  0 part /boot/efi
xvdf     202:80   0    15G  0 disk
├─xvdf1  202:81   0  14.9G  0 part
├─xvdf14 202:94   0     4M  0 part
└─xvdf15 202:95   0   106M  0 part
xvdg     202:96   0     8G  0 disk
├─xvdg1  202:97   0   7.9G  0 part
├─xvdg14 202:110  0     4M  0 part
└─xvdg15 202:111  0   106M  0 part
  • 디스크는 3개가 있고 (xvda, xvdf, xvdg)
  • 각각의 디스크는 3개의 파티션을 가지고 있다.
    • 순서대로, 주 파티션, 작은 파티션, 부트 파티션이다.

블록 디스크 전체가 아닌 데이터 파티션만 작업한다.

  • 주 파티션만 작업하면 된다. (파티션 중 제일 위의 것)

원본 디스크 정리 작업

e2fsck, resize2fs를 순서대로 실행해준다

e2fsck -f /dev/xvdf1

e2fsck -f /dev/xvdf1

 

resize2fs -M -p /dev/xvdf1

resize2fs -M -p /dev/xvdf1

resize2fs 명령의 결과 마지막에 나오는 blocks는 이 파일시스템의 4k 블럭 숫자를 의미

필요한 16MB 블록 개수를 계산

계산 식 : block count * 4 / (16 * 1024)

1761780 * 4 / (16 * 1024) = 반올림해서 431

DD 명령어를 사용해서 디스크를 복사하기

  • 실제 블록디스크를 복사하는 작업이므로 시간이 생각보다 많이 걸림
  • 터미널이 끊어지지 않도록 사전에 screen 명령 사용
sudo dd if=/dev/xvdf1 ibs=16M of=/dev/xvdg1 obs=16M count=431 status=progress

sudo dd if=/dev/xvdf1 ibs=16M of=/dev/xvdg1 obs=16M count=431 status=progress

 

파티션 검토

resize2fs -p /dev/xvdg1

resize2fs -p /dev/xvdg1

 

e2fsck -f /dev/xvdg1

e2fsck -f /dev/xvdg1

 

이제 거의 완료되었다.

 

 

[축소된 볼륨으로 인스턴스 시작] 

 

원본 EC2의 볼륨을 분리하자. (사전에 EC2가 중지 되어있어야 한다.)

볼륨 분리

EC2의 복제한 볼륨 (축소시키려고 하는 볼륨 크기를 가진 볼륨) 또한, temp에서 분리시켜준다.

 

2개의 볼륨을 분리시키면 이제 2개가 사용 가능 상태가 된다.

사용 가능 상태 확인

 

이제 축소된 크기의 볼륨을 원본 EC2에 연결시키자.

볼륨 연결

 

볼륨 연결 시 부팅 볼륨 (루트 디바이스)로 마운트 되어야 하기 때문에, sda1으로 작성했다.

부팅 볼륨 (루트 디바이스)로 마운트

 

잘 연결되었다.

연결 확인

 

 

이제 확인해보자.

 

원본 EC2 실행

문제 없이 잘 돌아간다.