AWS 를 사용하다보면 Root 볼륨을 너무 높게 잡아버리는 경우가 존재한다.
AWS EBS 특성상 용량을 증가시키는 것은 잘 나와있으며 방법 또한 간단하다.
그러나 용량 수정기능에서 용량을 줄이는 것은 불가능하다.
스냅샷을 찍어서 복구를 한다고 하더라도 아래와 같이 볼륨 크기는 확대만 가능하며 축소할 수 없다고 한다.
그렇다면 내가 루트 볼륨을 잘못 잡아버리면 어떻게 볼륨 크기를 변경해야 하는 걸까?
필요 전제 조건
1. 원본 디스크 스냅샷 ( 데이터 마이그레이션 용도 OLD_DATA 라고 칭하겠음)
2. Amazon Linux 2023 서버 생성 후 디스크만 제외하고 서버 삭제 ( 남은 디스크를 NEW_DATA라고 칭하겠음)
3. 마이그레이션 작업을 진행 할 임시 EC2 필요 ( Temp EC2라고 칭함)
작업 순서
1. Temp EC2에 OLD_DATA, NEW_DATA 볼륨 Attach 및 Data 마이그레이션
2. UUID, fstab, grub.cfg 수정
3. 디스크 변경 작업
1. Disk Attach 및 Data 마이그레이션
Disk Attach는 AWS 콘솔 화면에서 쉽게 할 수 있으므로 생략하겠습니다.
Temp EC2에 OLD_DATA, NEW_DATA를 Attach한 후 Temp EC2에 접속하여 lsblk 명령어를 입력해 봐라
lsblk는 블럭 장치 목록을 마운트 되지 않은 블럭 장치 포함해서 보여주는 명령어 이다.
nvme0n1 259:0 0 8G 0 disk
├─nvme0n1p1 259:1 0 8G 0 part /
├─nvme0n1p127 259:2 0 1M 0 part
└─nvme0n1p128 259:3 0 10M 0 part /boot/efi
nvme1n1 259:4 0 20G 0 disk
├─nvme1n1p1 259:5 0 20G 0 part
├─nvme1n1p127 259:6 0 1M 0 part
└─nvme1n1p128 259:7 0 10M 0 part
nvme2n1 259:8 0 10G 0 disk
├─nvme2n1p1 259:9 0 10G 0 part
├─nvme2n1p127 259:10 0 1M 0 part
└─nvme2n1p128 259:11 0 10M 0 part
그럼 위와같은 화면이 나온다. nvme0n1은 내 root 볼륨이고
nvme1n1은 OLD DATA, nvme2n1은 NEW DATA라고 생각하면 된다.
그 후 blkid 명령어를 통해서 각 파티션의 UUID를 확인해 준다.
우리는 nvme2n1의 UUID를 nvme1n1의 UUID로 맞춰줄 것이다.
또한 우리가 작업 해 줄 것은 각각의 xfs 형식을 가진 Data Disk이다.
OLD DATA의 경우는 nvme1n1p1이 될 것이고 NEW DATA 의 경우는 nvme2n1p1이다.
다른 파티션은 그냥 놔두는게 좋다.
특히 128은 부팅에 관련된 파티션으로 잘못건드리면 부팅이 안된다.
mkdir /mnt/new_data
mkdir /mnt/old_data
데이터 마이그레이션을 위해서 각각의 디스크를 마운트 해 줄 디렉토리를 생성해야 한다.
mount /dev/nvme1n1p1 /mnt/old_data/
mount /dev/nvme2n1p1 /mnt/new_data/
그 후 마운트를 해준다.
mount: /mnt/new_data: wrong fs type, bad option, bad superblock on /dev/nvme2n1p1, missing codepage or helper program, or other error.
그런데 마운트를 하려고 하는데 이런 명령어가 뜰 수 있다.
여러 이유가 있을 수 있지만 우리가 하는 작업의 경우 UUID가 겹쳐서 해당 증상이 나오는 것이다.
Amazon Linux 2023으로 EC2를 시작하고 루트 볼륨을 만들면 UUID가 겹치는 경우가 생긴다.
그럴 경우 mount 명령어에 -o nouuid 라는 옵션을 주면 된다.
이 옵션은 일시적으로 해당 작업에 UUID를 중복체크 하지 않는다 라는 것이다.
xfsdump -l0 -J - /mnt/old_data | xfsrestore -J - /mnt/new_data
해당 명령어는 xfs 형식을 가진 파일 시스템을 다른 장치나 디렉토리로 백업하고 복원하는 기능을 가지고 있다.
level을 0으로 지정해 전체 데이터를 백업해 준 후 new_data 쪽으로 복원하는 것이다.
그 후 부팅 디스크쪽 작업을 할 것이다.
mount /dev/nvme2n1p128 /mnt/new_data/boot/efi/
cd /mnt/new_data/boot/efi/EFI/amzn/
vi grub.cfg
이 grub.cfg 파일이 부팅시 읽어오는 파일이라고 생각해주면 된다.
search.fs_uuid (내 EC2 UUID) root
set no_modules=y
set prefix=($root)'/boot/grub2'
configfile $prefix/grub.cfg
이 파일을 열어보면 위처럼 나오는데 Ec2 UUID를 OLD _DATA의 UUID로 변경하면 된다.
그렇게 되면 부팅 시 해당 UUID를 확인해서 루트 볼륨으로 올라올 것이다.
그 후엔 fstab을 변경해야 한다.
vi /mnt/new_data/etc/fstab
UUID=(UUID) / xfs defaults,noatime 1 1
UUID=(UUID) /boot/efi vfat defaults,noatime,uid=0,gid=0,umask=0077,shortname=winnt,x-systemd.automount 0 2
왜냐면 우리는 모든 데이터를 OLD DATA로 덮어 씌웠기 때문에 모든 UUID가 그 전 DATA 기준으로 잡혀있다.
그러므로 /boot/efi가 마운트 돼서 올라오기 위해서는 /boot/efi의 UUID를 변경해야 한다.
그 이후 두 New Disk의 마운트를 풀어준다.
umount /mnt/new_data/boot/efi
umount /mnt/new_data
그리고 마지막으로 실제 디스크의 UUID를 변경해주면 된다.
xfs_admin -U (OLD_data UUID) /dev/nvme2n1p1
이제 resizing 한 디스크를 root 볼륨에 붙여서 부팅이 되는지 확인해보면 된다.
'[AWS 기타]' 카테고리의 다른 글
[AWS] VPC간 보안그룹 공유 기능 (0) | 2024.11.11 |
---|---|
Amazon Linux 2023 시스템 로그 확인법 (0) | 2024.10.30 |
[AWS] AWS 환경에서 사용 불가능 IP (1) | 2024.10.25 |
AWS-Vault (0) | 2024.07.28 |
VPN이란 무엇인가? (0) | 2023.02.08 |