Origin 인스턴스(테스트용)
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
Resize 인스턴스
Temp 인스턴스
Origin 인스턴스(원본)를 준비 후 인스턴스 정지하고 볼륨을 추출한다.
(필자는 테스트로 진행하기 때문에 원본 인스턴스를 생성 후, Origin 인스턴스의 볼륨을 추출한다.)
(실제 사용하는 인스턴스를 사용할 경우 해당 인스턴스의 볼륨을 스냅샷을 생성 후, 생성된 스냅샷을 통해 볼륨을 생성한다.)
Resize 인스턴스를 생성 후 인스턴스 중지하고 볼륨 탭에 들어가서 Resize의 볼륨을 분리합니다.
Temp 인스턴스 생성 후 Origin, Resize 볼륨을 연결해준다.
아래의 이미지는 Origin, Resize 볼륨을 연결 후 해당 인스턴스의 스토리지 탭에서 제대로 연결되었는지 확인할 수 있다.
Temp 인스턴스에 SSH 연결하고 lsblk를 통해 연결된 볼륨을 확인한다.
이때, xvdf 가 Origin 볼륨(30G), xvdg가 Resize 볼륨(20G)이다.
lsblk
위의 이미지에서 MOUNTPOINT 가 작업할 파티션(xvdf1, xvdg1)에 '/'로 지정되어 있다면 잘못되었기 때문에 잘 체크해준다.!! (파일 시스템을 체크할 때 마운트되어있으면 안되기 때문이다.)
아래의 작업을 진행할 때 볼륨의 타입이 disk가 아닌 part(파티션)에 작업을 진행한다.
e2fsck -f /dev/xvdf1
resize2fs -M -p /dev/xvdf1
resize2fs 옵션
-M : 파일 시스템을 최소한의 크기로 줄임
-p : 실행이 완료되는 상태를 퍼센트 비율로 출력
위의 이미지에서 빨간 박스는 4K단위의 블록의 974729개 이다.
계산식
blockcount * 4 / (16 * 1024)
위의 공식대로 계산하면
974729 4 / (16 1024) = 237.97094...이 나오는데 올림해서 238이다.
dd if=/dev/xvdf1 of=/dev/xvdg1 bs=16M count=238 status=progress
// bs는 한번에 읽고 쓸 사이즈를 의미하고, count는 횟수
// status=progress는 진행 상태를 표시
resize2fs -p /dev/xvdg1
e2fsck -f /dev/xvdg1
다시 aws console로 돌아가서 Temp 인스턴스를 중지하고, Origin, Resize 볼륨을 분리하고,
Origin 인스턴스에 Resize 볼륨을 연결시킨다.
이때, Origin 인스턴스가 루트 디바이스로 마운트 되어야하기 때문에 Origin 인스턴스의 루트 디바이스 이름과 동일하게 입력한다. 볼륨을 연결 후 Origin 인스턴스를 다시 시작한다.
Origin 인스턴스의 스토리지 탭에서 축소된 볼륨크기를 확인 할 수 있다.
다시 MySQL에 접속하여 이전 볼륨의 데이터와 동일한지 한번 확인하자