Aws Ubuntu EC2 볼륨 축소하기

이재철·2022년 4월 20일
0

환경

  • AWS EC2 Ubuntu
  • 가용 영역 : 모든 볼륨의 가용 영역이 같아야 한다.

인스턴스(준비)

  1. Origin 인스턴스(테스트용)

    • 간단히 MySQL을 설치하고 test db 생성 후 값을 넣어 두었다.
    create database test;
    use test;
    create table test(
        id varchar(24),
        text varchar(20)
    );
    
    select * from test;
    insert into test values('1', '1'),('2', '2'),('3', '3');
    // 아래 명령어를 통해 해당 인스턴스가 ext인지 확인
    df -TH
  2. Resize 인스턴스

    • 축소할 볼륨을 추출하기 인스턴스이다.
    • 볼륨을 생성하고 삭제한다.
  3. Temp 인스턴스

    • Origin의 볼륨의 데이터를 Resize 볼륨에 복사하기 위한 작업을 진행하기 위한 인스턴스이다.

EC2 볼륨 축소 작업

  1. Origin 인스턴스(원본)를 준비 후 인스턴스 정지하고 볼륨을 추출한다.
    (필자는 테스트로 진행하기 때문에 원본 인스턴스를 생성 후, Origin 인스턴스의 볼륨을 추출한다.)
    (실제 사용하는 인스턴스를 사용할 경우 해당 인스턴스의 볼륨을 스냅샷을 생성 후, 생성된 스냅샷을 통해 볼륨을 생성한다.)

  2. Resize 인스턴스를 생성 후 인스턴스 중지하고 볼륨 탭에 들어가서 Resize의 볼륨을 분리합니다.

  3. Temp 인스턴스 생성 후 Origin, Resize 볼륨을 연결해준다.
    아래의 이미지는 Origin, Resize 볼륨을 연결 후 해당 인스턴스의 스토리지 탭에서 제대로 연결되었는지 확인할 수 있다.

  4. Temp 인스턴스에 SSH 연결하고 lsblk를 통해 연결된 볼륨을 확인한다.
    이때, xvdf 가 Origin 볼륨(30G), xvdg가 Resize 볼륨(20G)이다.

lsblk


위의 이미지에서 MOUNTPOINT 가 작업할 파티션(xvdf1, xvdg1)에 '/'로 지정되어 있다면 잘못되었기 때문에 잘 체크해준다.!! (파일 시스템을 체크할 때 마운트되어있으면 안되기 때문이다.)
아래의 작업을 진행할 때 볼륨의 타입이 disk가 아닌 part(파티션)에 작업을 진행한다.

  1. 다음으로 e2fsck를 통해서 파일 시스템을 체크한다.
e2fsck -f /dev/xvdf1

  1. resize2fs 명령어를 통해 ext2/ext3/ext4 파일 시스템 크기를 최소한의 크기로 줄인다.
resize2fs -M -p /dev/xvdf1

resize2fs 옵션

-M : 파일 시스템을 최소한의 크기로 줄임
-p : 실행이 완료되는 상태를 퍼센트 비율로 출력

위의 이미지에서 빨간 박스는 4K단위의 블록의 974729개 이다.

  1. 6번의 결과 이미지에 빨간 박스 부분이 blockcount이다.
    다음 작업으로 Resize 볼륨에 Origin 볼륨을 복사하기 위해서 dd 명령어를 통해 복사하기 위해 count를 계산해야 한다. 이때 bs=16M으로 진행한다.

    계산식

    blockcount * 4 / (16 * 1024)
    위의 공식대로 계산하면
    974729 4 / (16 1024) = 237.97094...이 나오는데 올림해서 238이다.

  1. 이제 dd 명령어를 통해 블록단위로 디스크(Resize 볼륨)를 복사를 해준다.
dd if=/dev/xvdf1 of=/dev/xvdg1 bs=16M count=238 status=progress
// bs는 한번에 읽고 쓸 사이즈를 의미하고, count는 횟수
// status=progress는 진행 상태를 표시

  1. 디스크 복사가 끝나면 Resize 볼륨의 파일 시스템 크기를 조절한다.
resize2fs -p /dev/xvdg1

  1. e2fsck를 통해 파일 시스템을 체크한다. 파일 시스템 체크가 완료되면 Temp 인스턴스에서 수행해야 하는 작업이 완료되었다.
e2fsck -f /dev/xvdg1

  1. 다시 aws console로 돌아가서 Temp 인스턴스를 중지하고, Origin, Resize 볼륨을 분리하고,
    Origin 인스턴스에 Resize 볼륨을 연결시킨다.
    이때, Origin 인스턴스가 루트 디바이스로 마운트 되어야하기 때문에 Origin 인스턴스의 루트 디바이스 이름과 동일하게 입력한다. 볼륨을 연결 후 Origin 인스턴스를 다시 시작한다.

    Origin 인스턴스의 스토리지 탭에서 축소된 볼륨크기를 확인 할 수 있다.

  2. 다시 MySQL에 접속하여 이전 볼륨의 데이터와 동일한지 한번 확인하자

참고

0개의 댓글